首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python将scipy.signal.spectrogram转换为音频?

如何使用Python将scipy.signal.spectrogram转换为音频?
EN

Stack Overflow用户
提问于 2020-02-24 14:05:16
回答 2查看 3.4K关注 0票数 4

我有:

代码语言:javascript
复制
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)

但是,这会产生(接近)空声音文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-27 11:32:37

正如@DrSpill所提到的,scipy.io.wav.readscipy.io.wav.write订单是错误的,来自利布罗萨的导入也是不正确的。这应该可以做到:

代码语言:javascript
复制
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))

备注:当我听到结果文件时,的速度加快了,我认为这是由于您的处理,但是经过一些调整,它应该能工作。

一个很好的选择是只使用利布罗萨,如下所示:

代码语言:javascript
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2021-01-15 17:22:45

librosa.output为删除。它不再提供不推荐的输出模块。相反,尝试soundfile.write

代码语言:javascript
复制
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')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60377585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档