Sign in to follow this  
EC2151

Otomata: Fun little music-generator thingy

Recommended Posts

I wish you could actually place oscillators onto the grid, instead of having them show up by chance.

Unless there IS a way and I don't know about it... :/

There is, but it requires some fiddling to get them in the correct place:

From the FAQ:

C: I found this bug where the cells move in circles. I broke it lol!

A: Nope it is not a bug. They are called oscillators. Use them to your benefit! Try this (http://www.earslap.com/projectslab/otomata?q=8t8d8x821e16)

Share this post


Link to post
Share on other sites

I've written my own version in c# in a couple of hours.

It's based on the same rules.

Gdu16.png

You can download it from: http://dl.dropbox.com/u/8797691/Procedural%20Midi.zip

Mirror on rapidshare (in case I accidentally delete it from my dropbox): https://rapidshare.com/files/458065368/Procedural_Midi.zip

The source is included for those who have Visual studio installed. The notes per cell are hard coded in the NoteController class. The nr of rows & cols are hard coded in Form1.cs. I did this as a challenge to write a similar thing in 1 hour or less (it took 3.5hours in total :() so there is no comments whatsoever. I did try to make it a bit structured though.

I can probably add more stuff to setup, but now it's near midnight and I have to work tomorrow so maybe later :P

Share this post


Link to post
Share on other sites

I love the differing choice of instruments, man. Awesome, awesome work.

It's the second step towards a really awesome application, I can feel it.

The only thing I can really recommend is the implementation of some sort of save feature, but other than that, it's really pretty cool (I like using the new age pad myself).

EDIT: In your application, are there still oscillators? I think there are, but I'm not sure (by oscillators I mean the white squares that are in a circular motion).

DOUBLE EDIT:

Don't answer that question; I just found out that yes they're still there. Excellent.

Share this post


Link to post
Share on other sites
I've written my own version in c# in a couple of hours.

It's based on the same rules.

Gdu16.png

You can download it from: http://dl.dropbox.com/u/8797691/Procedural%20Midi.zip

Mirror on rapidshare (in case I accidentally delete it from my dropbox): https://rapidshare.com/files/458065368/Procedural_Midi.zip

The source is included for those who have Visual studio installed. The notes per cell are hard coded in the NoteController class. The nr of rows & cols are hard coded in Form1.cs. I did this as a challenge to write a similar thing in 1 hour or less (it took 3.5hours in total :() so there is no comments whatsoever. I did try to make it a bit structured though.

I can probably add more stuff to setup, but now it's near midnight and I have to work tomorrow so maybe later :P

Pretty cool, but I think I still prefer the flash version. GM soundbank without any delay effect makes it really dry, and it's not like I can pipe this into FLStudio or anything.

Share this post


Link to post
Share on other sites
The source is included for those who have Visual studio installed. The notes per cell are hard coded in the NoteController class. The nr of rows & cols are hard coded in Form1.cs. I did this as a challenge to write a similar thing in 1 hour or less (it took 3.5hours in total :() so there is no comments whatsoever. I did try to make it a bit structured though.

I can probably add more stuff to setup, but now it's near midnight and I have to work tomorrow so maybe later :P

Interesting. I'm looking forward to checking out the source code. Well, once the semester ends. >_<

Share this post


Link to post
Share on other sites

What I like about Drake's version is the fact that everything i make sounds like something Steve Reich wrote.

Though the original's reverb is definitely a plus.

Share this post


Link to post
Share on other sites

I'd think it would be fairly straightforward to take drake's version and add output to a MIDI channel, assuming you could find the correct libraries for C#. Then it would just be a matter of using a MIDI yoke/loopback to feed it to a sequencer to record it.

Share this post


Link to post
Share on other sites
I'd think it would be fairly straightforward to take drake's version and add output to a MIDI channel, assuming you could find the correct libraries for C#. Then it would just be a matter of using a MIDI yoke/loopback to feed it to a sequencer to record it.

Does C# have such libraries?

Share this post


Link to post
Share on other sites
Does C# have such libraries?

A Google search turns up several C# MIDI libraries that look capable of providing output, although I haven't looked at any of them in detail.

Share this post


Link to post
Share on other sites
I'd think it would be fairly straightforward to take drake's version and add output to a MIDI channel, assuming you could find the correct libraries for C#. Then it would just be a matter of using a MIDI yoke/loopback to feed it to a sequencer to record it.

I'm using the standard windows MCI API to output midi messages (http://msdn.microsoft.com/en-us/library/ms709461(v=vs.85).aspx). It only accepts midi messages (specified by the midi protocol) itself so if I dump everything into a stream with delta ticks and slap a header on it I have basically a midi file. I've yet to find a midi library in c# that can play individual notes and export them to a midi file though (most only accept entire midi files).

It's been a long while since I've worked with midi files, it was in vb6 and I had to define the entire midi file description myself, so it'll probably take a while to get a correct exported version of it.

I've noticed however that my version is slightly different sometimes, such as in : http://earslap.com/projectslab/otomata/?q=0k4e8z. Normally the left cell should rotate to a downwards direction (or at least that's what he specified), yet in otomata that doesn't happen.

If I can find the time I'll clean up the code a bit and make more stuff configurable rather than using constants.

Edit:

I found some time to change the constants to variables and added support to save/load the board to a text file.

98CxR.png

You can get it here: http://dl.dropbox.com/u/8797691/ProceduralMidi_v2.zip

I hope I didn't screw anything up with the actual notes because I'm at work at the moment and unable to actually hear the notes being played.

Share this post


Link to post
Share on other sites
I'm using the standard windows MCI API to output midi messages (http://msdn.microsoft.com/en-us/library/ms709461(v=vs.85).aspx). It only accepts midi messages (specified by the midi protocol) itself so if I dump everything into a stream with delta ticks and slap a header on it I have basically a midi file. I've yet to find a midi library in c# that can play individual notes and export them to a midi file though (most only accept entire midi files).

It's been a long while since I've worked with midi files, it was in vb6 and I had to define the entire midi file description myself, so it'll probably take a while to get a correct exported version of it.

I've noticed however that my version is slightly different sometimes, such as in : http://earslap.com/projectslab/otomata/?q=0k4e8z. Normally the left cell should rotate to a downwards direction (or at least that's what he specified), yet in otomata that doesn't happen.

If I can find the time I'll clean up the code a bit and make more stuff configurable rather than using constants.

Edit:

I found some time to change the constants to variables and added support to save/load the board to a text file.

98CxR.png

You can get it here: http://dl.dropbox.com/u/8797691/ProceduralMidi_v2.zip

I hope I didn't screw anything up with the actual notes because I'm at work at the moment and unable to actually hear the notes being played.

I'll have to read a little more about the MCI, but I think the type of output I'm talking about would have to be accessed through the more advanced MIDI services. Basically, you'd be querying the system to find out what MIDI output devices are present, then allowing the user to select the MIDI device they want to send to. Sorry I can't be more specific, but I've never coded anything that deals with MIDI beyond simple GlovePIE scripts. If I get a chance, I may look at your code and see if I can implement something.

Edit: To clarify, what the program does right now is to output through the default Windows MIDI player -- called the Microsoft GS Wavetable Synth, I think, which is probably the hardcoded behavior for MCI MIDI output. Depending on how the system is set up, there may be other MIDI output devices to send through, such as a soundcard's MIDI out or a MIDI loopback program, so what would need to happen would be for the program to find these other output devices and allow you to select which one to use.

Share this post


Link to post
Share on other sites

http://dl.dropbox.com/u/26684258/ProceduralMidi_MIDIOutput.zip

I added to drake7707's program the ability to choose which MIDI output device you select, which means it can be used with MIDI loopback devices, such as LoopBe.

A quick guide to getting this to work:

1) Install LoopBe. Download link is here.

2) Inside ProceduralMidi, you'll see another drop-down box below the instrument box, which probably currently says "Microsoft Wavetable GS Synth". Change it to "LoopBe Internal MIDI".

