python编程读取wav文件数据

主要功能

命令行传参,输入语音文件,对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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值