![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Recycle and Midi | |
mk23 Member |
![]() ![]() ![]() 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. 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?) David mK IP: Logged | |
tuscland Member |
![]() ![]() ![]() Hi, Sounds like fun!
IP: Logged | |
SSC Administrator |
![]() ![]() ![]()
quote: 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 |
![]() ![]() ![]()
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 |
![]() ![]() ![]()
![]() 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 |
![]() ![]() ![]() 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 |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.