如何解决使用pyaudio从音频输入获取特定频率
我正在尝试分析音频输出(我使用虚拟电缆使音频输出变成了音频输入,并获得了具有其振幅的特定频率。
我设法找到了一些可以找到最大幅度频率的代码。我试图理解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 举报,一经查实,本站将立刻删除。