Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ now it's pretty much a solo project but I welcome any feedback,
questions, or pull requests.

**What's happening now?** I am working on MFP pretty actively.
The most recent release (0.8.0) now contains a new UI backend
The most recent release (0.8.5) now contains a new UI backend
built with [Dear ImGUI](https://github.com/ocornut/imgui), via
the excellent
[imgui-bundle](https://github.com/pthom/imgui_bundle) bindings.
Expand Down Expand Up @@ -104,7 +104,7 @@ You type | What happens
---------|----------------
a | Autoplace mode. A symbol appears where the next object will go
m | Create message (literal data)
"hello world" RET| Put the string "hello, world" in the message
"hello, world" RET| Put the string "hello, world" in the message
c | Connect mode (will connect selected object to something)
a | Autoplace mode again
p | Create a processor
Expand Down Expand Up @@ -150,7 +150,7 @@ Ticket | Description
#220 | 'waf install' can give error messages. Workaround: See the bottom of README.build; possibly no action is required.

See the tickets in GitHub for detail on what I know about these problems, and for
other potential workarounds.
other potential workarounds.0

## DOCUMENTATION

Expand All @@ -170,13 +170,21 @@ things like iteration, conditionals, etc.
(If you are using the Clutter backend, there's no Help menu; you
can find a Clutter version of the tutorial in `doc/tutorial.mfp`)

There are a couple of YouTube videos in my channel:

* [MFP: Extending with Python and Faust](https://youtu.be/1bIXcOFw4t0)
* [MFP update: Dear Imgui UI](https://youtu.be/4Q14GiwKx6k)

There's also some documentation in the doc/ directory of this
repository.

**LAC 2013 paper:** This paper (doc/lac2013/lac2013.pdf) gives a
high-level overview of what MFP is all about and a bit of
discussion about what it can do.

**LAC 2025 paper:** This paper (doc/lac2025/lac2025.pdf) focuses
on live-coding support in Faust and Python.

**README files:** There are some READMEs in doc which may be
useful if you want to know more about how MFP works. Especially
note README.lv2 which describes how MFP patches can be saved as
Expand Down
125 changes: 125 additions & 0 deletions doc/ANNOUNCE-0.8.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
## MFP -- Music For Programmers, version 0.8.5

I'm happy to announce the next release in the MFP 0.8 series,
including a new scalable UI for high DPI displays and other
improvements and bug fixes.

A summary of changes is below. Please see the GitHub project page
for complete details:

http://github.com/bgribble/mfp

I still recommend cloning and building from source. The build
process is improved and does a better job of isolating the MFP
install into the `--prefix` destination.

If you simply can't get the build dependencies working, I have
made a start on a CD process using Github Actions. There is a
binary package for amd64 architectures (most AMD and Intel
processors) with an install script that should be built and
associated with the release. Versions of the installable packages
are built for Python 3.10, 3.11, 3.12, and 3.13; pick whichever
one is appropriate for you. Since MFP includes both Python and C
components, I am not very confident that this binary package will
work. Please let me know if you have success (or failure) with
it.


### Significant changes since release v0.8.4

* Scalable UI for high DPI displays
* Port to `imgui_bundle` 1.92.3, which pulls in scalability work
from Dear Imgui
* Scalable fonts throughout, so no more pixelated ProggyClean
* Magnification menu setting and command line option to globally
change UI magnification
* Fixes for DSP objects with dynamic numbers of inlets/outlets (`[faust~]`,
`[buffer~]`, `[plugin~]`) to make save/load work consistently
* Improvements to the [buffer~] processor
* Allow retrigger before the end of the buffer/region
* Configurable debounce and crossfade for retriggering
* Bug fixes in UI
* TAB to select next works more as expected
* Save/restore "panel mode" state for patches
* Object rename didn't work as expected
* Make button dispalys more consistent, respect size constraints
* Clip background color in text elements (comments)
* Improve rendering and positioning of via elements


### About MFP

MFP is an environment for visually composing computer programs,
with an emphasis on music and real-time audio synthesis and
analysis. It's very much inspired by Miller Puckette's Pure Data
(Pd) and Max/MSP, with a bit of LabView and TouchOSC for good
measure. It is targeted at musicians, recording engineers, and
software developers who like the "patching" dataflow metaphor for
coding up audio synthesis, processing, and analysis.

MFP is a completely new code base, written in Python and C. It
has been under development by a solo developer (me!), as a
spare-time project for several years.

Compared to Pure Data, its nearest relative, MFP is superficially
pretty similar but differs in a few key ways:

* MFP uses Python data natively. Any literal data entered in the
UI is parsed by the Python evaluator, and any Python value is a
legitimate "message" on the dataflow network. This makes it much
easier to make patches that work like conventional "programs".

* MFP provides fairly raw access to Python constructs if
desired. For example, a built-in editor allows live coding of
Python functions as patch elements at runtime.

* Name resolution and namespacing are addressed more robustly,
with explicit support for lexical scoping. This allows patches
to have a dynamic number of inputs and outputs, with hygienic
layer copying preserving the lexical structure of each "voice"

* The UI is largely keyboard-driven, with a modal input system
that feels a bit like vim. The graphical presentation is a
single-window style with layers and a tiled workspace rather
than multiple windows.

* There is fairly deep integration of Open Sound Control (OSC), with
every patch element having an OSC address and the ability to learn
any other desired address. MIDI controller learning is also robustly
supported.

* MFP has just a fraction of the builtin and addon functionality
provided by Pd. It's not up to being a replacement except in
limited cases!

The code and issue tracker are hosted on GitHub:

https://github.com/bgribble/mfp

Help can be found in the app; I recommend starting with the
Tutorial and proceeding to the Reference mentioned in the Help
menu.

You can find two white papers about MFP (one accepted to the 2013
edition of the Linux Audio Conference, and one submitted for the
2025 edition), some sample patches, and a few other bits of
documentation in the doc directory of the GitHub repo. The
README files at the top level of the source tree contain
dependency, build, and getting-started information.

Where's it going?
----------------------------------------

I've been working on MFP as a spare time project for almost 14
years now. The likelihood that it will ever have more than a few
users is low. Luckily, that doesn't bother me much; MFP is a
tool I am building mainly for my own use and education.

That being said, if there's something about it that appeals to
you, I welcome your interest and participation.

Thanks,
Bill Gribble <grib@billgribble.com>



2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# build with 'python ./setup.py install'
from setuptools import setup

VERSION = "0.8.4"
VERSION = "0.8.5"

setup (name = 'mfp',
version = VERSION,
Expand Down
2 changes: 1 addition & 1 deletion wscript
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ from waflib.Build import InstallContext, CleanContext, CFG_FILES
import waflib

APPNAME = "mfp"
VERSION = "0.8.4"
VERSION = "0.8.5"
WAFTOOLS = "compiler_c gcc python glib2"

top = '.'
Expand Down