Audio Subsystem

This page discusses the audio subsystem support for NuttX which is only built if CONFIG_AUDIO is defined in the NuttX configuration file.

Files in nuttx/audio

This directory holds the NuttX audio subsystem upper-half. The upper-half provides a common interface for applications to interface with and also defines a bind layer for specific lower-half audio device drivers.

  • audio.c - The upper-half driver that binds to a lower-half driver from the drivers/audio subdirectory. For each attached audio device, there will be an instance of this upper-half driver bound to the instance of the lower half driver context.

  • pcm_decode.c - Routines to decode PCM / WAV type data.

Portions of the audio system interface have application interfaces. Those portions reside in the nuttx/libc/audio directory where the will be built for access by both OS driver logic and user application logic. Those relevant files in nuttx/libc/audio include:

  • buffer.c - Routines to manage creattion and destruction of audio pipeline buffers (apb) used in the audio subsystem. Audio pipeline buffers are passed between user applications and the audio drivers to deliver audio content for playback (or possibly recording in the future).

Configuration Settings

General Audio Settings

  • CONFIG_AUDIO Enables overall support for audio subsystem

  • CONFIG_AUDIO_MULTI_SESSION Enables support for the audio subsystem to track multiple open sessions with lower-level audio devices.

  • CONFIG_AUDIO_LARGE_BUFFERS Specifies that buffer size variables should be 32-bit vs. the normal 16-bit size. This allows buffers to be larger than 64K bytes on systems with an abundance of RAM.

  • CONFIG_AUDIO_NUM_BUFFERS Sets the number of audio buffers to use for audio operations. If the configuration has set CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS, and an audio device does not support the operation, then this becomes the default number of buffers to use.

  • CONFIG_AUDIO_BUFFER_SIZE Sets the size of the audio buffers to use for audio operations. If the configuration has set CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS, and an audio device does not support the operation, then this becomes the default size of buffers to use.

  • CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS Enables support for lower-level audio drivers to specify the number and size of buffers that should be allocated for best performance while interacting with that driver.

  • CONFIG_AUDIO_CUSTOM_DEV_PATH Specifies that all audio devices should be registered in the filesystem at a location other than the standard /dev/audio directory.

  • CONFIG_AUDIO_DEV_ROOT Specifies that all audio devices should be registered in the /dev directory. Saves a tiny bit of code and RAM space since an additional directory isn’t needed, but at the expense of execution speed when searching for audio devices since all entries in /dev must be opened and tested if they provide audio support. Available only if CONFIG_AUDIO_CUSTOM_DEV_PATH is selected.

  • CONFIG_AUDIO_DEV_PATH Specifies a custom directory where audio devices will be registered. Available if CONFIG_AUDIO_CUSTOM_DEV_PATH is selected and CONFIG_AUDIO_DEV_ROOT is not selected.

Audio Format Support Selections

  • CONFIG_AUDIO_FORMAT_AC3 Specifies that AC3 support should be enabled if available by a lower-half driver.

  • CONFIG_AUDIO_FORMAT_DTS Specifies that DTS support should be enabled if available by a lower-half driver.

  • CONFIG_AUDIO_FORMAT_PCM Specifies that PCM support should be enabled if available by a lower-half driver.

  • CONFIG_AUDIO_FORMAT_MP3 Specifies that MP3 support should be enabled if available by a lower-half driver.

  • CONFIG_AUDIO_FORMAT_MIDI Specifies that MIDI support should be enabled if available by a lower-half driver.

  • CONFIG_AUDIO_FORMAT_WMA Specifies that WMA support should be enabled if available by a lower-half driver.

  • CONFIG_AUDIO_FORMAT_OGG_VORBIS Specifies that Ogg Vorbis support should be enabled if available by a lower-half driver.

Audio feature exclusion Selections

  • CONFIG_AUDIO_EXCLUDE_VOLUME Disables support in all libraries and drivers for setting the playback volume. In this case, the device volume will depend on the default level defined by the lower-level driver, typically via a config setting.

  • CONFIG_AUDIO_EXCLUDE_BALANCE Disables support in all libraries and drivers for setting the playback balance. Also, the volume support must not be excluded for balance to work or make sense.

  • CONFIG_AUDIO_EXCLUDE_TONE Disables support for setting bass and treble.

  • CONFIG_AUDIO_EXCLUDE_PAUSE_RESUME Disables support in all libraries and drivers for pausing and resuming playback.

  • CONFIG_AUDIO_EXCLUDE_STOP Disables support in all libraries and drivers for stopping an audio playback once it has started. Typically selected if only short notification audio sounds are needed (vs. media playing type applications).