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

Reply via email to