snd_pcm_open()

Updated: April 19, 2023

Create a handle and open a connection to a specified audio interface

Synopsis:

#include <sys/asoundlib.h>

int snd_pcm_open( snd_pcm_t **handle, 
                  int         card, 
                  int         device, 
                  int         mode );

Arguments:

handle
A pointer to a location where snd_pcm_open() stores a handle for the audio interface. You'll need this handle when you call the other snd_pcm_* functions.
card
The card number.
device
The audio device number.
mode
One of:
  • SND_PCM_OPEN_PLAYBACK — open the playback channel (direction).
  • SND_PCM_OPEN_CAPTURE — open the capture channel (direction).

You can OR this flag with any of the above:

  • SND_PCM_OPEN_NONBLOCK — force the mode to be nonblocking. This affects any reading from or writing to the device that you do later; you can query the device any time without blocking.

    You can change the blocking setup later by calling snd_pcm_nonblock_mode()

Library:

libasound.so

Use the -l asound option with qcc to link against this library.

Description:

The snd_pcm_open() function creates a handle and opens a connection to the audio interface for sound card number card and audio device number device. It also checks if the protocol is compatible to prevent the use of programs written to an older API with newer drivers.

There are no defaults; your application must specify all the arguments to this function.

Using names for audio devices (snd_pcm_open_name()) is preferred to using numbers (snd_pcm_open()), although snd_pcm_open_preferred(). remains a good alternative to both.

Returns:

Zero on success, or a negative error code.

Errors:

-ENOMEM
Not enough memory to allocate control structures.

Examples:

See the example in Opening your PCM device in the Playing and Capturing Audio Data chapter.

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Read the Caveats

Caveats:

This function is not thread safe if handle (snd_pcm_t) is used across multiple threads.

Successfully opening a PCM channel doesn't guarantee that there are enough audio resources free to handle your application. Audio resources (e.g. subchannels) are allocated when you configure the channel by calling snd_pcm_channel_params() or snd_pcm_plugin_params() .