I’ve made a quick emulation of the Remco Sound FX Machine as an audio unit and standalone application for Macintosh. The original was quite an interesting toy based on a Texas Instruments noise chip used in Space Invaders. I’ve never owned this toy or seen this chip, so the emulation is really just guesswork based on reading the datasheet. The UI was designed by the estimable ghostfacter (ghostfactor?) Eric, and the icon for the .app was drawn by Kate Lindsay. All artwork is public domain, and the source code is open (new code is under a permissive license, JUCE is GPL, pdlib is BSD).
Here’s a video demo:
And, all the source code is on GitHub:
Recently, I’ve been looking a for quick ways to make audio effects and add them to my workflow. I’m a big fan of puredata for prototyping and quick editing, but it’s not too easy to use if you want to process audio coming from an AU or a track on an audio workstation. What I usually do is start up JACK, attach PD’s ins and outs to that, and then run the JACK AU in my sequencer. While this is okay, the problem is you have to perform the somewhat complicated set-up procedure each time you want to start working. It’s also very hard to run multiple pd-based effect or synths at once, as each needs its own output routing.
The answer to all these problems seems to be to try to fit PD more naturally into the audio workstation, probably in the form of a plug-in. There’s been some work on this, namely pd-vst, but that doesn’t seem to be maintained very well these days. A much more active project is Peter Brinkmann’s pdlib. Pdlib allows embedding pd into your own app, and seems to be focused on smartphone platforms like Android and iOS. However, its smart, fast and minimal API seems pretty useful for regular old PC, Mac, and Linux apps, too.
So, recently I’ve been using a combination of JUCE and pdlib as a quick development platform for plug-ins. If you have a puredata patch that you want to make into a plug-in, it should be pretty simple to edit the source code (all you should have to change is PD_characteristics.h, in addition to using the jucer UI editor to edit PluginEditor.h/cpp – no knowledge of c++ required). Right now I don’t support any MIDI, but it should be fine for midi-less effects and synths – I plan to get midi working in the future (if you want to try your hand, the source code is right there!)
The one problem with this system is that puredata uses a lot of global state, so you can’t have more than one copy of puredata in any process. While this is fine for standalone apps, it means that if you directly use pdlib in plug-ins, you can only have one instance loaded at any one time. This kinda sucks, as that was the main problem with my JACK-based set-up. So, I’ve made the plug-in launch a UI-less process to run PD in. There are problems with this approach, too – right now I’m using JUCE’s interprocess communication layer, which doesn’t really seem to be fast enough for this. Things like switching programs and expose will sometimes block execution and cause audio drop-outs. If anyone wants to help out by speeding up the interprocess communication stuff, that would be really cool! The relevant code is in PluginProcessor.cpp and PDSubprocess.cpp . Also, I’ve heard mutterings that there is some plan to remove the global state from PD – if anyone has any info on this, drop me a line!
The only reason the system is mac-only right now is because I don’t have regular access to any sort of linux or windows-based system. It should be as simple as building a project and hitting the compile button! If anyone has some time and a windows or linux machine please e-mail me and we can try to get a version working for your platform.