音频处理三:(音频数据转wav文件)

程序三:音频数据转wav文件

完整工程文件:

链接:https://pan.baidu.com/s/1dcoTGhIeDxsRz-RUr2Paxw 
提取码:jy48

一:需求分析

文本音频数据转wav文件,并进行测试

txt2wav  -i wavtxt.txt -o yyy.wav -rate 16000 -depth 16

将本地的采样数据.txt读出,重新生成wav文件,需要考虑单声道和双声道

二:参考知识

1.所需文件知识

本地.txt信息

lanTian2.txt lanTian2.wav的采样值 
BAC009S0003W0121.txt BAC009S0003W0121.wav的采样值

语音信息

lanTian.mav 声道数1 采样率8000 量化位数2
lanTian2.mav 声道数2 采样率16000 量化位数2
BAC009S0003W0121.wav 声道数1 采样率16000 量化位数2
2.sys 模块

在 Python 中,sys 模块是一个非常常用且十分重要的模块,通过模块中的 sys.argv 就可以访问到所有的命令行参数,它的返回值是包含所有命令行参数的列表(list),

参数个数: len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[2]

三:python代码

holiday03.py
import wave
import numpy as np
import sys
import getopt


def main(argv):


    try:

        opts, args = getopt.getopt(argv, "hi:o:r:d:c:", ["help", "input=", "output=","rate=","depth=","channel="])
    except getopt.GetoptError:
        print('Error: python holiday03.py -i wavData(all).txt -o Intro02.wav -r 16000 -d 2 -c 2')
        print('   or: python holiday03.py -i wavData(all).txt -o Intro02.wav --rate=16000 --depth=2 --channel=2')
        sys.exit(2)

    # 处理 返回值options是以元组为元素的列表。
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print("为真实还原,输入的参数尽量和原语音一致")
            print('python holiday03.py -i wavData(all).txt -o Intro02.wav -r 16000 -d 2 -c 2')
            print('or: python tholiday03.py -i wavData(all).txt -o Intro02.wav --rate=16000 --depth=2 --channel=2')
            sys.exit()
        elif opt in ("-i", "--input"):
            input = arg
        elif opt in ("-o", "--output"):
            output = arg
        elif opt in ("-r", "--rate"):
            rate = arg
            rate=int(rate)
        elif opt in ("-d", "--depth"):
            depth = arg
            depth = int(depth)
        elif opt in ("-c", "--channel"):
            channel = int(arg)

    # wavData(all).txt
    # wavData(single).txt
    # https://blog.csdn.net/qq_35451572/article/details/79663356
    f = open(input)
    line = f.readline()
    data_list = []
    while line:
        #把切分出的列表的每个值, 把它们转成np.short型, 并返回迭代器
        num = list(map(np.short, line.split()))  # np.short
        #用list函数把map函数返回的迭代器遍历展开成一个列表
        data_list.append(num)
        line = f.readline()
    f.close()
    wave_data = np.array(data_list)

    # 打开WAV文档
    f = wave.open(output, "wb")

    # 配置声道数、量化位数和取样频率
    f.setnchannels(channel)  # 配置声道数
    f.setsampwidth(depth)  # 配置量化位数
    #f.setframerate(framerate)  # 配置取样频率
    f.setframerate(rate)  # 配置取样频率
    # f.setnframes(38000)

    # 将wav_data转换为二进制数据写入文件
    f.writeframes(wave_data.tostring())
    f.close()


if __name__ == "__main__":
    # sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。
    main(sys.argv[1:])

#python holiday03.py -i lanTian2.txt -o lanTian2(还原).wav -r 16000 -d 2 -c 2
#python holiday03.py -i BAC009S0003W0121.txt -o BAC009S0003W0121(还原).wav -r 16000 -d 2 -c 1

四:实现结果

1.请求帮助
python holiday03.py -h

在这里插入图片描述

2.单声道语音还原
python holiday03.py -i BAC009S0003W0121.txt -o BAC009S0003W0121(还原).wav -r 16000 -d 2 -c 1
3.双声道语音在这里插入图片描述还原
python holiday03.py -i lanTian2.txt -o lanTian2(还原).wav -r 16000 -d 2 -c 2

在这里插入图片描述

五:结果对比

还原

python holiday03.py -i lanTian2.txt -o lanTian2(还原).wav -r 16000 -d 2 -c 2

在这里插入图片描述

五:结果对比

将还原的语音跟以前的语音播放对比,结果为一致

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐维康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值