如何在Python中将声音转换为频谱,再将其转换回声音?

5

我该如何将一个wav文件转换成每几毫秒的频率强度数组,对其进行处理,然后再将新的数组转换回wav文件?

是否有类似下面这样的库?

wav_data = library.read_wav('aoeu.wav') # [0, 3, 201, ... etc]

spectrum = library.get_spectrum(wav_data)  
# [[0, 0, 0, .2, 0, .7, ... etc], 
#  [0, 0, 0, .3, 0, .8, ... etc],
#  ... etc] 

spectrum[:, 0] = 0 # kill the lowest frequency (assuming spectrum is a numpy array)

library.spectrum_to_wav(spectrum) # [0, 3, 201, ... etc]
1个回答

8

使用librosa.stftlibrosa.istft函数,并使用librosa.load函数读取音频文件。

import librosa

audio, sample_rate = librosa.load('song.wav')

spectrum = librosa.stft(audio)
reconstructed_audio = librosa.istft(spectrum)

sum(audio[:len(reconstructed_audio)] - reconstructed_audio)  # very close to 0

我正在使用audio[:len(reconstructed_audio)],因为变换过程中信息会丢失。istft(stft(foo))可能返回一个略短并且数值稍有不同的数组,因此我选择了前者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接