У меня есть файл .wav
(в этом примере он называется "piano2.wav").
Я хочу найти спектральный центр тяжести в Python.
используя кодиз другого поста здесь у меня есть эта функция:
import numpy as np
from scipy.io.wavfile import read
def spectral_centroid(x, samplerate=44100):
magnitudes = np.abs(np.fft.rfft(x))
length = len(x)
freqs = np.abs(np.fft.fftfreq(length, 1.0/samplerate)[:length//2+1])
return np.sum(magnitudes*freqs) / np.sum(magnitudes)
Я читаю файл WAV, используя scipy.io.wavfile.read в массив Numpy, а затем пытаюсь передать его в вышеуказанную функцию
a=read("piano2.wav")
print("Spectral centroid is " + spectral_centroid(a[1]))
Это ошибка, которую я получаю
File "test.py", line 20, in <module>
print("Spectral centroid is " + spectral_centroid(a[1]))
File "test.py", line 8, in spectral_centroid
return np.sum(magnitudes*freqs) / np.sum(magnitudes)
ValueError: operands could not be broadcast together with shapes (302712,2) (151357,)