Aleatoric Sequence Generator For Renoise

After seeing the Psymachine topic the other day, I remebered a very old Delphi app I wrote for probabilty driven sequences for ModPlug. Because of this, and the fact that I needed to practice my jQuery skills, I tried to recreate it in XHTML and Javascript only. It started as an excercise rahter then something serious, but it turned out quite nicely and I wanted to share it with you. Here it is:

Renoise Track Generator

I suppose the controls are pretty self explanatory. Simply put, you drag the sliders to set probabilities for the notes you wish to be part of the sequence, for the octave distribution, then probability for a note to appear on each position (64 lines hard-coded), and velocty curve for the generated sequence. Then hit “Generate” and you have it. Copy the XML data and paste it on a track in your Renoise pattern.

I managed to get some pretty neat melodies, basslines and drum sequences with it.

Try it if you like. Let me know if you have any ideas for improvement. I feel kinda enthusiastic about developing this little thing further. :)

Really nice work! Many thanks for publishing this wonderful tool.

Edit:

My suggestion for further development is to allow the user to copy-paste FROM a Renoise track INTO this application. There, the application would re-arrange the submitted notes (similar to how the Matrix device in Reason works), rotate them, etc – either at random or in accordance with some set of rules.

What do you think of this idea?

Excellent work!

Been meaning to make something similar myself for ages but haven’t had time

Interesting, and also joyful! Thanks for sharing.

nice job,but have you thought about making this as a stand alone version (if its possible)for those that dont have internet access on their music computers(me)

Thanks for the kind words. I’m glad you like it. :)

@ Transcender: I like your idea. I think the jQuery library has good XML parsing functions so analyzing Renoise track data may be possible. I’ll have to do some reading to be sure. Once the pasted data is parsed, re-arranging things automatically should be quite easy.

@ s-n-s: It was exactly because of people with no Internet on their music computers that I wanted to restrict myself to Javascript. The thing would’ve been easier to do and potentially more powerful with some server-side scripting language like PHP. But the way it is now, everything is done locally by your browser. So, you can simply save the complete web page together with the linked Javascript and CSS files and just use your local copy. It will be fully functional and will work on any OS.

Excellent work, you even got the colorscheme right :wink:

Thanks for this great fun toy!

Maybe you can also include fields for panning, delay (DX) and randomise patterncommands & values (offline dblue glitch? :) )

I found some time today to implement Transcender’s idea. You can now paste some track data into the generator. Then hit “Analyze” and all the note and octave probabilities will be populated according to the distribution in the original pattern.

The position probabilities are set to directly match the note positions. That is, if there is a note (or a note-off, they are treated the same way) = 100%; if no = 0%. This way the rhythm of the melody is preserved. Of course, if you have no note-offs in the original track then it will preserve it best.

I added a “Nudge” button that will randomize things just a little bit - 10% above or below the current value. I think it’s a convenient way to make some little automatic changes.

I tested it a bit and it seems to work exactly as intended. Have fun with it! :)

First, i think this is a cool tool. Nice one.

I went back to check your modifications and the page did not work. A reload fixed the problem. It was a cache issue. I looked at the source code (I will be downloading this because it is a good lesson in jQuery) and noticed <rtg.js?1>, maybe you could have incremented to <rtg.js?2> to avoid the caching issue? Isn’t that why you put the ?1 there in the first place?

Also, could you make a stand alone archive for downloading? Like, zip up all the stuff and add a download link at the bottom? I know you said you can download the page with a decent browser, but it would be cool to have an official offline version.

Thanks!

Hey, Conner. Yes, the caching screwed things up a bit. The first version of the page didn’t have a no-cache pragma and most people should need to reload to get the latest version. From now on, any modifications should show up without reloading.

The “?1” is there to prevent the caching of the javascript, like you guessed. The initial version didn’t have it at all. Like I said in the first post, the whole thing didn’t start much seriously, so I overlooked these little tricks.

Oh, and I put a zip and link to it there. Now it’s official. ;)

Superb. Now we have such type app for mac!

The new analyze function doesn’t seem to work here ?
This is the data i pasted :

