About This Guide

This chapter includes:

What you'll find in this guide

The Audio Developer's Guide is intended for developers who wish to write audio applications using the QNX Sound Architecture (QSA) drivers and library.

This table may help you find what you need in this guide:

To find out about: Go to:
The structure of an audio application Audio Architecture
Playing and recording sound Playing and Capturing Audio Data
The structure of a mixer Mixer Architecture
Audio library functions Audio Library
How to code a .wav player in C wave.c example
How to code a .wav recorder in C waverec.c example
How to code a mix_ctl in C mix_ctl.c example
Why libasound.a isn't offered LGPL License Agreement
Terms used in this guide Glossary

Note: You should have already installed QNX Neutrino and become familiar with its architecture. For a detailed overview, see the System Architecture guide.

The key components of the QNX Audio driver architecture include:

io-audio
Audio system manager.
deva-ctrl-*.so drivers
Audio drivers. For example, the audio driver for the Ensoniq Audio PCI cards is deva-ctrl-audiopci.so. For more information, see the entries for the deva-* audio drivers in the QNX Neutrino Utilities Reference.
libasound.so
Programmer interface library.
<asound.h>, <asoundlib.h>
Header files in /usr/include/sys/.

Typographical conventions

Throughout this manual, we use certain typographical conventions to distinguish technical terms. In general, the conventions we use conform to those found in IEEE POSIX publications. The following table summarizes our conventions:

Reference Example
Code examples if( stream == NULL )
Command options -lR
Commands make
Environment variables PATH
File and pathnames /dev/null
Function names exit()
Keyboard chords Ctrl-Alt-Delete
Keyboard input something you type
Keyboard keys Enter
Program output login:
Programming constants NULL
Programming data types unsigned short
Programming literals 0xFF, "message string"
Variable names stdin
User-interface components Cancel

We use an arrow (→) in directions for accessing menu items, like this:

You'll find the Other... menu item under Perspective-->Show View.

We use notes, cautions, and warnings to highlight important messages:


Note: Notes point out something important or useful.


Caution: Cautions tell you about commands or procedures that may have unwanted or undesirable side effects.


WARNING: Warnings tell you about commands or procedures that could be dangerous to your files, your hardware, or even yourself.

Note to Windows users

In our documentation, we use a forward slash (/) as a delimiter in all pathnames, including those pointing to Windows files.

We also generally follow POSIX/UNIX filesystem conventions.

Technical support

To obtain technical support for any QNX product, visit the Support area on our website (www.qnx.com). You'll find a wide range of support options, including community forums.

What's new in this release?

This section summarizes the changes in the following releases:

What's new in QNX Neutrino

snd_pcm_capture_go()
Start a PCM capture channel running
snd_pcm_capture_pause()
Pause a channel that's capturing
snd_pcm_capture_resume()
Resume a channel that's capturing
snd_pcm_channel_go()
Start a PCM channel running
snd_pcm_channel_pause()
Pause a channel
snd_pcm_channel_resume()
Resume a channel
snd_pcm_find()
We've corrected the values of the mode argument.
snd_pcm_open()
SND_PCM_OPEN_DUPLEX hasn't been implemented.
snd_pcm_open_preferred()
We've described the format of the preferences file.
snd_pcm_playback_drain()
This function actually returns -EINVAL if the PCM device state isn't ready.
snd_pcm_playback_go()
Start a PCM playback channel running
snd_pcm_playback_pause()
Pause a channel that's playing back
snd_pcm_playback_resume()
Resume a channel that's playing back
snd_pcm_plugin_playback_drain()
This function actually returns -EINVAL if the PCM device state isn't ready.

What's new in QNX Neutrino 6.5.0 Service Pack 1

snd_pcm_plugin_set_src_method()
Set the system's source filter method (plugin-aware)

What's new in QNX Neutrino 6.5.0

Voice conversion
The libasound library now supports devices that have more than two channels, and it provides a mechanism that lets you configure how the voice converter plugin replicates or reduces the voices or channels. For more information, see Controlling voice conversion in the Playing and Capturing Audio Data chapter.
snd_pcm_channel_params_t
This structure now includes a sw_mixer_subchn_name member that you can use to assign a name to the software mixer subchannel.
snd_pcm_plugin_get_voice_conversion()
Get the current voice conversion structure for a channel
snd_pcm_plugin_read(), snd_pcm_plugin_write(), snd_pcm_read()
These functions indicate an error of EIO if the channel isn't in the prepared or running state.
snd_pcm_plugin_set_voice_conversion()
Set the current voice conversion structure for a channel
snd_pcm_voice_conversion_t
Data structure that controls voice conversion
wave.c, waverec.c, mix_ctl.c
We've updated these examples.
snd_pcm_plugin_update_src()
Get the size of the next fragment to write
snd_pcm_plugin_src_max_frag()
Get the maximum possible fragment size
snd_pcm_plugin_set_src_mode()
Set the system's source mode

What's new in QNX Neutrino 6.4

snd_mixer_open_name()
Create a connection and handle to a mixer device specified by name
snd_pcm_open_name()
Create a handle and open a connection to an audio interface specified by name

What's new in QNX Neutrino 6.3

snd_ctl_mixer_switch_list()
Get the number and names of control switches for the mixer
snd_ctl_mixer_switch_read()
Get a mixer switch setting
snd_ctl_mixer_switch_write()
Adjust a mixer switch setting
snd_switch_t
Information about a mixer's switch
mix_ctl.c
A sample application that captures the groups and switches in the mixer

What's new in QNX Neutrino 6.2

The QNX Sound Architecture has evolved away from ALSA. You should reread this entire guide.

What's new in QNX Neutrino 6.1

snd_pcm_channel_info()
Removed the SND_PCM_CHNINFO_BATCH flag because it was deprecated in the source code.

Copyright © 2000–2018, QNX Software Systems Limited, a subsidiary of BlackBerry Limited. All rights reserved.