Hi Josh,

At Sat, 22 Jun 2002 20:41:20 -0700,
Joshua Haberman wrote:
> 
> Hello all!
> 
> I am writing a PortAudio implementation for ALSA.  PortAudio is designed
> to present a single API that cross-platform applications can use on many
> different platforms.
> 
> I have some questions I hope you can answer for me.
> 
> 1.  Is there any reason to choose anything other than mmap mode for
> transfer?  Are there some cards that don't support it?
 
yes.  some devices don't support.
however you can specify the mmap-emulation mode on asoundrc, hence
mmap mode will be able to work on every device.


> 2.  How is device selection designed to work with ALSA?  My experience
> with ALSA has been very confusing in this regard.  I recall reading at
> least once that ALSA is not designed to have applications enumerate all
> the devices; that the correct way is to use ~/.asoundrc to define a
> hardware device and then supply that name to applications.  But is there
> anything more sophisticated an application can do than to just present
> the user with a text box?

the pcm name really depends on the driver implementation.
usually, device #0 is provided for general use.  but, for example, the
implementation of 4-channel sound is driver speicific.
some driver implements using a control switch and other combines
multiple pcm streams, etc.

however, there are standard names, too:
default, front, rear, center_lfe, surround40, surround51, spdif and
iec958 (identical with spdif).
it would be nice if users can choose one of them from a list, and
additionally have an input text field (well, not sophisticated,
though).


> 3.  I'm not sure how to approach the latency-related software and
> hardware parameters.  PortAudio will soon be able to run in either
> callback mode or blocking mode, and it is intended that the user be able
> to provide hints to the implementation about what kind of latency it
> wants.
> 
> The mechanism for setting latency in PortAudio is in a state of flux, but
> at the moment the PortAudio implementation is provided with these
> parameters:
> 
>     framesPerCallback -- max number of frames to pass to the user callback,
>         when running in callback mode
>     numberOfBuffers
>     latencyInFrames
> 
> These are only guidelines to the driver, not commands, but I'd still like
> to do the best possible approximation.  I'm thinking of doing something
> like this:
> 
>     snd_pcm_hw_params_set_period_time( MIN(latencyInFrames, framesPerCallback) )
>     snd_pcm_hw_params_set_periods( numberOfBuffers )
>     /* buffer size is implicit from the above two */

this should work, although snd_pcm_hw_params_set_period_time_near()
would be better to ensure the driver works.  the available
period/buffer size is dependent on the chip.  *_near() function probes
the nearest possibility.  you then need to reconfirm the approved
period/buffer sizes.  the similar thing will be necessary for sample
rates.
also, don't forget to set channels and format :)

just a question - is it necessary to provide both latencyInFrames and
framesPerCallback?

>     snd_pcm_sw_params_set_avail_min( MIN(latencyInFrames, framesPerCallback) )
> 
> As you can probably tell, I'm murky on the interaction between the
> avail_min software parameter and the period_time hardware parameter.
> Clarifications welcome.  :-)

the value you set is the default.  so you don't have to set it
explicitly.


ciao,

Takashi


-------------------------------------------------------
Sponsored by:
ThinkGeek at http://www.ThinkGeek.com/
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to