MFP -- Music For Programmers
Release 0.03, "Mostly For Presentation"
I'm pleased to announce a new version of MFP, containing many
fixes and improvements. It is still not anywhere near a "production"
level, but is becoming more and more usable. Your interest and
participation are invited!
A summary of changes is below. Please see the GitHub issue tracker
for complete details:
http://github.com/bgribble/mfp
I'm also happy to say that I will be presenting a paper about MFP at
the 2013 Linux Audio Conference (May 9-12). I believe the presentation
will be live streamed. See http://lac.iem.at for details. There are
many interesting talks on the schedule. My talk will be on Friday, May
10 at 16:50 CEST (UTC+2).
Changes since release v0.02:
----------------------------------------
* #49: Remove last lock calls from JACK process() path
* #51: Multiple [r]/[r~] receivers can share a name (multicast/bus)
* #52: Multiple selection in UI (rubberband box/Shift+click)
* #55: Cut/copy/paste using JSON to X Clipboard
* #57: Initial support for NSM session management
* #58: Implement MIDI control learning for all Processors
* #65: Save/restore MIDI and OSC controller routings
* Many other bugfixes and improvements
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 constructing audio synthesis,
processing, and analysis networks.
MFP is a completely new code base, written in Python and C, with a
Clutter UI. 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
* MFP provides fairly raw access to Python constructs if desired.
For example, the built-in Python console 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
* 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 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.
The code is still in early days, but has reached a point in its
lifecycle where at least some interesting workflows are operational
and it can be used for a good number of things. I think MFP is now
ripe for those with an experimental streak and/or development skills
to grab it, use it, and contribute to its design and development.
The code and issue tracker are hosted on GitHub:
https://github.com/bgribble/mfp
You can find the LAC-2013 paper and accompanying screenshots, some
sample patches, and a few other bits of documentation in the doc
directory of the GitHub repo. The README at the top level of the
source tree contains dependency, build, and getting-started
information.
Thanks,
Bill Gribble
Hi,
I'm trying to use jack's ringbuffer like this:
- initialization:
jack_ringbuffer_t * ringBuf = jack_ringbuffer_create(sizeof(jack_default_audio_sample_t) * (1<<16));
memset (ringBuf->buf, 0, ringBuf->size) ;
- jack process callback:
jack_default_audio_sample_t buf[numChannels];
size_t read_cnt = 0;
for (_frameCounter=0; _frameCounter < nFrames; _frameCounter++) {
read_cnt = jack_ringbuffer_read(ringBuf, (void*)buf, sample_size * numChannels);
^^^^^^^^^ error
}
but g++ won't compile the code and report this
error: invalid conversion from 'void*' to 'char*' [-fpermissive]
/usr/local/include/jack/ringbuffer.h:136: error: initializing argument 2 of 'size_t
jack_ringbuffer_read(jack_ringbuffer_t*, char*, size_t)' [-fpermissive]
passing -fpermissive gets the program running but is it the right way to do it?
Thanks
--
Raphaël.
Hi Jeremy
Well, I'm sorry, I have just removed the 0.26.0 release and pushed out
0.26.1
Because of a error in the LV2/wscript (which I have introduced direct
before I made the releaseO:-) )
0.26.0 fail to build.
please try again for 0.26.1
greets
hermann
Am 09.04.2013 15:51, schrieb Jeremy Jongepier:
> On 04/09/2013 11:32 AM, hermann meyer wrote:
>> I'm proud to announce the release of guitarix2-0.26.0
>>
>
> Hello Hermann,
>
> The archive seems to be corrupted:
>
> guitarix-0.26.0/src/LV2/DSP/12AT7.cc
>
> bzip2: Compressed file ends unexpectedly;
> perhaps it is corrupted? *Possible* reason follows.
> bzip2: Inappropriate ioctl for device
> Input file = (stdin), output file = (stdout)
>
> It is possible that the compressed file(s) have become corrupted.
> You can use the -tvv option to test integrity of such files.
>
> You can use the `bzip2recover' program to attempt to recover
> data from undamaged sections of corrupted files.
>
> tar: Unexpected EOF in archive
> tar: Unexpected EOF in archive
> tar: Error is not recoverable: exiting now
>
> Regards,
>
> Jeremy
>
> _______________________________________________
> Linux-audio-user mailing list
> Linux-audio-user(a)lists.linuxaudio.org
> http://lists.linuxaudio.org/listinfo/linux-audio-user
hi dominic!
first of all, thanks for sharing your tools - klick has saved the day by
adding a much-needed jack-transport aware metronome to a sooperlooper setup.
now i'm a lazy bastard and want to use gtklick, but even though it
compiles and installs fine, it barfs when i start is, like so:
nettings@kleineronkel:/usr/lib/python2.7/site-packages/gtklick> gtklick
Traceback (most recent call last):
File "/usr/bin/gtklick", line 14, in <module>
from gtklick.gtklick import GTKlick
File "/usr/lib/python2.7/site-packages/gtklick/gtklick.py", line 30,
in <module>
import klick_backend
File "/usr/lib/python2.7/site-packages/gtklick/klick_backend.py",
line 12, in <module>
import liblo
ImportError: /usr/lib64/python2.7/site-packages/liblo.so: undefined
symbol: lo_address_new_with_proto
i have tried both liblo-0.26 and current liblo svn, no luck.
now the python paths in this openSUSE tumbleweed install are a horrible
mess, with three different python versions and libs in /usr/lib,
/usr/lib64, and /usr/local/lib64. but they all seem to be found, and i
made sure that the liblo.so mentioned in the error message is actually
the one from your pyliblo package (by copying it manually). i removed
the build directory of pyliblo for each try, and also recreated liblo.c
via cython.
how do i proceed to fix this?
best,
jörn
--
Jörn Nettingsmeier
Lortzingstr. 11, 45128 Essen, Tel. +49 177 7937487
Meister für Veranstaltungstechnik (Bühne/Studio)
Tonmeister (VDT)
http://stackingdwarves.net
Is there any way to completely switch off the vertical measure/beat
lines in Ardour3's edit window ? Changing the colors to hide them
won't do because they are on more than one background.
If not, I'd suggest to not draw them when the corresponding
bars on top are disabled.
Ciao,
--
FA
A world of exhaustive, reliable metadata would be an utopia.
It's also a pipe-dream, founded on self-delusion, nerd hubris
and hysterically inflated market opportunities. (Cory Doctorow)
Dear Developers,
I've written a convenience interface to implement Non Session Management as fast and easy as possible in Python 3 applications. It is no magic programming at all, but it makes things just that tiny bit easier that is required to actually implement something, and not only plan it.
The real work is to follow the rules of a managed system (see http://non.tuxfamily.org/nsm/API.html ). So implementing the technical side should be a no-brainer to let you focus on the actual task.
pynsmclient is open source under the GPL3 or later and can be found on my github page so you can start using it right away.
https://github.com/nilsgey/pynsmclient
I also have written a short article in my blog about that topic http://nilsgey.de/?id=24
Greetings,
Nils
Hi,
after a somewhat productive weekend I'm happy to announce some alpha
quality software (i.e. bug ridden, not feature complete) for your
consideration and feedback :)
But: release early, release often XD
I went a little overboard with modularization and separation of
concerns, so in the end it became four packages (with possibly one more
in the future - a LV2 plugin to load the synths/instruments).
Documentation is also very much lacking, but each package contains at
lease a single example file to illustrate the usage.
* ladspa.m - https://github.com/fps/ladspa.m
ladspa.m is a header only c++ library to build and run general synthesis
graphs made up out of LADSPA plugins. The interface is kept deliberately
kept simple and unsafe, as it is expected that one uses higher level
tools to build these synthesis graphs (e.g. using a library on top op
ladspa.m.swig or ladspa.m.proto).
* ladspa.m.swig - https://github.com/fps/ladspa.m.swig
ladspa.m.swig are SWIG generated python bindings for ladspa.m. This
allows building and running general synthesis graphs made up of LADSPA
plugins from within python. This requires ladspa.m. NOTE: I just saw
that the swig interface definition lacks the ability to connect outside
buffers onto plugin ports. This will be fixed in the next few days..
* ladspa.m.proto - https://github.com/fps/ladspa.m.proto
ladspa.m.proto contains google protobuf definitions for general
synthesis graphs made up of LADSPA plugins. It also contains a
definition for an instrument file format. This library does not depend
on either of the two above. It becomes useful with the last package
(ladspa.m.jack) and possibly in the future with an LV2 plugin to load
and run these (to be announced when done). The python bindings generated
for ladspa.m.proto can be used to generate synth and instrument files
that can be loaded by ladspa.m.jack. The instrument file definition
allows for polyphony while at the same time putting no constraints on
the inner structure of the instrument (each voice is made up out of
plugins, they can be identical or not between all voices)..
An example is included which defines a simple sawtooth instrument with
exponential envelopes and with 5 identical voices except for a different
delay setting on each voice.
https://github.com/fps/ladspa.m.proto/blob/master/example_instrument.py
Pipe its output into a file called e.g. instrument.pb. This you can then
load into ladspa.m.jack.instrument.
Here's a little example of the generated instrument file loaded into
ladspa.m.jack.instrument and playing a little 120bpm loop (from ardour3)
with it:
https://soundcloud.com/fps-2/t-m
This also highlights the need for a higher level interface on top of it
to ease the process..
* ladspa.m.jack - https://github.com/fps/ladspa.m.jack
ladspa.m.jack is a library which allows loading ladspa.m.proto synth and
instrument definition files into jack hosts that are provided as example
clients.
ladspa.m.jack.synth allows loading a synth definition file and run it in
the jack graph.
ladspa.m.jack.instrument allows loading an instrument definition file
and provides a midi in port which allows playing the synth.
But like I said this is all ALPHA software and I just announce it
because someone else might have fun with it. Please report all issues
that you find either per email to me, on LAD or LAU or on the issue
trackers of the github projects..
Have fun,
Flo
--
Florian Paul Schmidt
http://fps.io