lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MIDI remapping


From: Bernard Hurley
Subject: Re: MIDI remapping
Date: Sat, 22 Jan 2011 22:49:48 +0000

Hello,

On Sat, 2011-01-22 at 15:08 -0500, David Santamauro wrote:
> On Sat, 22 Jan 2011 12:09:26 +0000
> Bernard Hurley <address@hidden> 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]