[alsa-devel] When to start the capture device?

Takashi Iwai tiwai at suse.de
Thu Sep 20 16:20:55 CEST 2007

At Wed, 19 Sep 2007 16:17:55 -0700,
Sheng (Sean) Liu wrote:
> Hello everyone,
> I am using ALSA to capture sound from a micrphone. I need to know when the
> capture device starts. In Paul Davis' Tutorial, he mentioned two approaches.
> But, I have questions on each of them.
> When to start the device 
> When you open the audio interface, ALSA ensures that it is not active - no
> data is being moved to or from its external connectors. Presumably, at some
> point you want this data transfer to begin. There are several options for
> how to make this happen. 
> 1. The control point here the start threshold, which defines the number of
> frames of space/data necessary to start the device automatically. If set to
> some value other than zero for playback, it is necessary to prefill the
> playback buffer before the device will start. If set to zero, the first data
> written to the device (or first attempt to read from a capture stream) will
> start the device. 
> My question: what does he means on " If set to zero"? Does anyone know which
> parameter of which API should be set to zero?

It's about start_threshold for sw_params, corresponding to

> 2. You can also start the device explicitly using snd_pcm_start, but this
> requires buffer prefilling in the case of the playback stream. If you
> attempt to start the stream without doing this, you will get -EPIPE as a
> return code, indicating that there is no data waiting to deliver to the
> playback hardware buffer.
> My question: Is there anything to be done before calling snd_pcm_start in
> the case of capturing stream? If there is, what are they?

snd_pcm_hw_params(), and optionally, snd_pcm_sw_params().

The former is for the mandatory hardware settings, such as, access
mode, format, channels, sample rate, buffer size, period size, etc.
Once after snd_pcm_hw_params() is called and the device is set up,
it's ready to go.  In addition, you can do more fine tuning of some
parameters such as start_threshold in the above via
snd_pcm_sw_params().  This is an optional action.

Once after snd_pcm_hw_params() is done, you can start the stream via
snd_pcm_start() explicitly for the capture stream.  For the playback
stream, usually the automatic start via a proper start_threshold is

Well, a graphical diagram would be good to explain such a thing.
We can put it to Wiki.  Any taker, please?


More information about the Alsa-devel mailing list