擅长:python、mysql、java
<p>您的问题来自这样一个事实,即wave库只是提供原始二进制数据(以字符串的形式)。在</p>
<p>您可能需要使用<code>self.wf.getparams()</code>检查数据的形式。这将返回<code>(nchannels, sampwidth, framerate, nframes, comptype, compname)</code>。如果您有1个通道,采样宽度为2,并且没有压缩(相当常见的波形类型),您可以使用以下方法(将numpy作为np导入)来获取数据:</p>
<pre><code>byteList = np.fromstring(self.soundBytes,'<h')
</code></pre>
<p>这将返回一个包含数据的numpy数组。你不需要循环。如果你有一个不同的样本宽度,在第二个参数中需要一些不同的东西。我用一个简单的<code>.wav</code>文件进行了测试,<code>plot(byteList); show()</code>(iPython中的pylab模式)可以工作。在</p>
<p>请参阅<a href="https://stackoverflow.com/questions/2060628/how-to-read-wav-file-in-python">Reading *.wav files in Python</a>以获取执行此操作的其他方法。在</p>
<h2>无核版本</h2>
<p>如果您需要避免numpy,您可以:</p>
^{pr2}$
<p>这和以前一样(用<code>plot(byteList); show()</code>测试)h'表示短签名。<code>len</code>等工作。这确实是一次导入所有的wav文件,但又是一次。wav通常很小。不总是这样。在</p>