<?xml version="1.0" encoding="UTF-8"?>  
<PatternClipboard.BlockBuffer doc_version="0">  
 <TrackColumns>  
 <TrackColumn>  
 <TrackColumn>  
 <Lines>  
 <Line index="0">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>D-5</Note>  
 <Instrument>02</Instrument>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="1"/>  
 <Line index="2"/>  
 <Line index="3"/>  
 <Line index="4"/>  
 <Line index="5"/>  
 <Line index="6"/>  
 <Line index="7"/>  
 <Line index="8"/>  
 <Line index="9"/>  
 <Line index="10">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>OFF</Note>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="11"/>  
 <Line index="12"/>  
 <Line index="13"/>  
 <Line index="14">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>F-5</Note>  
 <Instrument>02</Instrument>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="15">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>OFF</Note>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="16"/>  
 <Line index="17"/>  
 <Line index="18"/>  
 <Line index="19"/>  
 <Line index="20"/>  
 <Line index="21"/>  
 <Line index="22"/>  
 <Line index="23"/>  
 <Line index="24">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>E-5</Note>  
 <Instrument>02</Instrument>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="25"/>  
 <Line index="26"/>  
 <Line index="27"/>  
 <Line index="28">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>OFF</Note>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="29"/>  
 <Line index="30"/>  
 <Line index="31"/>  
 <Line index="32">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>G-5</Note>  
 <Instrument>02</Instrument>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="33"/>  
 <Line index="34"/>  
 <Line index="35"/>  
 <Line index="36"/>  
 <Line index="37"/>  
 <Line index="38"/>  
 <Line index="39"/>  
 <Line index="40">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>OFF</Note>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="41"/>  
 <Line index="42"/>  
 <Line index="43"/>  
 <Line index="44">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>A#5</Note>  
 <Instrument>02</Instrument>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="45"/>  
 <Line index="46"/>  
 <Line index="47"/>  
 <Line index="48">  
 <NoteColumns>  
 <NoteColumn>  
 <Note>OFF</Note>  
 </NoteColumn>  
 </NoteColumns>  
 </Line>  
 <Line index="49"/>  
 <Line index="50"/>  
 <Line index="51"/>  
 <Line index="52"/>  
 <Line index="53"/>  
 <Line index="54"/>  
 <Line index="55"/>  
 <Line index="56"/>  
 <Line index="57"/>  
 <Line index="58"/>  
 <Line index="59"/>  
 <Line index="60"/>  
 <Line index="61"/>  
 <Line index="62"/>  
 </Lines>  
 <ColumnType>NoteColumn</ColumnType>  
 </TrackColumn>  
 <TrackColumn>  
 <Lines>  
 <Line index="0"/>  
 <Line index="1"/>  
 <Line index="2"/>  
 <Line index="3"/>  
 <Line index="4"/>  
 <Line index="5"/>  
 <Line index="6"/>  
 <Line index="7"/>  
 <Line index="8"/>  
 <Line index="9"/>  
 <Line index="10"/>  
 <Line index="11"/>  
 <Line index="12"/>  
 <Line index="13"/>  
 <Line index="14"/>  
 <Line index="15"/>  
 <Line index="16"/>  
 <Line index="17"/>  
 <Line index="18"/>  
 <Line index="19"/>  
 <Line index="20"/>  
 <Line index="21"/>  
 <Line index="22"/>  
 <Line index="23"/>  
 <Line index="24"/>  
 <Line index="25"/>  
 <Line index="26"/>  
 <Line index="27"/>  
 <Line index="28"/>  
 <Line index="29"/>  
 <Line index="30"/>  
 <Line index="31"/>  
 <Line index="32"/>  
 <Line index="33"/>  
 <Line index="34"/>  
 <Line index="35"/>  
 <Line index="36"/>  
 <Line index="37"/>  
 <Line index="38"/>  
 <Line index="39"/>  
 <Line index="40"/>  
 <Line index="41"/>  
 <Line index="42"/>  
 <Line index="43"/>  
 <Line index="44"/>  
 <Line index="45"/>  
 <Line index="46"/>  
 <Line index="47"/>  
 <Line index="48"/>  
 <Line index="49"/>  
 <Line index="50"/>  
 <Line index="51"/>  
 <Line index="52"/>  
 <Line index="53"/>  
 <Line index="54"/>  
 <Line index="55"/>  
 <Line index="56"/>  
 <Line index="57"/>  
 <Line index="58"/>  
 <Line index="59"/>  
 <Line index="60"/>  
 <Line index="61"/>  
 <Line index="62"/>  
 </Lines>  
 <ColumnType>EffectColumn</ColumnType>  
 </TrackColumn>  
 </TrackColumn>  
 </TrackColumns>  
</PatternClipboard.BlockBuffer>  

Edit Taktik: added pasted code into [CODEBOX]

@Kara: Could you be more specific? What does “doesn’t seem to work” mean exactly?

It works for me. All the probabilities are set exactly. Indeed, there was a minor bug - the instrument number wasn’t set. It’s fixed now. But was this what you meant?

Try refreshing the page to make sure you’re using the latest version.

When I click on analyse, nothing happens ?
i’m on ie7

k

Hm, I see now. You’re right, Analyze doesn’t work in IE7. I tried to make some changes to make it run but no luck.

It’s no surprise though. IE always sucked and I suppose it always will. It chokes even on the simplest of things, let alone something more unusual. I may try again, but can’t promise anything.

Meanwhile, everything works perfectly fine in Firefox, Safari and Opera.

Do yourself a favor and get Firefox. ;) Not because of this tool only, of course, but because it’s simply a much much better browser.

subset: Awesome! Thanks a bunch for this.

Just had a play with this… very nice, we need more Renoise tools. :)

Thanks a 1,000,000’z

(@ subset) Is it possible for you to code the possibility for longer patterns (>64) ? Please :slight_smile: