python编程实现将文本音频数据还原为wav语音文件
主要功能
主要实现将文本音频数据转为wav文件。
通过我上一个博客的python编程读取wav文件数据得到的txt格式音频数据,再通过此程序实现将之前的文本音频数据再还原为wav语音文件。
程序
程序主要由命令行读入参数和将数据文件转化成合成语音文件所需的数据格式。以及设置采样率,声道数,采样深度等,再合成语音文件。
#文本数据文件转为.wav语音文件
import numpy as np
import sys
import wave #语音文件处理包
import getoptdef main(argv): #定义一个函数try: #首先执行try后的程序,如果输入格式不对,则执行except getopt.GetoptError:后的程序opts, args = getopt.getopt(argv[1:], "i:o:r:d:c:h", ["input", "output","rate=","depth=","channel=","help"])except getopt.GetoptError:print('输入格式错误,应该输入:python txt2wav.py -i text2.txt -o txt2wav.wav -r 16000 -d 2 -c 2\n或者输入格式为:python txt2wav.py -i text2.txt -o txt2wav.wav --rate=16000 --depth=2 --channel=2')#print(' or: python holiday03.py -i wavData(all).txt -o Intro02.wav --rate=16000 --depth=2 --channel=2')sys.exit()for opt, arg in opts:if opt in ("-h", "--help"): #打印帮助print("输入格式为:")print('python txt2wav.py -i text2.txt -o txt2wav.wav -r 16000 -d 2 -c 2')print('或者为:python txt2wav.py -i text2.txt -o txt2wav.wav --rate=16000 --depth=2 --channel=2')print("其中txt2wav.py为程序文件,text2.txt为采用语音转数据得到的语音数据文件,\ntxt2wav.wav为要转为的语音文件名称,-r或--rate代表采样率,-d或者--depth代表采样深度,-c或者--channel代表声道数")sys.exit()elif opt in ("-i", "--input"): #输入为txt数据文件input = argelif opt in ("-o", "--output"): #输出为wav语音文件output = argelif opt in ("-r", "--rate"): #输入的采样频率rate = argrate=int(rate)elif opt in ("-d", "--depth"): #输入的量化位数depth = argdepth = int(depth)elif opt in ("-c", "--channel"): #输入的声道数channel = argchannel = int(channel)'''f = open(input)data_lists = f.readlines() # 读出的是str类型dataset = []# 对每一行作循环for data in data_lists:data1 = data.strip('\n') # 去掉开头和结尾的换行符data2 = data1.split('\t') # 把tab作为间隔符dataset.append(data2) # 把这一行的结果作为元素加入列表datasetf.close()wave_data = np.array(dataset)'''f = open(input) #打开输入文件'''long = f.readlines() #一次性读取文件所有行linenumber = len(long)print("文件行数(即采样点数):",linenumber + 1)'''print("声道数:",channel)print("量化位数:",depth)print("采样频率:", rate)line = f.readline() # 每次读出txt文件中的一行内容data = [] #初始化一个空矩阵i=0while line: #当未读到文件最后时num = list(map(np.short,line.split())) # 用list函数把map函数返回的迭代器遍历展开成一个列表,map(np.short, line.split())表示把切分出的列表的每个值,把它们转成short型,并返回迭代器data.append(num) #将从文件中读到的数据放入列表的两个中括号之间i = i+1line = f.readline()f.close()wavdata = np.array(data) # 将列表数据转换成数组print("文件行数(即采样点数):",i)f = wave.open(output, "wb") #新建并打开wav文件# 配置声道数、量化位数和采样频率f.setnchannels(channel) # 配置声道数f.setsampwidth(depth) # 配置量化位数f.setframerate(rate) # 配置采样频率f.writeframes(wavdata.tostring()) # 将wav_data转换为二进制数据写入文件f.close()if __name__ == "__main__":# sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。main(sys.argv)#运行的命令行
#python txt2wav.py -i text3.txt -o test3(还原).wav -r 16000 -d 2 -c 1
#python txt2wav.py -i text2.txt -o test2(还原).wav -r 16000 -d 2 -c 2
#python txt2wav.py -i English.txt -o English(还原).wav -r 44100 -d 2 -c 1
运行
1 帮助文档:
python txt2wav.py -h
结果
输入格式为:
python txt2wav.py -i text2.txt -o txt2wav.wav -r 16000 -d 2 -c 2
或者为:python txt2wav.py -i text2.txt -o txt2wav.wav --rate=16000 --depth=2 --channel=2
其中txt2wav.py为程序文件,text2.txt为采用语音转数据得到的语音数据文件,
txt2wav.wav为要转为的语音文件名称,-r或--rate代表采样率,-d或者--depth代表采样深度,-c或者--channel代表声道数
2 语音数据转语音文件
python txt2wav.py -i text2.txt -o test2(还原).wav -r 16000 -d 2 -c 2
其中text2.txt
代表语音数据test2(还原).wav
代表还原的语音文件-r
代表采样率,-d
代表采样深度,-c
代表声道数。
"蓝天白云"数据转语音结果
另一种运行方式:
python txt2wav.py -i text2.txt -o test2(还原).wav --rate 16000 --depth 2 --channel 2
结果:
3 "英文发音"数据文件转语音文件
python txt2wav.py -i English.txt -o English(还原).wav -r 44100 -d 2 -c 1
结果
将还原得到的语音wav文件再通过我上一个博客写的程序python编程读取wav文件数据
,对比原语音wav文件转为txt数据文件的结果,同时采用人耳听声音的方式,对比两个语音文件,发现无差别,可知结果正确。
python编程实现将文本音频数据还原为wav语音文件相关推荐
- python 将多个wav语音文件合到一起
(本文已经同步到公众号) ******######******上期关于pcm语音格式文件合成文章:python把千万个语音文件合成一个 pcm格式的音频文件与wav格式还是有很大差别的. wav格式: ...
- VS语音信号处理(2) C语言分段读取WAV语音文件语音数据
VS语音信号处理(2) C语言分段读取WAV语音文件语音数据 前言 一. 工程实现 二. 结果 三. 小结 前言 语音识别相关算法一般在MATLAB上进行仿真验证与实验,在工程上一般还是在VS中进行实 ...
- python编程技术总结_大数据技术学习之Spark技术总结
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合.需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是 ...
- python编程调用设备串口发送数据
为了通过python编程控制串口发送数据给单片机,编写此程序 使用serial模块完成串口的读取和数据的收发 重点掌握以下几个api的使用方法: 读取串口设备列表:list(serial.tools. ...
- 音频数据文件格式(PCM,WAV,MIDI)简记
PCM(Pulse Code Modulation):脉冲编码调制 把声源数据按一定的频率进行脉冲调制进行存储的数据格式,简单来说就是对模拟声音信号的数字 转换. WAV WAV是一种无损音频数据格式 ...
- Python爬取网页中表格数据并导出为Excel文件
本文使用自己创建的网页进行模拟和演示,在爬取真实网页时,分析网页源代码然后修改代码中的正则表达式即可. 假设某网页源代码为: 在Hbuilder中单击菜单"运行",选择使用Goog ...
- 自动驾驶模拟器Carla之python编程-(3)获取汽车摄像头数据
在上节我们已经创建了一个可以形式的特斯拉model3,在本节,我们将给汽车上添加摄像头. 了解更多有关各种传感器以及如何使用它们的信息:Carla Sensors.现在,我将仅展示如何使用RGB相机. ...
- Python编程基础:计算给定数据的几何平均数,即n个数字连乘结果的n次方根
代码: data_test = [1, 2, 3, 4, 5]def geometric_mean(data): # 计算几何平均数total = 1for i in data:total *= ir ...
- python编程:合并文本_利用列表或字典将两个通讯录文本合并-7
源码: #利用字符串和列表将两个通讯录文本合并为一个文本 def main(): ftele1=open('TeleAddressBook.txt','rb') ftele2=open('EmailA ...
最新文章
- 自动化部署必备技能—定制化RPM包[转载]
- ObservableCollection排序
- 104.全排列(深搜)搜索与回溯
- sh: 0: getcwd() failed: No such file or directory解决
- java 实现中文排序,Java自定义比较器实现中文排序
- assets bitmap 转_图片文件和Bitmap之间的转换
- C程序-将华氏温度转换为摄氏和开氏
- Python之父Guido在最近一次采访的最后说了啥
- mysql严格区分大小写吗_MySQL是否区分大小写
- Arduino 多LED灯控制
- 【Seen看世界】:像高智商人群看齐
- 检测到目标站点存在javascript框架库漏洞
- Centos7 连接wifi (PEAP)
- oracle dul for windows 一键打开,oracle 数据恢复
- Linux系统操作MySql常用命令
- Linux C/C++ 对于SIGBUS、SIGSEGV等崩溃异常捕获实现
- 完全免费的OCR文字识别软件
- BZOJ1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
- Leecode 1658. 将 x 减到 0 的最小操作数 滑动窗口
- C# Websocket连接(wss)
热门文章
- python中的模块_Python中的模块 | 萧小寒
- Map训练(三国武力值)
- 消息队列kafka组件的安装及使用
- 敏捷持续集成工具CruiseControl
- [图像分割综述] Image Segmentation Using Deep Learning: A Survey
- Android 对整张图片打马赛克
- iOS面试:要点梳理
- uniapp引入外链
- 浙江大学计算机学院研究生论文盲审,浙江大学2019春季研究生学位论文评审及学位授予的通知...
- 基于SSM+MySQL+JSP+BootStrap的停车场管理系统