On 15/02/13 M Donalies <ingeniousnebbish(a)cox.net> wrote:
On Friday 15 February 2013 13:19:57 J. Liles wrote:
It means that you have to do that tricky
'sequencing' part, which
consists of scheduling (MIDI) events and only placing them onto the
JACK buffer at the appropriate instant. ALSA MIDI does this for you,
as well as providing a nice API for generating the MIDI events.
That's not the trickiest part though, the real mess begins when you
want to deal with the JACK Transport/Timebase API to follow or
generate tempo changes.
So there's no way to tell Jack to deliver the event at time t? You
have to wait for the right frame and then put on the buffer
(presumably to appear on the buffer for the receiver to use the next
frame)?
Unless you mean something other than conversions to/from nanoseconds
(or whatever), the tempo stuff doesn't much concern me. That's a
straight-forward number-crunching algorithm. That kind of thing I can
do.
I expected the timebase stuff to be quite straightforward too, but found
the details started to get a bit fuzzy when it comes to staying in sync
as master and staying in sync as a slave; something to do with rounding
errors and methods of calculation. Found it actually quite difficult,
and with my program I don't think I actually came to find anything I
considered a fully acceptable solution. (but coding is just a hobby for
me that sometimes I get quite serious about and at other times (like the
past six months or so) just can't be bothered with).
But anyway, JACK MIDI isn't very difficult, NON Sequencer was one of
the programs I found useful to study, perhaps you could take something
from JACK Keyboard or VMPK, too.
James.