blob: bbfc8b317ac6d10b3fd62a01a65d7a659a6c93c2 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Audio Subsystem &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../_static/custom.css" />
<link rel="shortcut icon" href="../../_static/favicon.ico"/>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="NuttX File System" href="../filesystem/index.html" />
<link rel="prev" title="On-Demand Paging" href="../paging.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../latest" selected="selected">latest</option>
<option value="../../../10.0.0" >10.0.0</option>
<option value="../../../10.0.1" >10.0.1</option>
<option value="../../../10.1.0" >10.1.0</option>
<option value="../../../10.2.0" >10.2.0</option>
<option value="../../../10.3.0" >10.3.0</option>
<option value="../../../11.0.0" >11.0.0</option>
<option value="../../../12.0.0" >12.0.0</option>
<option value="../../../12.1.0" >12.1.0</option>
<option value="../../../12.2.0" >12.2.0</option>
<option value="../../../12.2.1" >12.2.1</option>
<option value="../../../12.3.0" >12.3.0</option>
<option value="../../../12.4.0" >12.4.0</option>
<option value="../../../12.5.0" >12.5.0</option>
<option value="../../../12.5.1" >12.5.1</option>
<option value="../../../12.6.0" >12.6.0</option>
<option value="../../../12.7.0" >12.7.0</option>
<option value="../../../12.8.0" >12.8.0</option>
<option value="../../../12.9.0" >12.9.0</option>
<option value="../../../12.10.0" >12.10.0</option>
<option value="../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">OS Components</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../binfmt.html">Binary Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../drivers/index.html">Device Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../nxflat.html">NXFLAT</a></li>
<li class="toctree-l2"><a class="reference internal" href="../nxgraphics/index.html">NX Graphics Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../paging.html">On-Demand Paging</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Audio Subsystem</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#files-in-nuttx-audio">Files in nuttx/audio</a></li>
<li class="toctree-l3"><a class="reference internal" href="#related-header-files">Related Header Files</a></li>
<li class="toctree-l3"><a class="reference internal" href="#configuration-settings">Configuration Settings</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#general-audio-settings">General Audio Settings</a></li>
<li class="toctree-l4"><a class="reference internal" href="#audio-format-support-selections">Audio Format Support Selections</a></li>
<li class="toctree-l4"><a class="reference internal" href="#audio-feature-exclusion-selections">Audio feature exclusion Selections</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#related-subdirectories">Related Subdirectories</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../filesystem/index.html">NuttX File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../libs/index.html">NuttX libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="../net/index.html">Network Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mm/index.html">Memory Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../syscall.html">Syscall Layer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tools/index.html"><code class="docutils literal notranslate"><span class="pre">/tools</span></code> Host Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="../arch/index.html">Architecture-Specific Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../boards.html">Boards Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cmake.html">CMake Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../openamp.html">OpenAMP Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../video.html">Video Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../crypto.html">Crypto API Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../wireless.html">Wireless Subsystem</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">OS Components</a></li>
<li class="breadcrumb-item active">Audio Subsystem</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/components/audio/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="audio-subsystem">
<h1>Audio Subsystem<a class="headerlink" href="#audio-subsystem" title="Permalink to this heading"></a></h1>
<p>This page discusses the audio subsystem support for NuttX which is only built if
<code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO</span></code> is defined in the NuttX configuration file.</p>
<section id="files-in-nuttx-audio">
<h2>Files in nuttx/audio<a class="headerlink" href="#files-in-nuttx-audio" title="Permalink to this heading"></a></h2>
<p>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.</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">audio.c</span></code> - 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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pcm_decode.c</span></code> - Routines to decode PCM / WAV type data.</p></li>
</ul>
<p>Portions of the audio system interface have application interfaces. Those
portions reside in the <code class="docutils literal notranslate"><span class="pre">nuttx/libc/audio</span></code> directory where the will be built for
access by both OS driver logic and user application logic. Those relevant
files in <code class="docutils literal notranslate"><span class="pre">nuttx/libc/audio</span></code> include:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">buffer.c</span></code> - 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).</p></li>
</ul>
</section>
<section id="related-header-files">
<h2>Related Header Files<a class="headerlink" href="#related-header-files" title="Permalink to this heading"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">include/nuttx/audio/audio.h</span></code> - Top level include file defining the audio interface
<code class="docutils literal notranslate"><span class="pre">include/nuttx/audio/vs1053.h</span></code> - Specific driver initialization prototypes</p>
</section>
<section id="configuration-settings">
<h2>Configuration Settings<a class="headerlink" href="#configuration-settings" title="Permalink to this heading"></a></h2>
<section id="general-audio-settings">
<h3>General Audio Settings<a class="headerlink" href="#general-audio-settings" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO</span></code>
Enables overall support for audio subsystem</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_MULTI_SESSION</span></code>
Enables support for the audio subsystem to track multiple open sessions
with lower-level audio devices.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_LARGE_BUFFERS</span></code>
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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_NUM_BUFFERS</span></code>
Sets the number of audio buffers to use for audio operations. If the
configuration has set <code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS</span></code>, and an audio
device does not support the operation, then this becomes the default number
of buffers to use.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_BUFFER_SIZE</span></code>
Sets the size of the audio buffers to use for audio operations. If the
configuration has set <code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS</span></code>, and an audio
device does not support the operation, then this becomes the default size
of buffers to use.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS</span></code>
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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_CUSTOM_DEV_PATH</span></code>
Specifies that all audio devices should be registered in the filesystem at
a location other than the standard <code class="docutils literal notranslate"><span class="pre">/dev/audio</span></code> directory.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_DEV_ROOT</span></code>
Specifies that all audio devices should be registered in the <code class="docutils literal notranslate"><span class="pre">/dev</span></code> 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 <code class="docutils literal notranslate"><span class="pre">/dev</span></code> must be opened and tested if they provide audio support.
Available only if <code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_CUSTOM_DEV_PATH</span></code> is selected.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_DEV_PATH</span></code>
Specifies a custom directory where audio devices will be registered.
Available if <code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_CUSTOM_DEV_PATH</span></code> is selected and <code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_DEV_ROOT</span></code>
is not selected.</p></li>
</ul>
</section>
<section id="audio-format-support-selections">
<h3>Audio Format Support Selections<a class="headerlink" href="#audio-format-support-selections" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_AC3</span></code>
Specifies that AC3 support should be enabled if available by a lower-half driver.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_DTS</span></code>
Specifies that DTS support should be enabled if available by a lower-half driver.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_PCM</span></code>
Specifies that PCM support should be enabled if available by a lower-half driver.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_MP3</span></code>
Specifies that MP3 support should be enabled if available by a lower-half driver.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_MIDI</span></code>
Specifies that MIDI support should be enabled if available by a lower-half driver.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_WMA</span></code>
Specifies that WMA support should be enabled if available by a lower-half driver.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_FORMAT_OGG_VORBIS</span></code>
Specifies that Ogg Vorbis support should be enabled if available by a lower-half driver.</p></li>
</ul>
</section>
<section id="audio-feature-exclusion-selections">
<h3>Audio feature exclusion Selections<a class="headerlink" href="#audio-feature-exclusion-selections" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_EXCLUDE_VOLUME</span></code>
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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_EXCLUDE_BALANCE</span></code>
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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_EXCLUDE_TONE</span></code>
Disables support for setting bass and treble.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_EXCLUDE_PAUSE_RESUME</span></code>
Disables support in all libraries and drivers for pausing and resuming playback.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_AUDIO_EXCLUDE_STOP</span></code>
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).</p></li>
</ul>
</section>
</section>
<section id="related-subdirectories">
<h2>Related Subdirectories<a class="headerlink" href="#related-subdirectories" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">drivers/audio</span></code> - Contains the lower-level device specific drivers.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">apps/system/nxplayer</span></code> - User-mode audio subsystem interface library.</p></li>
</ul>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../paging.html" class="btn btn-neutral float-left" title="On-Demand Paging" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../filesystem/index.html" class="btn btn-neutral float-right" title="NuttX File System" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>