[chuck-users] ChucK FLOSS - MIDI reference
mario buoninfante
mario.buoninfante at gmail.com
Tue May 22 18:41:23 EDT 2018
Hi Juan,
thanks a lot for that. I forgot there was an example about it. despite I
work quite a lot with MIDI in general, from both programming and musical
purposes, I've almost never used MIDI files. so, honestly I've never
paid attention to that example, mea culpa :)
apart from that, now I'd like to know what are the differences between
MidiFileIn and MidiRW. I'll dig a bit more into the source code. in the
meanwhile I updated the ChucK FLOSS manual, with at least all the
methods I found on the link you sent. I'll try to get the descriptions
as well as soon as possible.
cheers,
Mario
On 22/05/18 22:48, Juan Reyes wrote:
> Hi Mario,
>
> Have used 'MidiFileIn' as per '/examples/midi/playmidi.ck'
>
> Some documentation is on:
> [1] https://ccrma.stanford.edu/~spencer/ckdoc/io.html#MidiFileIn
>
> BTW, Thanks to Spencer for MidiFileIn'.
>
> Tricky parts are more related to MidiMsg and actual midifile
> manipulation. 'playmidi.ck' only triggers noteOns from the MIDI file.
> For NoteOffs another MidiMsg conditional (or filter for this kind of
> data stream on file) needs to be added. Tempo can also be manipulated
> by just hacking 'playmidi.ck' code.
>
> Certainly one needs to get fluent on MIDI messaging hexadecimal codes.
> NoteOn is 0x90 and NoteOff is 0x80. NoteOffs are useful to get actual
> note durations. Some STK Ugens sustain forever if you don't have
> NoteOffs, -in fact wherever an ADSR is not used-.
>
> Below some code that works to get NoteOffs and for illustration
> purposes. Can post all the code or email it, in case you need it.
>
> Thanks for the MIDI Reference chapter on the ChucK FLOSS manual.
>
> -- Juan Reyes
>
>
> //**********************************************************//
>
> MidiFileIn min;
> MidiMsg msg;
>
> 0 => int j;
> time delta;
> float beg; // start midi note
> 0.0 => float durat;
>
> if((msg.data1 & 0xF0) == 0x90 && msg.data2 > 0 && msg.data3 > 0)
> {
> <<< j, " NOTE-ON KEY: ", msg.data2, "Velocity: ", msg.data3 >>>;
> 1 +=> j;
> }
>
> if((msg.data1 & 0xF0) == 0x80)
> {
> beg-last => durat;
> <<< "NOTE-OFF: ",msg.data2, msg.data3, "start: ", beg, " duration: ",
> durat >>>;
>
> beg => last;
> }
>
> //**********************************************************//
>
>
>>
>> at the moment there are info about MIDI also under the Event
>> Reference, which I don't wanna touch for now. anyway, there are a
>> couple of classes I've never seen before, MidiMsgIn, MidiMsgOut and
>> MidiFileIn, has anyone ever used them?
>>
More information about the chuck-users
mailing list