微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用pyaudio从音频输入获取特定频率

如何解决使用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 举报,一经查实,本站将立刻删除。