由于我目前正准备构建一个基于 Raspberry Pi 的设备,用于测量声卡记录的噪声(例如方差)中的一些内容,并尝试在 python 中执行此操作,所以我陷入了如何获取音频样本的困境中用于进一步计算的浮点数。
我做了什么:
使用线路输入适配器并触摸插头以生成某种测试信号。
记录到 Audacity 或 Matlab 等会显示出合理的结果,例如
我想得到什么:
理想情况下,我想从声卡获取例如 5 帧 á 1024 个样本,并将它们转换为列表、元组或 numpy 数组作为浮点数以进行进一步计算。
当尝试使用 python/pyaudio 和本文末尾的代码来实现此目的时,我得到了这样的结果:
由于我用 python 得到的值似乎与 Matlab(和其他)中的值相差大约两倍,所以我认为我已经监督了一些事情或做错了一些事情。
我认为我在 struct.unpack 区域的某个地方犯了一个错误,但无法弄清楚具体位置或原因。
我想请您帮忙指出错误在哪里以及我做错了什么。
用于获取一些样本并绘制它们的小测试代码:
import pyaudio
import struct
import matplotlib.pyplot as plt
FORMAT = pyaudio.paFloat32
SAMPLEFREQ = 44100
FRAMESIZE = 1024
NOFFRAMES = 220
p = pyaudio.PyAudio()
print('running')
stream = p.open(format=FORMAT,channels=1,rate=SAMPLEFREQ,input=True,frames_per_buffer=FRAMESIZE)
data = stream.read(NOFFRAMES*FRAMESIZE)
decoded = struct.unpack(str(NOFFRAMES*FRAMESIZE)+'f',data)
stream.stop_stream()
stream.close()
p.terminate()
print('done')
plt.plot(decoded)
plt.show()
尝试使用“numpy.fromstring”函数替换“struct.unpack”:
import numpy
stream = p.open(format=FORMAT,channels=1,rate=SAMPLEFREQ,input=True,frames_per_buffer=FRAMESIZE)
data = stream.read(NOFFRAMES*FRAMESIZE)
decoded = numpy.fromstring(data, 'Float32');
让我知道这是否适合你
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)