3) Set your VST host or whatever program you're using to use LoopBe as an input MIDI device.

I've already been able to output notes directly to synths in FL Studio.

p.s. drake, would you be interested in making ProceduralMidi a Google Code\Codeplex project?

Share this post


Link to post
Share on other sites
http://dl.dropbox.com/u/26684258/ProceduralMidi_MIDIOutput.zip

I added to drake7707's program the ability to choose which MIDI output device you select, which means it can be used with MIDI loopback devices, such as LoopBe.

A quick guide to getting this to work:

1) Install LoopBe. Download link is here.

2) Inside ProceduralMidi, you'll see another drop-down box below the instrument box, which probably currently says "Microsoft Wavetable GS Synth". Change it to "LoopBe Internal MIDI".

3) Set your VST host or whatever program you're using to use LoopBe as an input MIDI device.

I've already been able to output notes directly to synths in FL Studio.

p.s. drake, would you be interested in making ProceduralMidi a Google Code\Codeplex project?

I've uploaded the code and release to http://proceduralmidi.codeplex.com/, I've also refactored the code to group stuff together and commented everything. I've moved all the cellular automata logic to the Board class, which means it's much easier now to create a new subclass of AbstractBoard and implement other rules and when cells are active (= played in the iteration). .. Not that I have any ideas for a new ruleset at the moment , anyone any ideas ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this