生成文件列表
采用递归方式读取指定目录下的文件列表
import os
def get_filelist(path, list):
list_dir = os.listdir(path)
for i in list_dir:
sub_dir = os.path.join(path, i)
if os.path.isdir(sub_dir):
get_filelist(sub_dir, list)
else:
list.append(sub_dir)
读取wav文件
单通道 (matlab采用audioread实现)
读取音频的方式很多,主要要利用好数据量转换函数np.fromstring或np.frombuffer
import wave
import matplotlib.pyplot as plt
import numpy as np
import os
filepath = "./data/" #添加路径
filelist= os.listdir(filepath) #得到文件夹下的所有文件名称
f = wave.open(filepath+filelist[1],'rb')
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
strData = f.readframes(nframes) #读取音频,字符串格式
waveData = np.fromstring(strData,dtype=np.int16) #将字符串转化为int
waveData = waveData*1.0/(max(abs(waveData))) #wave幅值归一化
# plot the wave
time = np.arange(0,nframes)*(1.0 / framerate)
plt.plot(time,waveData)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Single channel wavedata")
plt.grid('on')#标尺,on:有,off:无。
##另一种语音读取方式
f = open(filepath+filelist[1],'rb')
bufferData = f.read()
waveData = np.frombuffer(bufferData, dtype=np.int16)
结果图:
多通道
这里通道数为3,主要借助np.reshape一下,其他同单通道处理完全一致
import wave
import matplotlib.pyplot as plt
import numpy as np
import os
filepath = "./data/" #添加路径
filelist= os.listdir(filepath) #得到文件夹下的所有文件名称
f = wave.open(filepath+filelist[0],'rb')
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
strData = f.readframes(nframes) #读取音频,字符串格式
waveData = np.fromstring(strData,dtype=np.int16)#将字符串转化为int
waveData = waveData*1.0/(max(abs(waveData))) #wave幅值归一化
waveData = np.reshape(waveData,[nframes,nchannels])
f.close()
# plot the wave
time = np.arange(0,nframes)*(1.0 / framerate)
plt.figure()
plt.subplot(5,1,1)
plt.plot(time,waveData[:,0])
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Ch-1 wavedata")
plt.grid('on')#标尺,on:有,off:无。
plt.subplot(5,1,3)
plt.plot(time,waveData[:,1])
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Ch-2 wavedata")
plt.grid('on')#标尺,on:有,off:无。
plt.subplot(5,1,5)
plt.plot(time,waveData[:,2])
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Ch-3 wavedata")
plt.grid('on')#标尺,on:有,off:无。
plt.show()
效果图: