forked from auracaster/pyalsaaudio
184 lines
7.7 KiB
HTML
184 lines
7.7 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
<title>PCM Terminology and Concepts — alsaaudio 0.8.2 documentation</title>
|
|
|
|
<link rel="stylesheet" href="_static/default.css" type="text/css" />
|
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT: './',
|
|
VERSION: '0.8.2',
|
|
COLLAPSE_INDEX: false,
|
|
FILE_SUFFIX: '.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
<link rel="top" title="alsaaudio 0.8.2 documentation" href="index.html" />
|
|
<link rel="next" title="alsaaudio" href="libalsaaudio.html" />
|
|
<link rel="prev" title="Introduction" href="pyalsaaudio.html" />
|
|
</head>
|
|
<body>
|
|
<div class="related">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="right" >
|
|
<a href="libalsaaudio.html" title="alsaaudio"
|
|
accesskey="N">next</a> |</li>
|
|
<li class="right" >
|
|
<a href="pyalsaaudio.html" title="Introduction"
|
|
accesskey="P">previous</a> |</li>
|
|
<li><a href="index.html">alsaaudio 0.8.2 documentation</a> »</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body">
|
|
|
|
<div class="section" id="pcm-terminology-and-concepts">
|
|
<h1>PCM Terminology and Concepts<a class="headerlink" href="#pcm-terminology-and-concepts" title="Permalink to this headline">¶</a></h1>
|
|
<p>In order to use PCM devices it is useful to be familiar with some concepts and
|
|
terminology.</p>
|
|
<dl class="docutils">
|
|
<dt>Sample</dt>
|
|
<dd><p class="first">PCM audio, whether it is input or output, consists of <em>samples</em>.
|
|
A single sample represents the amplitude of one channel of sound
|
|
at a certain point in time. A lot of individual samples are
|
|
necessary to represent actual sound; for CD audio, 44100 samples
|
|
are taken every second.</p>
|
|
<p>Samples can be of many different sizes, ranging from 8 bit to 64
|
|
bit precision. The specific format of each sample can also vary -
|
|
they can be big endian byte integers, little endian byte integers, or
|
|
floating point numbers.</p>
|
|
<p class="last">Musically, the sample size determines the dynamic range. The
|
|
dynamic range is the difference between the quietest and the
|
|
loudest signal that can be resproduced.</p>
|
|
</dd>
|
|
<dt>Frame</dt>
|
|
<dd>A frame consists of exactly one sample per channel. If there is only one
|
|
channel (Mono sound) a frame is simply a single sample. If the sound is
|
|
stereo, each frame consists of two samples, etc.</dd>
|
|
<dt>Frame size</dt>
|
|
<dd><dl class="first last docutils">
|
|
<dt>This is the size in bytes of each frame. This can vary a lot: if each sample</dt>
|
|
<dd><dl class="first last docutils">
|
|
<dt>is 8 bits, and we’re handling mono sound, the frame size is one byte.</dt>
|
|
<dd>Similarly in 6 channel audio with 64 bit floating point samples, the frame
|
|
size is 48 bytes</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
<dt>Rate</dt>
|
|
<dd>PCM sound consists of a flow of sound frames. The sound rate controls how
|
|
often the current frame is replaced. For example, a rate of 8000 Hz
|
|
means that a new frame is played or captured 8000 times per second.</dd>
|
|
<dt>Data rate</dt>
|
|
<dd><p class="first">This is the number of bytes, which must be recorded or provided per
|
|
second at a certain frame size and rate.</p>
|
|
<p>8000 Hz mono sound with 8 bit (1 byte) samples has a data rate of
|
|
8000 * 1 * 1 = 8 kb/s or 64kbit/s. This is typically used for telephony.</p>
|
|
<p class="last">At the other end of the scale, 96000 Hz, 6 channel sound with 64
|
|
bit (8 bytes) samples has a data rate of 96000 * 6 * 8 = 4608
|
|
kb/s (almost 5 Mb sound data per second)</p>
|
|
</dd>
|
|
<dt>Period</dt>
|
|
<dd>When the hardware processes data this is done in chunks of frames. The time
|
|
interval between each processing (A/D or D/A conversion) is known
|
|
as the period.
|
|
The size of the period has direct implication on the latency of the
|
|
sound input or output. For low-latency the period size should be
|
|
very small, while low CPU resource usage would usually demand
|
|
larger period sizes. With ALSA, the CPU utilization is not impacted
|
|
much by the period size, since the kernel layer buffers multiple
|
|
periods internally, so each period generates an interrupt and a
|
|
memory copy, but userspace can be slower and read or write multiple
|
|
periods at the same time.</dd>
|
|
<dt>Period size</dt>
|
|
<dd>This is the size of each period in Hz. <em>Not bytes, but Hz!.</em> In
|
|
<a class="reference internal" href="libalsaaudio.html#module-alsaaudio" title="alsaaudio (Linux)"><tt class="xref py py-mod docutils literal"><span class="pre">alsaaudio</span></tt></a> the period size is set directly, and it is
|
|
therefore important to understand the significance of this
|
|
number. If the period size is configured to for example 32,
|
|
each write should contain exactly 32 frames of sound data, and each
|
|
read will return either 32 frames of data or nothing at all.</dd>
|
|
</dl>
|
|
<p>Once you understand these concepts, you will be ready to use the PCM API. Read
|
|
on.</p>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar">
|
|
<div class="sphinxsidebarwrapper">
|
|
<h4>Previous topic</h4>
|
|
<p class="topless"><a href="pyalsaaudio.html"
|
|
title="previous chapter">Introduction</a></p>
|
|
<h4>Next topic</h4>
|
|
<p class="topless"><a href="libalsaaudio.html"
|
|
title="next chapter"><tt class="docutils literal"><span class="pre">alsaaudio</span></tt></a></p>
|
|
<h3>This Page</h3>
|
|
<ul class="this-page-menu">
|
|
<li><a href="_sources/terminology.txt"
|
|
rel="nofollow">Show Source</a></li>
|
|
</ul>
|
|
<div id="searchbox" style="display: none">
|
|
<h3>Quick search</h3>
|
|
<form class="search" action="search.html" method="get">
|
|
<input type="text" name="q" />
|
|
<input type="submit" value="Go" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
<p class="searchtip" style="font-size: 90%">
|
|
Enter search terms or a module, class or function name.
|
|
</p>
|
|
</div>
|
|
<script type="text/javascript">$('#searchbox').show(0);</script>
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="right" >
|
|
<a href="libalsaaudio.html" title="alsaaudio"
|
|
>next</a> |</li>
|
|
<li class="right" >
|
|
<a href="pyalsaaudio.html" title="Introduction"
|
|
>previous</a> |</li>
|
|
<li><a href="index.html">alsaaudio 0.8.2 documentation</a> »</li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer">
|
|
© Copyright 2008-20017, Casper Wilstrup, Lars Immisch.
|
|
Last updated on Feb 22, 2017.
|
|
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
|
|
</div>
|
|
</body>
|
|
</html> |