python - 吉他音符的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
解决方案
推荐阅读
- javascript - 在Node js中的功能之外无法访问外部IP
- javascript - JavaScript 中用于自定义构造函数的模块模式
- javascript - 如果数组元素存在于任何其他数组中,则禁用该数组元素
- r - 创建一个函数/forloop,将每个 x 与所有 y 进行比较
- java - 批量更新:connection.commit() 在最后,使用 setAutoCommit(false),但数据不会回滚
- jquery - Select2 未发送远程参数
- google-chrome - 三 js Texture Loader 无法加载纹理
- angular - 如何返回 CustomType 而不是 HttpEvent
来自 HTTP GET 调用? - hyperlink - Discord Python Bot - Bot 的消息不会自动嵌入链接/图像/等
- javascript - React JS 中 MaterialUI 的奇怪 setState 行为