我如何从声音转到频谱,然后再回到 python 中的声音?
How do I go from sound to spectrum then back to sound in python?
我如何获取一个 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]
使用librosa.stft
and librosa.istft
and read the audio file with 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))
可以 return 一个比 foo
稍短且值略有不同的数组。
我如何获取一个 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]
使用librosa.stft
and librosa.istft
and read the audio file with 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))
可以 return 一个比 foo
稍短且值略有不同的数组。