Building a modular synth
I have been working a lot with PD lately and have built some synths that I think make some pretty interesting sounds. I have also built some sequencers that produce complex patterns.
I have lately been researching modular analogue sequencers, the big rack type things. This has been giving me ideas about building a complete modular system with PD.
I have been thinking I could use my synths and sequencers together much more easily if they were modular. Also if a modular standard was developed, like standard CV ranges in analogue gear, we could trade module patches back and forth and build huge systems.
I have a few things I have been trying to figure out.
-
since this system is modular would I be better off with something with vst au rtas ladspa etc. support? like a daw with reaktor? I would be able to patch back and forth between the effects and sound generators.
-
does anyone know a good way to run the output from a program like reason or a daw into PD on OSX? I can't figure out how to do it with jack. I have been running out to my sound card and then back into it with a patch cable(completely ridiculous)
-
it appears there will always be some type of delay/lag/buffer/latency with PD, maybe with all software synths? In my masterplan giant modular system with a computer and some external analogue effects / sound generators I could patch out of the computer and then back into it. Will the latency kill me doing this? will a crazy quad core tons of ram computer deal with super low latency?
I know that is a bunch of questions in one post, but if anyone has any ideas let me know.
Thanks
Touch Screen Sequencer, PureData and Python
Hi all,
I feel that this is now at the point where i can start showing it to people and possibly getting some feedback. This is based off a Midi sequencer i wrote for the NDS but is now aimed at my touchscreen tablet which has a much bigger area to play with.
everything can be downloaded from my github repository
http://github.com/notesandvolts/Touch-Sequencer
The sequencer has two parts :-
Pure Data sequencer does all of the data stuff, midi sequencing, value storing.
The Python GUI just makes everything easier to use and a bit prettier than stock PD. It uses pygame for all the graphical stuff so you will need this to be installed as well.
The two communicate over OSC and my eventual plan is to have the tablet communicate with a rackmounted server over a wireless netwwork.
Features
2 channel types, Grid and Curve. Grid features 8 grid based patterns either 8 * 16 or 16 * 32 sized grids. The patterns themselves are sequencable and there is a follow mode that shows the patterns being played on a channel so you can more easily edit it on the fly.
The curve channel features 8 wavetable LFOs with user drawable waveforms, variable lengths and independant midi channel capabilities. They currently only do standard Midi CCs and no pitch bend but thats something I want to change soon.
The sequencer sends out Midi clock start/stop/clock information so it can be used as a master clock for a bunch of gear. It currently doesn't sync to a midi clock but again i'd like to do that eventually.
I've tested the whole thing a bit and it works however i'm sure there are going to be more issues. Any feedback is welcome, even if its people just giving advice on how to do something better. The user interface is currently ugly but then i'm an engineer not a graphical designer
I hope people find this useful or informative or hopefully both.
Thanks for taking a look
Guy
Handy little oxygen8 midi middleman patch
hi guys! so i've had an oxygen8 for a few years now and i see them everywhere, so i'm sharing this handy little patch i made.
basically you're stuck with 8 knobs, and two sliders (modwheel and data entry). all this patch really does is takes the keyboard's input, numbers those 8 knobs and 2 sliders in sets of 10, and lets you switch between those sets with the hradio for up to 120 different controller values. the key input is passed straight through so even when you switch between various controls you can play the keyboard consistently.
even if you don't have an oxygen8, this patch will give you a little selfcontained set of sliders that you can use as a midi controller... so it's still useful for when you're not at home with your keyboard, or if you don't even have one.
basically all this patch does is take those 10 controls and lets you switch between 12 sets of them. it's useful for me in ableton so when i need to map more parameters than i have knobs for, i can assign more, and the numbering system is much easier to stay on top of than the default control values for those knobs (it's like 17, 80, 74, no consistency it seems).
on linux you should be able to jack the keyboard to pd's midi in, then jack the output to wherever you want. i'm currently on windows and i select usb keyboard in for input, and loopbe for output.
the numbers do nothing but change when you switch the hradio - the sliders are the corresponding controls (with the mod wheel as slider 9 and the data entry knob as slider 10).
come to think of it i don't think i tested the pitch bend wheel, i've been using this patch almost entirely for parameter controlling and not playing the oxygen8 notes at all. [notein] is patched directly into [noteout]
any questions/comments/ideas please, post them. this is a real quick patch i put together that worked almost better than i wanted it to but it can be very expanded upon. i was going to add symbols so you could tag/name all 120 controls but i was having trouble figuring out a way to store them and recall them, and send/receive to the symbols... so i just scrapped that.
basically all i do is make a tiny pd window and make [SCET], and just have that sitting at the bottom of the screen under my DAW (in this case ableton).
i haven't run into any conflicts yet for the most part but it's possible the controller numbering system might conflict with certain apps/synths/etc.
cheers guys!
Dealing with data structures
Hi all,
I'm currently having a bit of trouble wrapping my head around the data structure stuff in PD.
I'm currently building a drum sequencer with multiple patterns and a pattern sequencer. It's currently using an 8 by 16 grid of toggles and some radio buttons but my plan is to build the "back end" in PD and then use something like pyGame to make a nicer looking interface and communicate via tcp sockets.
Incidently, this is all for running on one of these,
http://alwaysinnovating.com/home/index.htm
It took a bit of persuasion but it seems to run fine.
Anyway, the crux of the problem im having is basically just understanding how i can deal with multiple structs. I have a patch that has a struct and a data window, there are 8 toggle rows which each correspond to a float in the struct and i have a system that can store and recall 8 patterns. The pattern sequencer works and i have everything working so that i can step through sequenced patterns nicely and get the toggle button states coming out. All good so far.
My only real issue is that this is just one track and i'd like multiple tracks, but i dont really get how i could go about making an abstraction that contains a struct and a data window i can write to but without having things interfere with each other. I realise that data windows need to be unique, but what about templates and the structs themselves?
any help on this would be much appreciated, I'll try to post up my patch when i get a chance later this evening
Ctlin values real time store and comparison
HI. I made a little pd for changing in real time some midi data from a controller when you press a special key, like a SHIFT function. My problem is that I need to recall the shifted/unshifted controller position to resume the controller when it reaches again that position, like the "pick up" function in Ableton Live. The idea is to control more than one virtual controller with just one real controller.
I have it all working for just one real midi controller (I mean one knob or one slider sending midi controller values). I used "gate" and "sel" commands. I'm trying now to replicate the functionality with n real controllers.
In other words, now I'm just recalling one controller position value for any controller but not from which controller is that value. I need it to work multithreading, because the operator may wish to move multiple controllers shifted and unshifted, and every shifted/unshifted position must be stored somewhere for the pick up functionality.
Is this too much for PD? I think the algorithm in C and it's not that hard using hashmaps or something similar to store controllerID+controllerValue and check if it has a pick up value active.
Could you give me some directions using PD? Can I store and recall key+value in any way?
thanks,
Federico
CompDR drum generator
This is my try at a no-sample drummachine. It's a rather complex machine, so i'll try to explain it as clear as i can, but still probably very unclear
To just make sound, you should (normally) do this :
- select a preset (bottom left)
- press the run button (top left)
Some more functions:
- there are four instruments (2 bassdrums, 1 snare, 1 hihat/cymbal thing), you can control their levels in the mix section
- each instrument follows one of the tables at the right (not the fifth one)
- to access each instrument's controls click the [pd controls] object. I won't explain each control, just try them. However, each instrument has a pink radio-strip, this selects which table the instrument currently uses. The brown radio skips notes.
- to ad grit, use the woodfire section (beware of your ears, although it will diminish the output level). This is my go at a constant-output-level thing (is this some form of compression?).
- there's a (vst) reverb section for which i normally use the free PSP pianoverb (its controls are mapped in the verb section parameters). The input to the plugin can follow the fifth table, by using the [folw] toggle. This might be a rather confusing section
- there's an FM section which can follow the snare and/or hihat (blue toggles in the mix section). The five sliders in the main section control the fm amount/depth/filter
- the green slider in the main section is the main level
- the organe [hp] slider is the main highpass-level
Something about the tables. Each table has a set of controls:
- Dark red clears the current pattern
- Dark blue randomizes the entire pattern
- Switch the green toggle on the record notes with the spacebar
- Light red button clears all notes except the recorded ones
- Light blue button randomizes all notes except the recorded ones
- The buttons marked < and > shift the pattern left/right
- The radiostrips selects an other pattern
- Patterns can be loaded/saved by the green/red buttons bellow the radio strip
- The very small green toggles enables/disables the auto-load-pattern function
- The randomization depth is controlled by the yellow slider bellow
- The orange slider / grey radio controls the number of steps played
Enjoy it.
Domien
Announce: mmm-0.1.0-eden
hi forum.
we proudly announce the first public release of our compact composer
for pd, mmm.
grab it at http://netpd.org/mmm-0.1.0.zip
mmm is best described in it's faq, see below. don't expect too much
yet, there is still a lot to be done. comments, bugreports, cash, are
welcome.
have fun with it!
christopher charles & enrique erne
faq for mmm-0.1.0 - eden
what is mmm?
mmm is a pd patch collection aimed at providing a studiolike(?),
streamlined, dynamic interface for making synthetic music.
screenshots?
http://www.netpd.org/mmm.png
ymmv depending on your operating system. we put some effort in
detecting the operating system and setting the fontsize according to
it, but quirky xorg or dpi settings might screw things up again.
where can i get it?
we currently host the mmm at http://netpd.org/mmm-0.1.0.zip ,
alternatively, you can grab netpd, enter the chat, and if either of
the authors is online, download it directly through netpd and start
rocking.
what does "mmm" stand for?
mmm was originally just the working title, but we came to like it
somehow. the original meaning is "music making machine" but you can
substitute every m for whatever you want. so "massive multiplayer
music" is okay with us, too.
what is the inspiration?
having worked on/with the bagoftricks (lots inconsistently coloured
gop-patches to be connected freely) and netpd (lots of
inconsistent-looking windows to clutter up the screen), we came to
mock up an clean, dynamic interface in which modules don't bring their
own gop or open their own window, but log onto the interface that's
provided for them by the motherpatch. all modules sharing the same
interface made it easy for them to share the same sequencer and
arranger.
what are the dependencies?
mmm should work with pd-0.39 and zexy installed. iemlib is important
for many synth and effects patches, and there's even set of gem
modules you can chain if you want.
is it actually usable?
no. this 0.1.0 release is rather a tech demo and a taste of things to
potentially come. you can crunch some acid loops out of it already,
but don't sell your protools studio equipment to start working with
mmm on monday.
how does it work?
mmm's interface (mmmmain.pd) is divided into 3 parts: there is the
module/channel view, where you can chain up synths and effects on 8
different channels. select an empty field on a channel, and then use
the scrollbox on the left to select a patch and open it. when clicking
on a patch you loaded up in the module view, the 2nd view comes into
play: from there you control the patch's sliders on the left, right of
it is the stepsequencer for each of the slider (means everything is
sequencable!). yet you won't hear anything until you did the following
2 things: press play in the uppermost row of mmmmain, and set up the
arranger to play the stepsequence. the arranger is not module-based,
but controls all modules of a channel are grouped in the arranger. for
now, you can only select pattern 01 or nothing to play in the
arranger. so set up a loop for the first pattern (loopstart:0,
looplength:1) set the first field on the channel you got your patch on
in the arranger to p01 and start making some noise.
does it work online?
yes. mmm is compatible to netpd and will automatically log on to
netpd's server if you have the netpd chat open. you can also download
the whole mmm package through netpd. feel free to jam around the
world.
what's not working yet / what is planned?
as for now, there is no support for samples whatsoever, it isn't
planned to support them soon. further, there is no hard disk recorder
available yet, but it is planned. the arranger/sequencer combo is very
crippled at the moment, only supporting 1 16-step-pattern to choose
from and 1 page of 16 patterns in the arranger. this will change
rather soon. next there are plans for luxury editing functions,
especially in the sequencer like copy, paste, random pattern,
interpolation and so on. plans exist for full keyboard control, but
this will be worked on not too soon. the module roster is far from
being complete yet, more is to come.
can i save my stuff?
should be possible with the buttons above the channels. don't rely on
the result though, this is still 0.1.0
can i add my own modules?
modules are not to hard to write, but for now, the list of selectable
modules is hardcoded. look at all the 4m-* patches in the patches
folder to see how they are ticking. contact us for adding your patch
to the mmm or try to figure out yourself how it works
what's the license?
mmm is licensed under the gnu lgpl. if you think this is a too useful
product to be free of charge, please consider donating the amount of
money you would've paid for it (or the amount of money you got from
selling your protools equipment on monday) to a trust of your choice.
who are the authors?
mmm is developed by enrique erne (eni, swiss, pd{at}mild.ch) and
christopher charles (syntax_tn, germany, chr.m.charles{at}gmail.com).
we can be contacted via email, irc (#dataflow) or directly in the
netpd chat. several patches within mmm are based upon netpd versions
of them, check netpd for the original authors. mmm shares some of it's
netcode with netpd, by roman haefeli.
disclaimer.
we cannot give you any guarantees on using mmm, not even that you
have fun. it should be relatively harmless, but don't come crying to
us if mmm accidently hijacks your *mule and downloads david hasslehoff
recordings to your computer.
eofaq