gpt4 book ai didi

python - 从 pyaudio-stream 获取音频样本作为 float

转载 作者:太空狗 更新时间:2023-10-30 00:36:19 26 4
gpt4 key购买 nike

由于我目前正准备构建一个基于 Raspberry Pi 的设备,用于测量声卡记录的噪声中的一些东西(例如方差),并尝试在 python 中执行此操作,我被困在弄清楚如何获得一个一个音频样本作为 float 用于进一步计算。

我做了什么:
拿起一个 Line-In-to-chinch-adapter 并触摸插头以生成某种测试信号。
记录到例如 Audacity 或 Matlab 显示合理的结果,如

enter image description here

我想得到的:
理想情况下,我想从声卡中获取例如 5 帧和 1024 个样本,并将它们转换为列表、元组或 numpy 数组作为 float 以供进一步计算。

当尝试使用本文末尾的代码使用 python/pyaudio 实现此目的时,我得到了这样的结果:

enter image description here

由于我用 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');

让我知道这是否适合你

关于python - 从 pyaudio-stream 获取音频样本作为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19629496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com