Currently, my favorite tool for music creation is 'PureData' which is basically a powerful, graphical, musical programming language. It takes the form of 'objects' that are drawn on the screen and then connected by lines and made to interact with each other. It can do lots of stuff that regular programming and scripting languages can do.

Anyway, I like to use it for creating sequences that are generated from random numbers in various ways, and right now what i'm messing with the most is Les Hall's Boolean Sequencer, of which much information can be found on this site.

I prefer things like this to evolve over time rather than stay static (its more interesting to me that way..) So the set up that i use the most now changes one of the values in the array on every time the sequence is run through. Doing this changes the pattern, but lets it keep alot of similarity to the previous pattern, giving a nice morphing effect.

Thanks for suggesting PureData and the Boolean Sequencer. I will check them out.

I like to use algorithmic sequencers for music generation. I have a lot of fun building the algorithms that generate interesting music (at least, interesting to me ).

In the past, I have used several software programs for MIDI output, such as Sound Globs and Jammer. Sound Globs was great for generating random notes/events with plenty of control over the probability of which notes were generated and the timing of events. It was not as useful for evolving music over time (which I also prefer), so what I would do is use it to generate interesting MIDI data pieces that I would then load into a MIDI sequencer program for editing and arrangement. Jammer is just fantastic for MIDI generation of many musical styles right out of the box, but it also allows you to have a great deal of control over the algorithmic output. I spent many happy hours with these programs and the MIDI sequencer!

In recent years, I have been mainly using my Nord Modular Rack (G1) and Nord Modular G2 synthesizers for algorithmic music generation. They have many modules that are useful for this. One very handy G2 module is the control sequencer. It is basically a 1 of up to 16 value lookup table. I like to use it to generate a few different control values (for oscillator pitch, filter frequency cutoff modulation, MIDI notes, etc.) with different probabilities of occurrence. For example, I would connect a clocked random value module to the input of the control sequencer module and set the range so that there is an equal chance that any one of the 16 steps will be selected with each new random value input. And then, I could have a 9/16th chance of one value occurring randomly by setting 9 steps of the sequencer to that value, a second value could have a 5/16th chance by setting another 5 steps, and a third value could have a 1 in 8 chance (2/16) by setting the two remaining steps.

Of course, the random value generator does not have to have an equal distribution. Most of the time I like to bend and skew the distribution. The G1 and G2 have several shaper modules that can be patched together to give you a nice bell curve distribution, inverse bell curve, half of a bell curve or any portion of a bell curve for that matter. Other modules can be used to warp the distribution even more. I particularly like to use shaped distribution for randomly picking certain notes or other control values within a range.

Another algorithmic technique I like to use is to repeat a phrase for a few bars, then generate a new random phrase that repeats for few bars, and so on. This, in my opinion, sounds much more musical and interesting than just a long stream of random notes or other control values.

For changing the music over time, I like to use delay timers or binary counters to generate event triggers at certain times or measures within a track that can then be used to generate new control values for changing and morphing the sound engine.

Something I would like to explore in much more depth is using fractals and chaotic systems for control value and event generation._________________varice

I like to use randomizers that are conditioned to create some kind of repetition. Here's one technique I've tried a couple of times for making random step sequences:

I start out with a blank sequence. I generate a part by selecting which step/slot it starts in, how many times it will repeat and how large a space between each repetition. Then I fill in some steps in the sequence according to these premises. As I fill in the steps (looping from the first position), I may set properties for each step. For instance, if the sequence will play a snare sample, I may choose to increase the rate/pitch for the played back sample so that the first snare is at a normal pitch, the next one is slightly higher, the next one even higher and so on. I'll enable this for as many parameters I can think of (sample start point, loop length for granular stuff, ramp times for the envelope, the cutoff for a filter on on the sample etc etc.)

If the sequence plays midi notes I can set one or more CCs to increase, decrease, take on random values or whatever algorithm I choose.

