主要功能
命令行传参,输入语音文件,对wav文件进行解析,得到语音数据,同时将数据保存到命令行输入的文件中,也可将数据打印到屏幕上。
将输入文件xxx.wav语音文件的采样数据读出保存在文本文件yyy.txt中。如无-o
项则输出到屏幕上。如果是双声道数据,输入-l,打印左声道数据,输入-r,打印右声道数据,如果输入-a或者不输入,打印双声道数据。如果为单声道数据,则直接打印。使用python编程实现。
程序
#将wav语音文件转化为数据文件
# -*- coding: utf-8 -*-
import numpy as np
import sys
import wave #语音文件处理包
import getopt
def main(argv): #定义一个函数
try: #首先执行try后的程序,如果输入格式不对,则执行except getopt.GetoptError:后的程序
opts, args = getopt.getopt(argv[1:], "i:o:lrah", ["input", "output","left","right","all","help"]) #命令行输入参数
except getopt.GetoptError:
print('输入参数错误,输入格式为:python wav2txt.py -i test.wav -o text3.txt -l/-r/-a,\n其中wav2txt.py为程序文件名称,test.wav为语音文件,text3.txt为.wav文件的数据保存到的文件,\n-l/-r/-a分别为左声道,右声道,双声道,对于单声道语音文件,最后这部分没必要加,但对双声道数据则可以分别保存左声道,右声道,或两个声道的数据')
sys.exit()
for opt, arg in opts:
if opt in ("-h", "--help"): #打印帮助
#test.wav为单声道语音文件,test2.wav为双声道语音文件
print('单声道:python wav2txt.py -i test.wav -o text3.txt')
print('打印双声道的左声道数据:python wav2txt.py -i test2.wav -o text3.txt -l')
print('打印双声道的右声道数据:python wav2txt.py -i test2.wav -o text3.txt -r')
print('打印双声道的数据:python wav2txt.py -i test2.wav -o text3.txt或者python wav2txt.py -i test2.wav -o text3.txt -a')
print('无-o项时输出到屏幕上:python wav2txt.py -i test2.wav' )
sys.exit()
#判断双声道的且输入参数中含有-l/-r/-a等的情况,包括左声道,右声道,和双声道
elif opt in ("-i", "--input"):
input = arg
#当未输入"-o"项时,将数据打印到屏幕上,【注意】:因语音文件数据较多,且每行只打印一个,谨慎使用
f = wave.open(input, 'rb') # 打开语音文件
params = f.getparams() # 得到语音参数
nchannels, sampwidth, framerate, nframes = params[:4] # 分别为声道数,量化位数,采样频率,采样点数
# print("wav params is :", params)
# print("声道数=", nchannels, "\t量化位数=", sampwidth, "\t采样频率=", framerate, "\t采样点数=", nframes)
data = f.readframes(nframes)
# 将字符串转换为数组,得到一维的short类型的数组
# data = np.fromstring(data, dtype=np.short)
data