如何使用 Python 将 scipy.signal.spectrogram 反转为音频? [英] How can I reverse a scipy.signal.spectrogram to audio with Python?
本文介绍了如何使用 Python 将 scipy.signal.spectrogram 反转为音频?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有:
import librosa
from scipy import signal
import scipy.io.wavfile as sf
samples, sample_rate = sf.read(args.file)
nperseg = int(sample_rate * 0.001 * 20)
frequencies, times, spectrogram = signal.spectrogram(samples,
sample_rate,
nperseg=nperseg,
window=signal.hann(nperseg))
audio_signal = librosa.griffinlim(spectrogram)
print(audio_signal, audio_signal.shape)
sf.write('test.wav', audio_signal, sample_rate)
然而,这会产生一个(接近)空的声音文件.
However, this produces a (near) empty sound file.
推荐答案
正如@DrSpill 提到的,scipy.io.wav.read 和 scipy.io.wav.write 命令是错误的,也是从 librosa 不正确.应该这样做:
As @DrSpill mentioned, scipy.io.wav.read and scipy.io.wav.write orders were wrong and also the import from librosa was not correct. This should do it:
import librosa
import numpy as np
import scipy.signal
import scipy.io.wavfile
# read file
file = "temp/processed_file.wav"
fs, sig = scipy.io.wavfile.read(file)
nperseg = int(fs * 0.001 * 20)
# process
frequencies, times, spectrogram = scipy.signal.spectrogram(sig,
fs,
nperseg=nperseg,
window=scipy.signal.hann(nperseg))
audio_signal = librosa.core.spectrum.griffinlim(spectrogram)
print(audio_signal, audio_signal.shape)
# write output
scipy.io.wavfile.write('test.wav', fs, np.array(audio_signal, dtype=np.int16))
备注:当我听到它时,生成的文件有一个加速的速度,我认为这是由于您的处理,但经过一些调整它应该可以工作.
Remark: The resulting file had an accelerated tempo when I heard it, I think this is due to your processing but with some tweaking it should work.
一个不错的选择,就是只使用 librosa,如下所示:
A good alternative, would be to only use librosa, like this:
import librosa
import numpy as np
# read file
file = "temp/processed_file.wav"
sig, fs = librosa.core.load(file, sr=8000)
# process
abs_spectrogram = np.abs(librosa.core.spectrum.stft(sig))
audio_signal = librosa.core.spectrum.griffinlim(abs_spectrogram)
print(audio_signal, audio_signal.shape)
# write output
librosa.output.write_wav('test2.wav', audio_signal, fs)
这篇关于如何使用 Python 将 scipy.signal.spectrogram 反转为音频?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文