Hi Juan,

the ALSA sequencer has for every queue internally a queue for events
scheduled in absolute time and in tick/beats. According to the internal time
reference the event is dispatched at the required (real) time. 

For softsynth applications the events should be dispatched ahead of time
(depending on the buffer size/latency in the synthesis application). At this
moment there is no provision to register a listner with a negative
pre-delay. A (feasable and logical) application workaround is to configure
this pre-delay in the application generating the events (if known), or
otherwise when the event is not known ahead it can't do better than 'play as
soon as possible' anyhow.

If your synth works with a large buffer size you'll need to calculate the
start of trigger from the timestamp in the event.

For better support of softsynths I'm thinking about a special hook in
alsa-lib (userland) or jack/laspda where for the audio fragment/buffer an
array with the alsa sequencer events is supplied.

The sample buffer (to be output) has:
- # number of samples
- channels, sample rate & other sample specific parameters
- start time of buffer 
- end time of buffer 
- array of events

The start & end time are needed to determine the current pitch the transport
is doing (ie. to cope with varispeed) Playing the stream backwards would
remain a big challange still.. 

Reality is that I'm very tight on my free time, so don't expect to see code
soon....


Cheers,
Frank.


On Sun, Aug 11, 2002 at 08:14:26PM -0300, Juan Linietsky wrote:
> Hi, i'm trying to implement a proper timing control in a sequencer
> client implementation,
> but i have a question not covered in the documentation. Basically,
> does alsalib or alsa
> do any kind of timing conversion or something at the time of the event
> arrival?
> what i mean is, basically my seq client app (a softsynth) has to to
> take care of _all_ kind of timings?
> (direct/timestamp absolute and relative/tick), or does alsa proovide
> some method (for timing conversion or something) so i can easily parse
> those? This is basically so i can process audio in large blocks and
> sync properly with the audio being played, even if there is a certain
> latency. I checked out
> some existing apps (timidity and iiwusynth) and none seem to bother
> about checking the time of
> the event, so they'll screwup when using bigger audio buffersizes. 
> Has this been ever implemented? 
> 
> Thanks!
> 
> Juan Linietsky
> 
> 
> 
> 
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Alsa-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/alsa-devel

-- 
+---- --- -- -  -   -    - 
| Frank van de Pol                  -o)    A-L-S-A
| [EMAIL PROTECTED]                    /\\  Sounds good!
| http://www.alsa-project.org      _\_v
| Linux - Why use Windows if we have doors available?


-------------------------------------------------------
This sf.net email is sponsored by: Dice - The leading online job board
for high-tech professionals. Search and apply for tech jobs today!
http://seeker.dice.com/seeker.epl?rel_code=31
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to