On Thu, 30 Jul 2009, Jakob Lund wrote:
>
> I say use ticks (floating point). If you _really_ want to have the
> option of selecting setting a 'lead' value in ms, the results ought to
Thanks!
> But what about MIDI? If a MIDI input needs to schedule "x ms into the
> current buffer cycle", and we then convert the ms to ticks (for
Hmmm... MIDI data would be sort of frame-based. Hmmm... this makes me
want to go back to frames (instead of ticks). :-/
> For now, we could allow both ticks and ms offsets, and then decide later
> what happens if they're both present.
I wonder if maybe a union (frames OR ticks OR ms OR ticks+ms) might be
more appropriate. Giving the inputs a choice of how it's scheduled. I've
omitted the idea up to now because it sounds complicated.
But maybe not. The data would be stored as the "real" data. If a change
event happens, then SeqScript would re-convert the data as is appropriate.
> Another thing to be considered is the status of the internal timer of
> hydrogen. Your design is based on the sequencer always running as slave,
> and the internal and external (e.g. Jack) timer being interchangeable. I
> feel that the internal timer should have special status though -- one
> good reason for this is that any other application, acting as jack time
> master, might at any time give up that responsibility, and hydrogen
> would receive jack__bbt_valid == false or what ever it's called -- and
> the internal timer should be ready to take over. In that situation, the
> jack transport (i.e. play, stop, rewind etc) would still be used, but
> with our own timer
This is *sort of* the idea. Note that JackTransportMaster (JACK transport
slave) is not complete... and that's why it doesn't handle the case where
there is no B:b.t info.
But, JackTransportMaster is *the* internal timer for Hydrogen. There is
no other. If the jack server doesn't provide B:b.t (or provides _invalid_
B:b.t), that class is responsible to provide a good fallback.
The rule is: Hydrogen transports (that is, internal) must always provide
a valid B:b.t position that is within the current song. How this is done
is up to each implementation. However, a Transport object is *the* timer
for Hydrogen... and must be that dependable.
How we implement this remains to be seen... but from what I recall, the
calculations are simple enough that I think we can avoid a 3-way transport
mediation. :-)
Enter the case where we want Jack to slave to Hydrogen.
JackTransportMaster (internal) is now *the* timer for both Hydrogen and
JACK. The purpose of JackTimeMaster (external) is to translate/adapt our
internal transport to the JACK server.[1]
> Lastly.. what about renaming JackTransportMaster to JackTimer, and
> SimpleTransportMaster to SimpleTimer (and eventually InternalTimer)...
> The JackTransportMaster and JackTimeMaster names confuse me sooo.. (I've
> been using the word 'timer', but there might be a better word)
Yeah, I think some renaming is in order. :-)
> I hope I'm making the least bit of sense here :-)
Yes! Thanks for the help, too.
-Gabriel
[1] Actually, this makes it possible to be the JACK Transport Master...
but not be a JACK Transport Slave. Not sure if anyone wanted
that...
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Hydrogen-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hydrogen-devel