Hello, On Sat, 2011-01-22 at 15:08 -0500, David Santamauro wrote: > On Sat, 22 Jan 2011 12:09:26 +0000 > Bernard Hurley <bern...@marcade.biz> wrote: > > > On Sat, Jan 22, 2011 at 10:34:29AM +0000, c.m.bryan wrote: > > > Hi, I have an interesting question. I know lilypond is not really > > > meant for playback. HOWEVER :) > > > > > Personally I would like lily to have much more sophisicated midi > > capabilities. > > Me too.
> > This isn't as hard as it seems from a programming standpoint. Although > I am still learning the internals of lilypond (and haven't had much > time of late), I did write a skeleton Expression_performer (MIDI CC 11) > that handles expression spanner events for kicks (not committed or > committable but was a great learning experience). It takes a bit of > digging but the programmers' reference and previous threads[1][2] and > of course, hours of source-code study were invaluable to me. > Thanks for the threads > For program changes (as with expression), I'm pretty sure you would need > to get into c++ down to the Audio_Event level (doxygen documentation was > also a major help in understanding class hierarchy) and then work your > way back up to the scheme and lily init levels. > Looks like that's what I'll have to do, but I'll have to get used to the code first. > There is also articulate[2] which is a good starting point for scheme > development, but again, I think the program changes would need to be > implemented at the c++ core level (I could be wrong and more > knowledgeable folks should correct me). > Articulate looks very interesting! > > PS Although intercepting 'pizz' and 'marcato' etc are interesting, I, > personally would much rather see a special MIDI syntax coupled with a > special voice context (controller lane in DAW parlance). > > Like this: > > \new MidiStaff << > \new Voice { c1\> f1\! } > \new MidiControlVoice { > \set MidiControlVoice.midiProgChange 'violin' > \set MidiControlVoice.midiVolume #101 > \set MidiControlVoice.midiExpression #64 > > % sequence of CC 11 events spanning a measure > m1\midiExpressionSpanner { <start> <end> <curveType> } > } > >> > > 'm' is just a placeholder to attach stream positional information. But > with most "continuous" controllers, expression, modulation, pitch-bend > etc, you will want to span and each spanner would need start, end and > curveType parameters, at the least -- maybe even density. > > Sorry for rambling / brainstorming ... > It gives me something to think about! Cheers /Bernard _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel