python - 如何绘制一个wav文件

标签 python audio matplotlib

我刚刚用 scipy 读取了一个 wav 文件,现在我想使用 matplotlib 制作文件的绘图,在“y 比例”上我想看到幅度,在“x 比例”上我想看到帧数! 任何帮助我该怎么做? 谢谢!

from scipy.io.wavfile import read
import numpy as np
from numpy import*
import matplotlib.pyplot as plt
a=read("C:/Users/Martinez/Desktop/impulso.wav")
print a

最佳答案

您可以调用wave lib来读取音频文件。

要绘制波形,请使用 matplotlib 中的“plot”函数

import matplotlib.pyplot as plt
import numpy as np
import wave
import sys


spf = wave.open("wavfile.wav", "r")

# Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, "Int16")


# If Stereo
if spf.getnchannels() == 2:
    print("Just mono files")
    sys.exit(0)

plt.figure(1)
plt.title("Signal Wave...")
plt.plot(signal)
plt.show()

你会得到类似的东西:enter image description here

要以秒为单位绘制 x 轴,您需要获取帧速率并除以信号的大小,您可以使用 numpy 中的 linspace 函数创建一个与音频文件大小呈线性间隔的时间向量,最后您可以再次使用 plot 像 plt.plot(Time,signal)

import matplotlib.pyplot as plt
import numpy as np
import wave
import sys


spf = wave.open("Animal_cut.wav", "r")

# Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, "Int16")
fs = spf.getframerate()

# If Stereo
if spf.getnchannels() == 2:
    print("Just mono files")
    sys.exit(0)


Time = np.linspace(0, len(signal) / fs, num=len(signal))

plt.figure(1)
plt.title("Signal Wave...")
plt.plot(Time, signal)
plt.show()

以秒为单位绘制新的 x 轴:

enter image description here

关于python - 如何绘制一个wav文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18625085/

相关文章:

Python Django Time Zone Conversion Incorrect Time for 'US/Pacific' 时区

python - Matplotlib 颜色图范围

iOS RTP 实时音频接收

ios - iOS音频单元将声音剪切到某个频率以上

python - 有没有办法分离 matplotlib 图以便计算可以继续?

具有离散颜色图的 Python 2-D 直方图

python - 使用 Ctrl + A 选择文本框 Selenium RC 中的所有文本

Python:如何深度复制字典列表

java - 读出 Java 中 Mp3 歌曲的时间/长度/持续时间

Python matplotlib : connect two subplot diagrams