Skip to content Skip to sidebar Skip to footer

How Can I Reverse A Scipy.signal.spectrogram To Audio With Python?

I have: 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, t

Solution 1:

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.

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)
 

Solution 2:

librosa.output was removed. It is no longer providing its deprecated output module. Instead try soundfile.write:

import numpy as np
import soundfile as sf
sf.write('stereo_file.wav', np.random.randn(10, 2), 44100, 'PCM_24')

#Per your code you could try:
sf.write('test.wav', audio_signal, sample_rate, 'PCM_24')

Post a Comment for "How Can I Reverse A Scipy.signal.spectrogram To Audio With Python?"