首页 > 解决方案 > 吉他音符的Python FFT频率

问题描述

我一直在尝试制作一个程序来确定吉他弹奏的音符。当我将此代码与正弦波(例如 440hz)一起使用时,它可以正常工作并正确恢复频率。但是,当我给它播放吉他演奏一个音符的音频时,结果就很差了。例如,我在吉他上弹奏低 E 弦,预期为 82.41,但我得到 18947.25。我是数字信号处理的新手,所以我可能会遗漏一些我不知道的基本知识。任何帮助将是一个很大的帮助。

干杯!

from scipy import fftpack
from scipy.io import wavfile as scipy_wav
import numpy as np

def get_frequency(filename):
    sample_rate, data = scipy_wav.read(filename)

    fft_out = fftpack.fft(data)
    freqs = np.fft.fftfreq(len(fft_out))

    # Find the peak in the coefficients
    idx = np.argmax(np.abs(fft_out))

    freq = freqs[idx]
    freq_in_hertz = abs(freq * sample_rate)
    return freq_in_hertz

标签: pythonaudiosignal-processingfft

解决方案


推荐阅读