diff --git a/README.md b/README.md index 92a359c..babfff0 100644 --- a/README.md +++ b/README.md @@ -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. @@ -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 @@ -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 @@ -170,6 +170,11 @@ 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. @@ -177,6 +182,9 @@ repository. 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 diff --git a/doc/ANNOUNCE-0.8.5.md b/doc/ANNOUNCE-0.8.5.md new file mode 100644 index 0000000..d6dcf22 --- /dev/null +++ b/doc/ANNOUNCE-0.8.5.md @@ -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 + + + diff --git a/setup.py b/setup.py index 2e9fa5b..0f42ba2 100644 --- a/setup.py +++ b/setup.py @@ -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, diff --git a/wscript b/wscript index 3f69a5e..b136f5f 100644 --- a/wscript +++ b/wscript @@ -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 = '.'