You can have more than one part generated this way into the same sequence. You can either make it monophonic (each new part will overwrite the previous in the places where they occupy the same step) or polyphonic.

The attached image shows three individual sequences (snare drum, kick drum and hihat) and a monophonic sequence where the three individuals have been inserted one after the other. Duration/sustain for the samples and volume is modulated.

You can have the length of the loop being set to random values, aligned with tempo signature or not. You can make several loops and play them in some random sequence, aligned with some predetermined patterns (e.g. A-B-A-B-C-C-A-D or whatever) or not.

In the command line sequencer I made a lot of these generation parameters accessible via the keyboard, so you could potentially learn to generate these sequences on the fly. For that one I made the sequence 64 steps played at the same speed that you would normally have a 8 step sequencer, enabling some granular effects.

I'm currently working on a sequencer that makes a lot of random sequences like this based on a big array of floats, like a genotype. The user can play with the sequences for a while before choosing to make a new generation, where the sequences he has played the most will "mate" with each other (a new genotype being created by randomly selecting each gene from either parent A or parent B), like a kind of genetic algorithm.

Your drum example is similar to one that i made recently. I set it up so that the kick and the snare always hit right on beat, and then there was a (random, with variable probability) of a hit on other beats too.

So, for instance: The kick is always on beat 1 and 3, the snare on 2 and 4. There is a 50/50 chance that the snare will also be on beat 4.5, a lesser chance that the kick will hit on 3.5 and a few others. I also set it up so that there was a chance that the kick or snare would hit randomly on any beat. This chance was initially set quite low (like 1/30) but was variable over time.. so as I adjust that value the sequence gets more and more chaotic (or less chaotic.. i suppose, but why would you want that? )

Hihats always played 8th notes, but there was a 50/50 chance that they would also hit 16th notes.

Tile selection gives a stochastic aspect, upon which game players impose structure, and the words-to-MIDI mapper adds improvisational ability. Also, it's an ensemble instrument. It's being a productive area to explore _________________When the stream is deep
my wild little dog frolics,
when shallow, she drinks.

most classical algorithmic composition techniques seem to be probability based, which seems to give rise to chaotic results, which can itself be interesting but is not necessarily what you expected or does not fit the kind of aesthetic you're after...?

