想用Python读取wav文件?这么做!
一句话总结:国外大神各种python读写wav的库都试过了,我跑了下他的代码,推荐soundfile,scipy,ewave,不推荐Pyhon官方库wave
不推荐:
不要用官方库(wave)!!!垃圾!!!不支持读float的wav!!!(但是如果不想装第三方库而且不用读float的wav还是可以的,如下代码,读一个16bit的int的wav还是很轻松)
import wave
import matplotlib.pyplot as plt
import numpy as np
with wave.open('data/test_wav_pcm16.wav') as w:
framerate = w.getframerate()
frames = w.getnframes()
channels = w.getnchannels()
width = w.getsampwidth()
print('sampling rate:', framerate, 'Hz')
print('length:', frames, 'samples')
print('channels:', channels)
print('sample width:', width, 'bytes')
data = w.readframes(frames)
np.frombuffer(data, dtype='B')
sig = np.frombuffer(data, dtype='<i2').reshape(-1, channels)
plt.plot(sig)
plt.show()
推荐1:第三方库-soundfile,安装方法:pip install soundfile
支持16bit,24bit的整数型wav!!
支持32位float的wav!!
import soundfile as sf
import matplotlib.pyplot as plt
# 读取16bit整数wav
sig, samplerate = sf.read('data/test_wav_pcm16.wav')
f1 = plt.figure(1)
plt.plot(sig)
# 读取24bit整数wav
sig, samplerate = sf.read('data/test_wav_pcm24.wav')
f2 = plt.figure(2)
plt.plot(sig)
# 读取32bit浮点数wav
sig, samplerate = sf.read('data/test_wav_float32.wav')
f3 = plt.figure(3)
plt.plot(sig)
plt.show()
推荐2:第三方库-scipy,安装方法:pip install scipy
支持16bit的整数型wav!!
支持32位float的wav!!
from scipy.io import wavfile
import matplotlib.pyplot as plt
# 读取16bit整数wav
fs, sig = wavfile.read('data/test_wav_pcm16.wav')
print("sampling rate = {} Hz, length = {} samples, channels = {}".format(fs, *sig.shape))
print(sig)
f1 = plt.figure(1)
plt.plot(sig)
# 读取32bit浮点数wav
fs, sig = wavfile.read('data/test_wav_float32.wav')
f2 = plt.figure(2)
plt.plot(sig)
plt.show()
推荐3:第三方库-ewave,安装方法:pip install ewave
支持16bit的整数型wav!!
支持32位float的wav!!
import ewave
import matplotlib.pyplot as plt
# 读取16bit整数wav
with ewave.open('data/test_wav_pcm16.wav') as w:
print("samplerate = {0.sampling_rate} Hz, length = {0.nframes} samples, "
"channels = {0.nchannels}, dtype = {0.dtype!r}".format(w))
data = w.read()
f1 = plt.figure(1)
plt.plot(data)
# 读取32bit浮点数wav