MIDI Generating LFOs 2
After some time of procrastination and a brief period of inspiration I finally got around to further developing the project that I started in my previous post on MIDI Generating LFOs. There are two big additions included in the second version of this patch. The first is that I borrowed some aspects of Gregory Taylor's excellent new tutorial on the Cycling 74 website, and the second is that I added TouchOSC support to create cooler ways of controlling the new parameters. Here is a short example of what it sounds like through one of my favorite synths.
Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.
In my previous post, I presented a list of things to work on for the next version. I got around to some, but not all of it, and despite not wanting to put forth poorly done projects on the internet, I just decided to let this one go in its current state. I've taken it about as far I as care to for the moment. The list from my previous post look like this:
The Future
I don’t consider myself anywhere near being done with this project. While writing this post I realized a few things that I could have done better.
- The idea of scaling the LFO’s output (-1 to 1) to match a series of notes is cool, and if those series of notes are an aurally pleasing scale that’s even better, however I think I could improve the way I am doing this. Once I started playing with the LFOs I noticed that scaling the output down to just 8 notes sometimes doesn’t generate all that much variety. On top of that, if we use a full major scale for instance, with certain parameters the LFO might get suck undulating between the 4th and 7th tones in the scale, which might not exactly be the sound you are going for. In the next version I am planning on using less tones over more octaves. Maybe instead of the full scale, just the tones that I think will fit nicely, then have them span over maybe 3 octaves to give the LFOs more range to generate numbers within.
- Using only one LFO to generate velocity values seems to lend itself to fairly predictable values being out put. For instance a single square wave will produce a very high velocity, followed by very low one, then a high one again….etc. The second audio clip is a good example of this. In the case of that sample, I think it created a sort of cool bell-like sound with the synthesizer, but it doesn’t have much versatility. For the next version, I think I’ll also add another one, or two, LFOs that can be summed together for velocity values and see how that effects things.
- As much as I enjoy staring at all of this overly complicated looking mess, I think I’ll also have to spend a bit of time working out some more useful and informative GUI elements in Max 5’s presentation view.
- Lastly, making LFO generated Synth parts that move with a harmonic progression is all fine and dandy, but it doesn’t mean much unless I can link it up with an existing composition, and have a full song to show off. That will be my work for the next week or so, hopefully something totally awesome will come of it
The first problem I had was the note values inside the [coll] objects. I changed the note values in each [coll] object to a pentatonic scale over 5 octaves (the range of my keyboard). I made some adjustments to the scales I am using and when they get triggered to go with another song I am currently working on. To me this provided much better results. If you listen to the audio examples from my first post there are points when the note sequences sound a little off, I think the example above sounds a little more natural, at least in terms of something that is completely computer generated. I also made the observation that using only one LFO to generate the velocity data was a little boring for me, so I did go ahead and add another LFO. Now, on the right side of the patch you can sum together 2 LFOs to generate MIDI velocity data. Realistically, at this point I was starting to feel a little like Spinal Tap bragging about amps that go to 11. Why not just make the original LFO more useful? In fact, that is exactly what some of the other additions from Gregory Taylor's tutorial did, which I'll get to later. The third goal I gave myself was to add some improved GUI aspects to the patch, which I did do to certain extent. What you see in the picture above is essentially the bare minimum you need to use the patch. The left side controls generation of note values, and the right side the velocity data. You can view each individual LFO that you are using and the summed result underneath. The new sliders and the window on the right of each side of the patch are what I took from Gregory Taylor's tutorial. For an in depth explanation of what is going on with these controls I would highly recommend reading the tutorial. What I use them for here is to solve the problem of selecting an appropriate range for my data output and, better yet, performing realtime adjustments. Being able to play with the velocity parameters and "move" around the range that I am working in generates a much more interesting piece. Also, moving up and down, scaling the ranges of notes the LFOs utilize allows me to focus on certain timbers at different times throughout a progression. I'd like to offer a big thanks to Gregory Taylor for solving a whole bunch of problems for me! Finally, being able to "mouse" around with all of these parameters to make sound is cool and geeky, but I thought it would be better to use TouchOSC to control my patch. I thought at first that using sliders would be the thing to do, but after some consideration I realized that two xyPads would be the way to go.
I used the 2 xyPads on the 3rd page of the Mix2 layout. The picture here is rotated to the left 'cause that's the way I like to hold my iPod when using TouchOSC. I programmed my patch so the X value of each Pad controls the rangle of values to be used by the LFO's output data. As you move from left to right on the Pad, the bar on the [rslider] gets wider indicating a larger range of data from inside the [coll] can be used. The Y value of each pad allows you to move the selected range data up and down within the entire range of what is inside the [coll] you are using. As you move up and down, the grey bar on the [rslider] will stay the same size, but will move up and down though the whole range of the [rslider]. The red xyPad is used for controlling note data, and the green one for velocity data. Playing the parameters of my new patch with xyPads was probably the best thing for the patch. Finally an efficient way of manipulating the range and velocity of randomness without having to stare at my laptop and keep one hand on the mouse at all times. After having some fun with the xyPads, as one final addition, I decided to add a slider that would move through the various time values for each note being generated. I got kind of bored hearing straight notes all the time and thought this might be a cool way to add some variety.
I used the red slider on the first page of the same Mix2 layout. Using this slider you can increase the time value of the notes being generated. This also effects the time values for the velocity data being triggered. This might not always be the best thing, but its the way I am doing it at the moment. That's about it for where I am right now. Once again, I am posting this patch on my downloads page. If you have TouchOSC, and want to use it with this patch you will have to adjust the IP address and Incoming Port to whatever you are using before it will work . Please feel free to leave comments or write me and email and tell me what you think.
June 24, 2009
