我刚刚用 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()
你会得到类似的东西:
要以秒为单位绘制 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 轴:
关于python - 如何绘制一个wav文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18625085/