在Raspi上的python中使用pyaudio的实时频谱分析仪

时间:2017-12-14 13:44:11

标签: numpy matplotlib raspberry-pi pyaudio

我正在尝试使用插入我的raspi的USB麦克风获取实时音频的fft图。我希望能够在通过fft图检测到特定频率时激活LED。到目前为止,我试图获得一个现场声波,但我遇到了麻烦。我已关注此视频:https://www.youtube.com/watch?v=AShHJdSIxkY&lc=z22efhti3uaff52pv04t1aokgg3rlotuia3kw5mpcsnubk0h00410.1510779722591217

我已经尝试将块大小更改为更大的值和更低的值但是没有成功。由于某种原因,我得到-9981错误但是打印错误需要很长时间。没有显示情节。我甚至尝试超频我的Raspberry Pi,看看它是否有效,但它仍然不起作用。

我想知道是否有其他人在他们的Pi上尝试了类似的东西,如果有可能,或者我不得不使用除pyaudio之外的其他软件包。

这是我的python代码:

import pyaudio
import struct
import numpy as np
import matplotlib.pyplot as plt




CHUNK = 100000
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100

p = pyaudio.PyAudio()
stream = p.open(
    format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input = True,
    output = True,
    frames_per_buffer = CHUNK,
    start = True
    )

fig, ax = plt.subplots()
x = np.arange(0, 2 * CHUNK, 2)
line, = ax.plot(x, np.random.rand(CHUNK))

ax.set_ylim(0, 255)
ax.set_xlim(0, CHUNK)


while True:
    data = stream.read(CHUNK)
    data_int = np.array(struct.unpack(str(CHUNK*2) + 'B', data), dtype='b')[::2] + 127
    line.set_ydata(data_int)
    fig.canvas.draw()
    fig.canvas.flush_events()

1 个答案:

答案 0 :(得分:0)

显示添加:
plt.show(block=False)

ax.set_xlim(0, CHUNK)

但是使用rpi,你必须将usb声卡配置为默认卡