Olm-pd is the Puredata (Pd) component of the Olm project.
This repo is a collection of puredata patches than when compiled through Plugdata or pd2dsy can be flashed to the Electro-Smith Daisy Seed for embedding in a standalone, battery-powered synthesizer/interactive-object. These patches are the basis for sound generation for the Olm project.
If you don't have a Daisy Seed, the Pd patches can be enjoyed on any desktop computer as well with either Pd or Plugdata. With Plugdata you can host it in any compatible DAW.
The Olm is both an interactive sculpture and a tool for randomly generating ambient soundscapes and music. It is a digital, aleatoric synthesizer housed in a hand-crafted enclosure of plywood, plaster and aluminum.
To hear how olm-pd sounds (and see the physical version), you can watch this video.
Simply open the /olm.main-desktop.pd
file in either Plugdata or Puredata vanilla. The .pd
files were created with a nightly build of Plugdata v0.8.1, but hopefully they will work with any future version. If you are using vanilla Pd, then you must ensure you have the heavylib library of abstractions.
In order to make use of the interactive controls, you must either somehow get your hands on the Olm PCB, or you can make your own interface. If you decide to make your own, it will either need to conform to the /olm_components.json
file, or you will have to create your own configuration. Info on how to create the configuration file can be found in the pd2dsy project.
To flash the patch to Daisy Seed, you will need to use either Plugdata or pd2dsy. I mostly relied on Plugdata. It can load the patch straight to the Daisy Seed, or if you like, it can compile your Pd patch into C/C++, which you can then load onto the Daisy Seed using LibDaisy. For more info on using these tools, please consult their respective project pages and documentation. The Daisy and Plugdata Discord channels are also great for getting help. The patch to flash/compile is /olm.main-seed.pd
. In Plugdata v0.8.1, you must direct it to compile an SRAM program, and use the /sram_linker_sdram.lds
linker file. This was the workflow with the nightly build that I was using, so it's possible that some things have changed in a more recent version. Consult the documentation and/or the discord.
In order to get the best performance out of my patch, I opted to compile to C/C++ so that I could get some small performance gains with a few tricks:
-
Adjusting the block size to 256, from the Plugdata default, which is 48. This is like setting the sample buffer on a sound card. The trade-off is latency vs. CPU usage. Higher block size = less CPU, but more latency. This adjustment is made in the
/export/daisy/source/HeavyDaisy_olm_main_.cpp
file. The file might be named something different, likeHeavyDaisy_[YourProject].cpp
if you compile it yourself from Plugdata. Add the linehardware.SetAudioBlockSize(256)
to themain()
function, like this:int main(void) { hardware.Init(true); // Make sure it goes right under this line hardware.SetAudioBlockSize(256); // ...
-
Using the optimizer in the makefile. I wasn't able to truly test this, but it didn't seem to hurt.
Add the line:OPT = -O3
-
Set the message pool to 6. This alleviated some issues I was having with the
[makenote ]
node in my sequencer, causing the seed to crash.
Do this in the/export/daisy/source/HvMessagePool.h
file, by adjusting line 25 like this:#define MP_NUM_MESSAGE_LISTS 6
I have provided the C/C++ files compiled from Plugdata in the /export/daisy
directory.
On the physical version of the Olm, you have three non-continuous dials and two momentary buttons at your disposal. Rather than predictably affecting specific sonic parameters, the dials only push the randomization further, negating the ability to shape the sound to your will. When you come across something you find interesting/inspiring/terrifying you may use the buttons for storing and recalling the state of the synthesizer parameters.
To try it in the pd patch, you can open the /olm.main-desktop.pd
file, and you will have the controls available to you.
Project is: in progress
The project is nearly complete. The final things to polish are:
Room for improvement:
- Refine the randomization so that there are never any fully quiet moments.
- Fine tune the randomization constraints controlled by the "chaos" knob.
This project owes its success to the dedication of Daisy, Plugdata, and Puredata developers and the invaluable support of their communities. Special acknowledgments go to:
- Wasted Audio for the generous help.
- Mike Moreno for the tools and advice.
- Takumi Ogata for the helpful videos and advice.
- Daisy Seed Discord
- Plugdata Discord
The following materials were used to aid in the creation and design:
- Mike Moreno DSP - Basic waverforms in pd vanilla
- Mike Moreno DSP - pd-mkmr
- Mike Moreno DSP - LIRA-8
- Physical Audio Signal Processing for Virtual Musical Instruments and Audio Effects - Julius O. Smith III
- The Theory and Technique of Electronic Music - Miller Puckette (2006)
- DIY Swarmatron (Pure Data & Arduino Tutorial) - Sound Simulator
- Real-time Music and Sound with Pure Data - QCGInteractiveMusic
Created by Eric Max Kaplin
This project is open source and unless otherwise specified in specific files, available under the GPL-3 License.