gpt4 book ai didi

python - 如何将 .wav 文件转换为 python3 中的频谱图

转载 作者:太空狗 更新时间:2023-10-29 17:10:10 24 4
gpt4 key购买 nike

我正在尝试从 python3 中的 .wav 文件创建频谱图。

我希望最终保存的图像看起来类似于此图像:

我尝试了以下方法:

这个堆栈溢出帖子: Spectrogram of a wave file

这篇文章在某种程度上起到了作用。运行后得到

但是,此图不包含我需要的颜色。我需要一个有颜色的频谱图。我试图修改这段代码以尝试添加颜色,但是在花费大量时间和精力之后,我无法弄清楚!

然后我尝试了 this教程。

当我尝试运行此代码并出现错误 TypeError: 'numpy.float64' object cannot be interpreted as an integer 时,此代码崩溃(第 17 行)。

第 17 行:

samples = np.append(np.zeros(np.floor(frameSize/2.0)), sig)

我尝试通过转换来修复它

samples = int(np.append(np.zeros(np.floor(frameSize/2.0)), sig))

我也试过了

samples = np.append(np.zeros(int(np.floor(frameSize/2.0)), sig))    

然而,这些最终都没有奏效。

我真的很想知道如何将我的 .wav 文件转换为带颜色的频谱图,以便我可以分析它们!任何帮助将不胜感激!!!!!!

如果您希望我提供有关我的 python 版本、我尝试过的内容或我想要实现的目标的更多信息,请告诉我。

最佳答案

使用scipy.signal.spectrogram

import matplotlib.pyplot as plt
from scipy import signal
from scipy.io import wavfile

sample_rate, samples = wavfile.read('path-to-mono-audio-file.wav')
frequencies, times, spectrogram = signal.spectrogram(samples, sample_rate)

plt.pcolormesh(times, frequencies, spectrogram)
plt.imshow(spectrogram)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

在尝试执行此操作之前,请确保您的 wav 文件是单声道(单声道)而不是立体声(双声道)。我强烈建议阅读 https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.signal.spectrogram.html 上的 scipy 文档。 .

plt.pcolormesh 放在 plt.imshow 之前似乎可以解决一些问题,正如@Davidjb 所指出的,如果出现解包错误,请按照@cgnorthcutt 的步骤操作下面。

关于python - 如何将 .wav 文件转换为 python3 中的频谱图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com