pyhton 画出音频文件的波形图和频谱图
import wave
import struct
import numpy as np
import matplotlib.pyplot as plt
def oscillogram_spectrum(audio_path):
"""
画出音频文件audio_path的声波图和频谱图
:param audio_path:音频文件路径
:return:
"""
filename = audio_path
wavefile = wave.open(filename, 'r')
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()
print("channel", nchannels)
print("sample_width", sample_width)
print("framerate", framerate)
print("numframes", numframes)
y = np.zeros(numframes)
for i in range(numframes):
val = wavefile.readframes(1)
left = val[0:2]
v = struct.unpack('h', left)[0]
y[i] = v
Fs = framerate
time = np.arange(0, numframes) * (1.0 / framerate)
plt.subplot(211)
plt.plot(time, y)
plt.subplot(212)
plt.specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
plt.show()
if __name__ == '__main__':
audio_path = '1.wav'
oscillogram_spectrum(audio_path)
import wave
import matplotlib.pyplot as plt
import numpy as np
import os
f = wave.open('play.wav', 'rb')
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
print("nchannels:", nchannels)
print("sampwidth:", sampwidth)
print("framerate:", framerate)
print("nframes:", nframes)
strData = f.readframes(nframes)
print("strData:", strData)
waveData = np.fromstring(strData, dtype=np.int16)
print("waveData:", waveData)
time = np.arange(0, nframes) * (1.0 / framerate)
plt.figure(figsize=(6, 3))
plt.plot(time, waveData)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Single channel wavedata")
plt.grid('on')
plt.show()
import librosa, librosa.display
import matplotlib.pyplot as plt
file = 'play.wav'
signal, sr = librosa.load(file, sr=22050)
librosa.display.waveplot(signal, sr=sr)
plt.xlabel('time')
plt.ylabel('amplitude')
plt.show()