我如何在 python 中从声音到频谱然后回到声音?

Bor*_*ris 4 python audio fft

我如何获取一个 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]
Run Code Online (Sandbox Code Playgroud)

Bor*_*ris 5

使用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
Run Code Online (Sandbox Code Playgroud)

我正在使用,audio[:len(reconstructed_audio)]因为信息在转换中丢失了。istft(stft(foo))可以返回一个foo比值略短且值略有不同的数组。