Kyma Forum
  Tips & Techniques
  Recycle and Midi

Post New Topic  Post A Reply
profile | register | preferences | faq | search

next newest topic | next oldest topic
Author Topic:   Recycle and Midi
mk23
Member
posted 15 January 2008 16:53         Edit/Delete Message   Reply w/Quote
Hello all,
I've been thinking for a while about how to integrate Recycled beats into my Kyma workflow. I have some ideas but I’m going to need a bit of advice, my main question is at the bottom of this message.

However first, a little background! If you don’t know Recycle, it takes a beat, detects the individual drum hits, splits them into individual samples and then saves a midi file that matches the triggering of these slices of the original file. This midi file is just a series of ascending notes whose start times match the drum hits that were used to create the sample slices. I know that people have worked on making the autobreaks and autokronos etc sounds on the tweaky. But I personally find they don’t give me the fine control I enjoy with triggering the slices from my sequencer.

My first idea is that it would be great to be able to use the Recycled midi file in Kyma with a TAU file. What I would really like to do is:

Create a TAU analysis of the whole loop that I have recycled.
Find a way to load the matching recycled midi file and use the times in the midi file so that they are mapped to times in the TAU file. This would mean I can trigger the split samples and the TAU from the same midi notes and start to do some mangling My initial thoughts are to have the times in an array and use the key downs to skip through it. Does that sound like I'm heading in the right direction?

I guess my question boils down to this:

Can anyone suggest a way of converting the start times of the midi notes (it’s a monophonic file obviously) into something that could be used to trigger various times within the TAU analysis? I had a quick play with Luddy’s sound from the Tweaky to convert the midi file but couldn’t really get my head around it (although Luddy if you are out there, it seems like a great idea, any chance of some examples how to use it?)

TIA for any help

David mK

IP: Logged

tuscland
Member
posted 15 January 2008 17:26         Edit/Delete Message   Reply w/Quote
Hi,

Sounds like fun!
Could we have the midi file and a small drum loop to see how it can be done?
You can upload it to this forum, if it's not too big and in a zip file.


Cheers,
Cam

IP: Logged

SSC
Administrator
posted 16 January 2008 19:30         Edit/Delete Message   Reply w/Quote

ControlTauwithRecycleMIDIFile.zip

 
quote:
My initial thoughts are to have the times in an array and use the key downs to skip through it. Does that sound like I'm heading in the right direction?

Yes it sounds like the right direction. One approach would be to construct an 'into' array that pairs notenumber with timeIndex for the TauPlayer. Then each incoming !KeyNumber would select a unique time point. The timeIndex would also have to move forward or backward from that time point for the correct duration, so we would also need an into: array pairing notenumbers with durations (as read from the MIDI file).

I took a stab at this using the TimedEventCollection to read the values from a MIDI file and create the notenumberToStartTime and notenumberToDuration into arrays, and used a CapyTalk expression to use !KeyNumber as the index into those arrays. The whole thing is in a Constant that is pasted into the TimeIndex field of a TauPlayer.

The MIDI file is simple (just 60 61 62, .. , 67) and all even eighth notes. As Camille pointed out, it would be helpful to have an actual example for testing and refining this idea. For example, I assume the times are in seconds (in the attached example, I had to compensate for the MIDI file assuming MM = 120, but I am guessing that the real MIDI files assume a BPM of 60?)

Thanks!

IP: Logged

Luddy
Member
posted 17 January 2008 06:18         Edit/Delete Message   Reply w/Quote

SMFenvelope.kym

 
Hi,

I do lots of stuff like this with MIDI files. I think that Carla's idea is right on the money for this case. The durations and times of the MIDI file are in units of beats, relative to an implicit BPM, so I usually make the actual BPM an argument to whatever expression / script / etc I'm using to build such a map.

--

The examples I posted were mostly to illustrate that you can use ramp expressions to create 'future' gates, that trigger when the ramp hits 1. I built a polyphonic SMF player to show the idea.

I've attached a class hereto that shows a more useful example: creating a unipolar envelope from the pitches in a MIDI file. I use this to create my own step sequencers. The class reads an SMF file, and creates an envelope for each channel in the file (for which there is note data). The maximum pitch on a channel generates a '1' in the output; the minimum pitch generates a '0'; and pitches in between generate values between 0 and 1. If the Min parameter is less than the minimum pitch on a channel, then the value of the Min parameter is taken to be the '0' value of the envelope; in other words, the envelope will never output a '0' if Min is set this way. Similarly, if the Max parameter is greater than the maximum pitch on a channel, then the envelope will never generate a '1'. This allows you to control exactly the envelope values that are generated from specific pitches, if you don't like the defaults. The Channel parameter determines which of the 16 possible envelopes (one per channel of the MIDI file) is used.

An example of using this: multiply the cutoff frequency modulation amount by the output of this class, to create a step filter.

Note that it's easy to whip up envelopes based on velocity or duration as well. I have one variation that creates a train of trigger pulses based on the note-on events in a MIDI file.

Expand (CMD-E) the class, or edit the class and use the Retrieve Example command, to examine the script and capytalk expression that does the work.

Hope that helps to illustrate the idea!

-Luddy

[This message has been edited by Luddy (edited 17 January 2008).]

IP: Logged

mk23
Member
posted 18 January 2008 13:18         Edit/Delete Message   Reply w/Quote

David_mKs_try.zip

 
It works perfectly!! I'm very impressed

Attached is a ZIP that contains:

self test TAU david - SSC's sound with a recycled loop! It uses rustdrum130.

rustDrum130.mid - the recycled midi output of the classic rustdrum loop from the Kyma library. To hear the loop straight, either load this into the MIDI voice within the sound itself, or trigger the sound from your sequencer.

1st_Recycled.mid - a hastily put together demo of what can be achieved with Recycle and loops...

I spent the day getting my head around event collections and now my brain is buzzing with ideas. Anyway, SSC thank's a lot for the bit of code, I'm going to plug this into various loop based sound's I've been working on and see what I can come up with...

Best Regards

David mK

ps Luddy, your examples are the next one's I will take apart and try to learn more from!

[This message has been edited by mk23 (edited 19 January 2008).]

IP: Logged

SSC
Administrator
posted 02 February 2008 15:01         Edit/Delete Message   Reply w/Quote
Glad it worked! I've added it to the Tau Gallery collection (Time Frequency category) so you can produce these by clicking on the Gallery button after you've analyzed a sound.

IP: Logged

All times are CT (US)

next newest topic | next oldest topic

Administrative Options: Close Topic | Archive/Move | Delete Topic
Post New Topic  Post A Reply

Contact Us | Symbolic Sound Home

This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.


Ultimate Bulletin Board 5.45c