when I started working on improvisor (see http://bit.ly/n1N1OZ) I thought about using probability based techniques myself but in the end dropped the idea because I wanted to be able to draw timing and pitch patterns and then combine these in various ways, which in the end created semi-algorithmic composition results, rather than the typical chaotic results._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

mrcold, I'm glad to read that you're experimenting with the Boolean Sequencer and I caught that little jab about there being much info on this site about it, haha! I guess I have spammed it up over the years, if only because I find it interesting and me likes to create new thingies.

I feel that the most interesting property of a Boolean Sequencer is the way that patterns repeat and also evolve, and that these patterns seem to exist on many levels kind of like fractals. In fact I would not be surprised if the Boolean Sequencer was a specific example of a fractal algorithm, that is if i knew much about fractals which I don't.

Recently I have expanded the ways that I can use the Boolean sequencer in a few directions. The most interesting is the use of linear CMOS in the logic section, clocking at audio rates, and using lots of bits (like 30 or 40 or so) to create drones and such. I have a lot of experimenting to do on this frontier, in fact you have inspired me with this thread to do just that.

Hmm, I'm in a ChucK sort of mood. I shall post some results soon I hope.

Hmm, I'm in a ChucK sort of mood. I shall post some results soon I hope.

interesting - I can't wait to see the results and code. I haven't played with chuck myself yet, i've just played with supercollider a bit because I come from a code background and max/msp is still a bit time consuming sometimes because I am still not familiar with all the objects and their particular behaviours ..._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

The ChucK program did not turn out that well, I think my model of linear CMOS in ChucK is not correct. When I built a linear CMOS Boolean Sequencer in hardware it made a drone sound akin to a tire running down the road, but this simulation turned out a mix of bleepy and clicky, which was entirely different.

My attention then turned back to the BSKS box that I'm developing now and I've come up with some good circuit simplifications based on the use of linear CMOS in place of opamps. Then I got the idea of using an RCRCRC... filter chain as the delay and filter of the circuit in place of the bucket brigade device and filter.

Well, long story short I will be working on that and some other stuff in the near future but nothing to share with you yet.

The ChucK program did not turn out that well, I think my model of linear CMOS in ChucK is not correct. When I built a linear CMOS Boolean Sequencer in hardware it made a drone sound akin to a tire running down the road, but this simulation turned out a mix of bleepy and clicky, which was entirely different.

My attention then turned back to the BSKS box that I'm developing now and I've come up with some good circuit simplifications based on the use of linear CMOS in place of opamps. Then I got the idea of using an RCRCRC... filter chain as the delay and filter of the circuit in place of the bucket brigade device and filter.

Well, long story short I will be working on that and some other stuff in the near future but nothing to share with you yet.

Les

hmm.. perhaps your implementation in chuck was not anti aliased and that might be where the clicky bleepy stuff comes from ?_________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

Well, I think the main problem was that I used a gain of one on the gate and a multiplier as the model, so I never got analog levels, just values of 0 and 1, so the faster ones at audio rates came out beepy and the slower one clicky. I'll try adjusting the gain down and see what happens, and maybe applying more levels of logic. I should also use a sigmoidal model for the gate...

Well, I think the main problem was that I used a gain of one on the gate and a multiplier as the model, so I never got analog levels, just values of 0 and 1, so the faster ones at audio rates came out beepy and the slower one clicky. I'll try adjusting the gain down and see what happens, and maybe applying more levels of logic. I should also use a sigmoidal model for the gate...

Les

yeah I think it's a good idea to go that route.. just 0 and 1 might be too limiting.

what you're doing reminds me of the chaos bank by sherman, the creators of the filterbank._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

Bert, I finally got some promising results. There's a lot to explain so I'll summarize with an overview. It's a 16 bit counter clocked at 440 Hz and a "block" of randomly connected linear CMOS NAND gate models hooked up for the logic. The outputs of the logic block are summed to produce the audio.

Due to the random connections, there are many "songs" created, so I put a beep at the beginning and just sat there pressing the restart button depending on how interesting each one was. So you'll hear beep, one circuit, beep, another circuit, etc.

Bert, I finally got some promising results. There's a lot to explain so I'll summarize with an overview. It's a 16 bit counter clocked at 440 Hz and a "block" of randomly connected linear CMOS NAND gate models hooked up for the logic. The outputs of the logic block are summed to produce the audio.

Due to the random connections, there are many "songs" created, so I put a beep at the beginning and just sat there pressing the restart button depending on how interesting each one was. So you'll hear beep, one circuit, beep, another circuit, etc.

Les

that's quite interesting - does chuck have OSC support? maybe I can use topology data from the cubes to change the connections between the generators ... that would let you play around with the various possibilities simply by moving and turning cubes._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

nice! there is a bit of high frequency sound at various points in the recording - is this some alias side effect possibly?_________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

nice! there is a bit of high frequency sound at various points in the recording - is this some alias side effect possibly?

if you mean the occasional beep, that is a sine wave to mark the beginning of each configuration. Or probably you mean embedded in the audio itself. Well, each linear CMOS gate has a low pass filter on it's output of 1000 Hz cutoff so I guess some of the switching noise will get through those.

Yes, ChucK has OSC and I have coded ChucK to receive OSC signals in the past, though I am new to coding OSC. If we could make it so that arranging the cubes sent OSC over the web to my computer (or to yours locally), that would be awesome! The cubes are a perfect interface for hooking up the logic of a Boolean Sequencer. How shall we proceed?

nice! there is a bit of high frequency sound at various points in the recording - is this some alias side effect possibly?

if you mean the occasional beep, that is a sine wave to mark the beginning of each configuration. Or probably you mean embedded in the audio itself. Well, each linear CMOS gate has a low pass filter on it's output of 1000 Hz cutoff so I guess some of the switching noise will get through those.

Yes, ChucK has OSC and I have coded ChucK to receive OSC signals in the past, though I am new to coding OSC. If we could make it so that arranging the cubes sent OSC over the web to my computer (or to yours locally), that would be awesome! The cubes are a perfect interface for hooking up the logic of a Boolean Sequencer. How shall we proceed?

Les

hmm.. I haven't tried sending OSC over the web...

what you'd have to do is create some code to map the topology messages to enable/disable connection events in your chuck code.

When specifying --debug option as last argument, OSC Bridge will print topology change information and more on screen.

by the way, if you are considering getting some audiocubes - there is a waiting list at the moment that you might want to join. You can enter your email address here http://bit.ly/qh5PhK_________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

Ahhh, I can see how to do it a little bit, but without knowing more about the cubes... um, let's just postpone this concept for another day. I cannot afford anything so no cubes for me. But perhaps in the future when I get energetic again I'll go ahead and code something up for this.

Ahhh, I can see how to do it a little bit, but without knowing more about the cubes... um, let's just postpone this concept for another day. I cannot afford anything so no cubes for me. But perhaps in the future when I get energetic again I'll go ahead and code something up for this.

i 'll check out your code and chuck in more detail this weekend and get back with some info on mapping and how to set this up._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

Ahhh, I can see how to do it a little bit, but without knowing more about the cubes... um, let's just postpone this concept for another day. I cannot afford anything so no cubes for me. But perhaps in the future when I get energetic again I'll go ahead and code something up for this.

i 'll check out your code and chuck in more detail this weekend and get back with some info on mapping and how to set this up.

OK it's a deal. I'd be happy to put in the effort at the right time. We could, for example encode the cube's orientation to the logic gate's input connection.

Ahhh, I can see how to do it a little bit, but without knowing more about the cubes... um, let's just postpone this concept for another day. I cannot afford anything so no cubes for me. But perhaps in the future when I get energetic again I'll go ahead and code something up for this.

i 'll check out your code and chuck in more detail this weekend and get back with some info on mapping and how to set this up.

OK it's a deal. I'd be happy to put in the effort at the right time. We could, for example encode the cube's orientation to the logic gate's input connection.

Les

the way it works in our latest app improvisor, is that when you put cubes next to each other a connection is made between "modules" and the orientation changes something in the modules itself, like pattern played, etc.

perhaps it's possible to make "modules" out of a few cmos circuits in your code and then switch through those by turning cubes, and when you add or remove cubes you add or remove connections. something like that ..._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

Ahhh, I can see how to do it a little bit, but without knowing more about the cubes... um, let's just postpone this concept for another day. I cannot afford anything so no cubes for me. But perhaps in the future when I get energetic again I'll go ahead and code something up for this.

i 'll check out your code and chuck in more detail this weekend and get back with some info on mapping and how to set this up.

OK it's a deal. I'd be happy to put in the effort at the right time. We could, for example encode the cube's orientation to the logic gate's input connection.

the list of ints describing the configuration of the cube network (cube,face => cube,face, etc) could be decoded by chuck but i'm not sure how to deal with a list that might change in length, and is not necessarily a fixed length.

i've checked your code and it seems like you'd have to select the most promising circuits from your collection of random generated ones, and use these as building blocks which you would link to the cubes.

the connections between those circuits would then be made using the cubes, which would give you a great hands on way to explore the possible sounds and drones created by linking these various sub - circuits...

i'd love to do a blog post on this at www.percussa.com if you like feel free to send me an email at cubes (at) percussa (dot) com to discuss._________________AudioCubes - smart blocks and software for composition, sound design and live performance. Learn more at http://www.percussa.com

You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forumYou cannot vote in polls in this forumYou cannot attach files in this forumYou can download files in this forum

Please support our site. If you click through and buy from our affiliate partners, we earn a small commission.