470 lines
39 KiB
HTML
470 lines
39 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
|
||
<title>audioop --- 处理原始音频数据 — Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/language_data.js"></script>
|
||
<script src="../_static/translations.js"></script>
|
||
|
||
<script src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="在 Python 3.8.20 文档 中搜索"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="关于这些文档" href="../about.html" />
|
||
<link rel="index" title="索引" href="../genindex.html" />
|
||
<link rel="search" title="搜索" href="../search.html" />
|
||
<link rel="copyright" title="版权所有" href="../copyright.html" />
|
||
<link rel="next" title="aifc --- 读写 AIFF 和 AIFC 文件" href="aifc.html" />
|
||
<link rel="prev" title="多媒体服务" href="mm.html" />
|
||
<link rel="canonical" href="https://docs.python.org/3/library/audioop.html" />
|
||
|
||
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/menu.js"></script>
|
||
|
||
</head>
|
||
<body>
|
||
<div class="mobile-nav">
|
||
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
|
||
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
|
||
<label for="menuToggler" class="toggler__label">
|
||
<span></span>
|
||
</label>
|
||
<nav class="nav-content" role="navigation">
|
||
<a href="https://www.python.org/" class="nav-logo">
|
||
<img src="../_static/py.svg" alt="Logo"/>
|
||
</a>
|
||
<div class="version_switcher_placeholder"></div>
|
||
<form role="search" class="search" action="../search.html" method="get">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
|
||
<path fill-rule="nonzero"
|
||
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
|
||
</svg>
|
||
<input type="text" name="q" aria-label="快速搜索"/>
|
||
<input type="submit" value="转向"/>
|
||
</form>
|
||
</nav>
|
||
<div class="menu-wrapper">
|
||
<nav class="menu" role="navigation" aria-label="main navigation">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="mm.html"
|
||
title="上一章">多媒体服务</a></p>
|
||
<h4>下一个主题</h4>
|
||
<p class="topless"><a href="aifc.html"
|
||
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">aifc</span></code> --- 读写 AIFF 和 AIFC 文件</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/audioop.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
|
||
这个文档所针对的是一个已不再受支持的 Python 旧版本。
|
||
你应当升级版本,并阅读
|
||
<a href="/3/library/audioop.html"> Python 当前稳定版本的文档</a>.
|
||
</div>
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
accesskey="I">索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="aifc.html" title="aifc --- 读写 AIFF 和 AIFC 文件"
|
||
accesskey="N">下一页</a> |</li>
|
||
<li class="right" >
|
||
<a href="mm.html" title="多媒体服务"
|
||
accesskey="P">上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="mm.html" accesskey="U">多媒体服务</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section id="module-audioop">
|
||
<span id="audioop-manipulate-raw-audio-data"></span><h1><a class="reference internal" href="#module-audioop" title="audioop: Manipulate raw audio data."><code class="xref py py-mod docutils literal notranslate"><span class="pre">audioop</span></code></a> --- 处理原始音频数据<a class="headerlink" href="#module-audioop" title="永久链接至标题">¶</a></h1>
|
||
<hr class="docutils" />
|
||
<p><a class="reference internal" href="#module-audioop" title="audioop: Manipulate raw audio data."><code class="xref py py-mod docutils literal notranslate"><span class="pre">audioop</span></code></a> 模块包含针对声音片段的一些有用操作。它操作的声音片段由 8、16、24 或 32 位宽的有符号整型样本组成,存储在 <a class="reference internal" href="../glossary.html#term-bytes-like-object"><span class="xref std std-term">类字节串对象</span></a> 中。除非特别说明,否则所有标量项目均为整数。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.4 版更改: </span>增加了对 24 位样本的支持。现在,所有函数都接受任何 <a class="reference internal" href="../glossary.html#term-bytes-like-object"><span class="xref std std-term">类字节串对象</span></a>。而传入字符串会立即导致错误。</p>
|
||
</div>
|
||
<p id="index-0">本模块提供对 a-LAW、u-LAW 和 Intel/DVI ADPCM 编码的支持。</p>
|
||
<p>部分更复杂的操作仅接受 16 位样本,而其他操作始终需要样本大小(以字节为单位)作为该操作的参数。</p>
|
||
<p>此模块定义了下列变量和函数:</p>
|
||
<dl class="exception">
|
||
<dt id="audioop.error">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">error</code><a class="headerlink" href="#audioop.error" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>所有错误都会抛出此异常,比如样本的字节数未知等等。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.add">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">fragment1</em>, <em class="sig-param">fragment2</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.add" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>两个样本作为参数传入,返回一个片段,该片段是两个样本的和。<em>width</em> 是样本宽度(以字节为单位),可以取 <code class="docutils literal notranslate"><span class="pre">1</span></code>, <code class="docutils literal notranslate"><span class="pre">2</span></code>, <code class="docutils literal notranslate"><span class="pre">3</span></code> 或 <code class="docutils literal notranslate"><span class="pre">4</span></code>。两个片段的长度应相同。如果发生溢出,较长的样本将被截断。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.adpcm2lin">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">adpcm2lin</code><span class="sig-paren">(</span><em class="sig-param">adpcmfragment</em>, <em class="sig-param">width</em>, <em class="sig-param">state</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.adpcm2lin" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将 Intel/DVI ADPCM 编码的片段解码为线性片段。关于 ADPCM 编码的详情请参阅 <a class="reference internal" href="#audioop.lin2adpcm" title="audioop.lin2adpcm"><code class="xref py py-func docutils literal notranslate"><span class="pre">lin2adpcm()</span></code></a> 的描述。返回一个元组 <code class="docutils literal notranslate"><span class="pre">(sample,</span> <span class="pre">newstate)</span></code>,其中 sample 的位宽由 <em>width</em> 指定。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.alaw2lin">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">alaw2lin</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.alaw2lin" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将 a-LAW 编码的声音片段转换为线性编码声音片段。由于 a-LAW 编码样本始终为 8 位,因此这里的 <em>width</em> 仅指输出片段的样本位宽。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.avg">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">avg</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.avg" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回片段中所有样本的平均值。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.avgpp">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">avgpp</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.avgpp" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回片段中所有样本的平均峰峰值。由于没有进行过滤,因此该例程的实用性尚存疑。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.bias">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">bias</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">bias</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.bias" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回一个片段,该片段由原始片段中的每个样本加上偏差组成。在溢出时样本会回卷 (wrap around)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.byteswap">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">byteswap</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.byteswap" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>“按字节交换”片段中的所有样本,返回修改后的片段。将大端序样本转换为小端序样本,反之亦然。</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">3.4 新版功能.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.cross">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">cross</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.cross" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将片段作为参数传入,返回其中过零点的数量。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.findfactor">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">findfactor</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">reference</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.findfactor" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回一个系数 <em>F</em> 使得 <code class="docutils literal notranslate"><span class="pre">rms(add(fragment,</span> <span class="pre">mul(reference,</span> <span class="pre">-F)))</span></code> 最小,即返回乘以 <em>reference</em> 后最匹配 <em>fragment</em> 的那个乘数。两个片段都应包含 2 字节宽的样本。</p>
|
||
<p>本例程所需的时间与 <code class="docutils literal notranslate"><span class="pre">len(fragment)</span></code> 成正比。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.findfit">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">findfit</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">reference</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.findfit" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>尽可能尝试让 <em>reference</em> 匹配 <em>fragment</em> 的一部分(<em>fragment</em> 应较长)。从概念上讲,完成这些靠从 <em>fragment</em> 中取出切片,使用 <a class="reference internal" href="#audioop.findfactor" title="audioop.findfactor"><code class="xref py py-func docutils literal notranslate"><span class="pre">findfactor()</span></code></a> 计算最佳匹配,并最小化结果。两个片段都应包含 2 字节宽的样本。返回一个元组 <code class="docutils literal notranslate"><span class="pre">(offset,</span> <span class="pre">factor)</span></code>,其中 <em>offset</em> 是在 <em>fragment</em> 中的偏移量(整数),表示从此处开始最佳匹配,而 <em>factor</em> 是由 <a class="reference internal" href="#audioop.findfactor" title="audioop.findfactor"><code class="xref py py-func docutils literal notranslate"><span class="pre">findfactor()</span></code></a> 定义的因数(浮点数)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.findmax">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">findmax</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">length</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.findmax" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>在 <em>fragment</em> 中搜索所有长度为 <em>length</em> 的样本切片(不是字节!)中,能量最大的那一个切片,即返回 <em>i</em> 使得 <code class="docutils literal notranslate"><span class="pre">rms(fragment[i*2:(i+length)*2])</span></code> 最大。两个片段都应包含 2 字节宽的样本。</p>
|
||
<p>本例程所需的时间与 <code class="docutils literal notranslate"><span class="pre">len(fragment)</span></code> 成正比。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.getsample">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">getsample</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">index</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.getsample" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回片段中样本索引 <em>index</em> 的值。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.lin2adpcm">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">lin2adpcm</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">state</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.lin2adpcm" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将样本转换为 4 位 Intel/DVI ADPCM 编码。ADPCM 编码是一种自适应编码方案,其中每个 4 比特数字是一个采样值与下一个采样值之间的差除以(不定的)步长。IMA 已选择使用 Intel/DVI ADPCM 算法,因此它很可能成为标准。</p>
|
||
<p><em>state</em> 是一个表示编码器状态的元组。编码器返回一个元组 <code class="docutils literal notranslate"><span class="pre">(adpcmfrag,</span> <span class="pre">newstate)</span></code>,而 <em>newstate</em> 要在下一次调用 <a class="reference internal" href="#audioop.lin2adpcm" title="audioop.lin2adpcm"><code class="xref py py-func docutils literal notranslate"><span class="pre">lin2adpcm()</span></code></a> 时传入。在初始调用中,可以将 <code class="docutils literal notranslate"><span class="pre">None</span></code> 作为 state 传递。<em>adpcmfrag</em> 是 ADPCM 编码的片段,每个字节打包了 2 个 4 比特值。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.lin2alaw">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">lin2alaw</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.lin2alaw" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将音频片段中的采样值转换为 a-LAW 编码,并将其作为字节对象返回。a-LAW 是一种音频编码格式,仅使用 8 位样本即可获得大约 13 位的动态范围。Sun 音频硬件等使用该编码。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.lin2lin">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">lin2lin</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">newwidth</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.lin2lin" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将采样在 1、2、3 和 4 字节格式之间转换。</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>在某些音频格式(如 .WAV 文件)中,16、24 和 32 位采样是有符号的,但 8 位采样是无符号的。因此,当将这些格式转换为 8 位宽采样时,还需使结果加上 128:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">new_frames</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">lin2lin</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">old_width</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||
<span class="n">new_frames</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">bias</span><span class="p">(</span><span class="n">new_frames</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">128</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>反之,将 8 位宽的采样转换为 16、24 或 32 位时,必须采用相同的处理。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.lin2ulaw">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">lin2ulaw</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.lin2ulaw" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将音频片段中的采样值转换为 u-LAW 编码,并将其作为字节对象返回。u-LAW 是一种音频编码格式,仅使用 8 位采样即可获得大约 14 位的动态范围。Sun 音频硬件等使用该编码。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.max">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">max</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.max" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回片段中所有采样值的最大 <em>绝对值</em>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.maxpp">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">maxpp</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.maxpp" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回声音片段中的最大峰峰值。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.minmax">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">minmax</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.minmax" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回声音片段中所有采样值的最小值和最大值组成的元组。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.mul">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">mul</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">factor</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.mul" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回一个片段,该片段由原始片段中的每个采样值乘以浮点值 <em>factor</em> 组成。如果发生溢出,采样将被截断。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.ratecv">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">ratecv</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">nchannels</em>, <em class="sig-param">inrate</em>, <em class="sig-param">outrate</em>, <em class="sig-param">state</em><span class="optional">[</span>, <em class="sig-param">weightA</em><span class="optional">[</span>, <em class="sig-param">weightB</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#audioop.ratecv" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>转换输入片段的帧速率。</p>
|
||
<p><em>state</em> 是一个表示转换器状态的元组。转换器返回一个元组 <code class="docutils literal notranslate"><span class="pre">(newfragment,</span> <span class="pre">newstate)</span></code>,而 <em>newstate</em> 要在下一次调用 <a class="reference internal" href="#audioop.ratecv" title="audioop.ratecv"><code class="xref py py-func docutils literal notranslate"><span class="pre">ratecv()</span></code></a> 时传入。初始调用应传入 <code class="docutils literal notranslate"><span class="pre">None</span></code> 作为 state。</p>
|
||
<p>参数 <em>weightA</em> 和 <em>weightB</em> 是简单数字滤波器的参数,默认分别为 <code class="docutils literal notranslate"><span class="pre">1</span></code> 和 <code class="docutils literal notranslate"><span class="pre">0</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.reverse">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">reverse</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.reverse" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将片段中的采样值反转,返回修改后的片段。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.rms">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">rms</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.rms" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回片段的均方根值,即 <code class="docutils literal notranslate"><span class="pre">sqrt(sum(S_i^2)/n)</span></code>。</p>
|
||
<p>测量音频信号的能量。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.tomono">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">tomono</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">lfactor</em>, <em class="sig-param">rfactor</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.tomono" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将立体声片段转换为单声道片段。左通道乘以 <em>lfactor</em>,右通道乘以 <em>rfactor</em>,然后两个通道相加得到单声道信号。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.tostereo">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">tostereo</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em>, <em class="sig-param">lfactor</em>, <em class="sig-param">rfactor</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.tostereo" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>由单声道片段生成立体声片段。立体声片段中的两对采样都是从单声道计算而来的,即左声道是乘以 <em>lfactor</em>,右声道是乘以 <em>rfactor</em>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="audioop.ulaw2lin">
|
||
<code class="sig-prename descclassname">audioop.</code><code class="sig-name descname">ulaw2lin</code><span class="sig-paren">(</span><em class="sig-param">fragment</em>, <em class="sig-param">width</em><span class="sig-paren">)</span><a class="headerlink" href="#audioop.ulaw2lin" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将 u-LAW 编码的声音片段转换为线性编码声音片段。由于 u-LAW 编码采样值始终为 8 位,因此这里的 <em>width</em> 仅指输出片段的采样位宽。</p>
|
||
</dd></dl>
|
||
|
||
<p>请注意,诸如 <a class="reference internal" href="#audioop.mul" title="audioop.mul"><code class="xref py py-func docutils literal notranslate"><span class="pre">mul()</span></code></a> 或 <a class="reference internal" href="#audioop.max" title="audioop.max"><code class="xref py py-func docutils literal notranslate"><span class="pre">max()</span></code></a> 之类的操作在单声道和立体声间没有区别,即所有采样都作相同处理。如果出现问题,应先将立体声片段拆分为两个单声道片段,之后再重组。以下是如何进行该操作的示例:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">mul_stereo</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">lfactor</span><span class="p">,</span> <span class="n">rfactor</span><span class="p">):</span>
|
||
<span class="n">lsample</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">tomono</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||
<span class="n">rsample</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">tomono</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||
<span class="n">lsample</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">mul</span><span class="p">(</span><span class="n">lsample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">lfactor</span><span class="p">)</span>
|
||
<span class="n">rsample</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">mul</span><span class="p">(</span><span class="n">rsample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">rfactor</span><span class="p">)</span>
|
||
<span class="n">lsample</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">tostereo</span><span class="p">(</span><span class="n">lsample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||
<span class="n">rsample</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">tostereo</span><span class="p">(</span><span class="n">rsample</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">audioop</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">lsample</span><span class="p">,</span> <span class="n">rsample</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>如果使用 ADPCM 编码器构造网络数据包,并且希望协议是无状态的(即能够容忍数据包丢失),则不仅需要传输数据,还应该传输状态。请注意,必须将*初始*状态(传入 <a class="reference internal" href="#audioop.lin2adpcm" title="audioop.lin2adpcm"><code class="xref py py-func docutils literal notranslate"><span class="pre">lin2adpcm()</span></code></a> 的状态)发送给解码器,不能发送最终状态(编码器返回的状态)。如果要使用 <a class="reference internal" href="struct.html#struct.Struct" title="struct.Struct"><code class="xref py py-class docutils literal notranslate"><span class="pre">struct.Struct</span></code></a> 以二进制保存状态,可以将第一个元素(预测值)用 16 位编码,将第二个元素(增量索引)用 8 位编码。</p>
|
||
<p>本 ADPCM 编码器从不与其他 ADPCM 编码器对立,仅针对自身。本开发者可能会误读标准,这种情况下它们将无法与相应标准互操作。</p>
|
||
<p>乍看之下 <code class="xref py py-func docutils literal notranslate"><span class="pre">find*()</span></code> 例程可能有些可笑。它们主要是用于回声消除,一种快速有效的方法是选取输出样本中能量最高的片段,在输入样本中定位该片段,然后从输入样本中减去整个输出样本:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">echocancel</span><span class="p">(</span><span class="n">outputdata</span><span class="p">,</span> <span class="n">inputdata</span><span class="p">):</span>
|
||
<span class="n">pos</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">findmax</span><span class="p">(</span><span class="n">outputdata</span><span class="p">,</span> <span class="mi">800</span><span class="p">)</span> <span class="c1"># one tenth second</span>
|
||
<span class="n">out_test</span> <span class="o">=</span> <span class="n">outputdata</span><span class="p">[</span><span class="n">pos</span><span class="o">*</span><span class="mi">2</span><span class="p">:]</span>
|
||
<span class="n">in_test</span> <span class="o">=</span> <span class="n">inputdata</span><span class="p">[</span><span class="n">pos</span><span class="o">*</span><span class="mi">2</span><span class="p">:]</span>
|
||
<span class="n">ipos</span><span class="p">,</span> <span class="n">factor</span> <span class="o">=</span> <span class="n">audioop</span><span class="o">.</span><span class="n">findfit</span><span class="p">(</span><span class="n">in_test</span><span class="p">,</span> <span class="n">out_test</span><span class="p">)</span>
|
||
<span class="c1"># Optional (for better cancellation):</span>
|
||
<span class="c1"># factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)],</span>
|
||
<span class="c1"># out_test)</span>
|
||
<span class="n">prefill</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\0</span><span class="s1">'</span><span class="o">*</span><span class="p">(</span><span class="n">pos</span><span class="o">+</span><span class="n">ipos</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span>
|
||
<span class="n">postfill</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\0</span><span class="s1">'</span><span class="o">*</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">inputdata</span><span class="p">)</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">prefill</span><span class="p">)</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">outputdata</span><span class="p">))</span>
|
||
<span class="n">outputdata</span> <span class="o">=</span> <span class="n">prefill</span> <span class="o">+</span> <span class="n">audioop</span><span class="o">.</span><span class="n">mul</span><span class="p">(</span><span class="n">outputdata</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">factor</span><span class="p">)</span> <span class="o">+</span> <span class="n">postfill</span>
|
||
<span class="k">return</span> <span class="n">audioop</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">inputdata</span><span class="p">,</span> <span class="n">outputdata</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="mm.html"
|
||
title="上一章">多媒体服务</a></p>
|
||
<h4>下一个主题</h4>
|
||
<p class="topless"><a href="aifc.html"
|
||
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">aifc</span></code> --- 读写 AIFF 和 AIFC 文件</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/audioop.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
>索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="aifc.html" title="aifc --- 读写 AIFF 和 AIFC 文件"
|
||
>下一页</a> |</li>
|
||
<li class="right" >
|
||
<a href="mm.html" title="多媒体服务"
|
||
>上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="mm.html" >多媒体服务</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
|
||
<br />
|
||
This page is licensed under the Python Software Foundation License Version 2.
|
||
<br />
|
||
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
|
||
<br />
|
||
|
||
<br />
|
||
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
<br />
|
||
|
||
最后更新于 12月 09, 2024.
|
||
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
|
||
<br />
|
||
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |