У меня есть входящий аудиопоток через микрофон, который читает pyaudio, я выполняю расчеты БПФ с этими данными, и я хотел бы построить данные амплитуды БПФ на оси Y и данные частоты БПФ на оси Xи обновите его (например, 20 к / с), в основном, чтобы выглядеть так (https://www.youtube.com/watch?v=Tu8p2pywJAs&t=93s), но с низкими частотами слева и более высокими частотами справа.Код, который у меня есть, настолько, насколько у меня есть
Я новичок в Python, не говоря уже о кодировании любой формы или формы, поэтому любая помощь приветствуется, но, пожалуйста, попробуйте и держите ее в понятных терминах, если япрошу уточнить, пожалуйста, сделайте это с уважением, большое спасибо всем, кто дает мне свое время!
import pyaudio
import numpy as np
import time
import matplotlib.animation as animation
import matplotlib.pyplot as plt
from matplotlib import style
pa = pyaudio.PyAudio()
callback_output = []
def callback(in_data, frame_count, time_info, flag):
audio_data = np.fromstring(in_data, dtype=np.int16)
callback_output.append(audio_data)
return None,pyaudio.paContinue
stream = pa.open(format=pyaudio.paInt16,
channels=1,
rate=44100,
output=False,
input=True,
stream_callback=callback)
stream.start_stream()
fig = plt.gcf()
fig.show()
fig.canvas.draw()
while stream.is_active():
fft_data = np.fft.fft(callback_output)
fft_freq = np.fft.fftfreq(len(fft_data))
plt.plot(fft_freq,fft_data)
plt.xlim(min(fft_freq),max(fft_freq))
fig.canvas.draw()
plt.pause(0.05)
fig.canvas.flush_events()
fig.clear()
stream.close()
pa.terminate()