Я пытался создать программу, чтобы определить, какую ноту играет гитара. Когда я использую этот код с синусоидальной волной, например 440 Гц, он работает и возвращает частоту правильно. Однако, когда я даю аудио ноты гитары, играющей одну ноту, результат уже далеко. Например, я играю на гитаре с низкой 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