问题描述
我正在尝试分析音频输出(我使用虚拟电缆使音频输出变成了音频输入,并获得了具有其振幅的特定频率。
我设法找到了一些可以找到最大幅度频率的代码。我试图理解fft及其周围的所有内容,但似乎无法弄清楚如何对特定频率进行滤波。 这是我到目前为止所拥有的:
import pyaudio
import numpy as np
# Audio variables
CHUNK = 4096
RATE = 44100
power = 12
# Opens audio stream
p = pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,frames_per_buffer=CHUNK)
while True:
# Reads the data
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
# Calculates the peak of the frequency
peak = np.average(np.abs(data))*2
# Shows the bars for amplitude
bars = "#"*int(50*peak/2**power)
# Calculates the frequency from with the peak ws
data = data * np.hanning(len(data))
fft = abs(np.fft.fft(data).real)
fft = fft[:int(len(fft)/2)]
freq = np.fft.fftfreq(CHUNK,1.0/RATE)
freq = freq[:int(len(freq)/2)]
freqPeak = freq[np.where(fft==np.max(fft))[0][0]]+1
# Shows the peak frequency and the bars for the amplitude
print("peak frequency: %d Hz"%freqPeak + " "+bars)
stream.stop_stream()
stream.close()
p.terminate()
你们中的一个可以帮助我并解释如何对频率进行滤波吗? (如果不清楚我想要什么/我想尝试一下,请病假并尝试更好地解释)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)