赞
踩
原理:
先写入文本,再通过百度语音引擎接口将文本合成指定的音频,然后保存到mp3文件。再通过
pydub第三方库将mp3文本转化为wav文件,然后利用wav库和pydub播放wav音频
写入文本案例:
- text="测试文本1 2 3 4 5 6 7"
- f = open("audiofile.txt", "w+")
- f.write(text)
- f.close()
总的代码包含两个文件,一个是音乐格式转换.py,另一个是百度语音引擎.py
其中音乐格式转换文件依赖ffmgeg.根据代码运行提示自行安装
环境支持:本人用的python3.7.3 32位版本,windows10 本程序不支持linux,其他windows版本及python版本自测
本程序依赖以下第三方库,建议提前安装好:
- python32 -m pip install pyaudio
- python32 -m pip install pydub
- python32 -m pip install baidu-aip
总的代码:
音乐格式转换.py
- #!/usr/bin/env python3
- # _*_ coding: utf-8 _*_
- # File : 音乐格式转换.py
- # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
- # Date : 2019/6/3
-
- import sys
- import os
- pypath = sys.executable
- print(pypath)
-
-
- def pipsetup(packname):
- packcmd = "%s -m pip install %s" % (pypath, packname)
- try:
- p = os.popen(packcmd)
- except UnicodeDecodeError:
- print("返回文本的格式编码有问题!")
- try:
- print(p.read()) # 执行cmd并得到返回的字符串
- except UnicodeDecodeError:
- print("读取返回值失败,大概意思是编码不对,不过已经执行完毕了")
-
-
- def starttool(mp3path, output, form="wav"):
- if os.path.exists("ffmpeg.exe") and os.path.exists(
- "ffplay.exe") and os.path.exists("ffprobe.exe"):
- try:
- from pydub import AudioSegment
- except BaseException:
- print("本地不存在音乐处理支持库,开始安装pydub...")
- pipsetup("pydub")
- from pydub import AudioSegment
- # AudioSegment.converter = r"D:\ffmpeg\bin\ffmpeg.exe"
-
- def trans_mp3_to_wav(filepath):
- if os.path.exists(mp3path):
- song = AudioSegment.from_mp3(filepath)
- print(song)
- song.export("res/%s" % output, format=form)
- else:
- print("目标文件不存在!")
- trans_mp3_to_wav(mp3path)
- else:
- csdn_url = "https://blog.csdn.net/qq_32394351/article/details/90748900"
- ext_mpeg = os.path.exists("ffmpeg.exe")
- ext_play = os.path.exists("ffplay.exe")
- ext_probe = os.path.exists("ffprobe.exe")
- print("请将ffmpeg.exe,ffplay.exe,ffprobe.exe程序放到本文件同目录后再执行!")
- print("不会操作请访问作者csdn教程查看:%s" % csdn_url)
- print(
- "文件检测:ffmpeg.exe:%s,ffplay.exe:%s,ffprobe.exe:%s" %
- (ext_mpeg, ext_play, ext_probe))
-
-
- if __name__ == '__main__':
- # pipsetup("pydub")
- # starttool(r"C:\Users\dashen\Desktop\1688.mp3", "musc.wav")
- starttool("res/txt2audio.mp3", "txt2audio.wav")

百度语音引擎.py
- #!/usr/bin/env python3
- # _*_ coding: utf-8 _*_
- # File : 百度语音引擎.py
- # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
- # Date : 2019/6/4
-
- from aip import AipSpeech
- import wave
- import 音乐格式转换
- file_object = None
- aipSpeech = None
-
-
- def default_init():
- APP_ID = '16427879'
- API_KEY = 'H1OOrfrsKCjZruv8SvWn3MHw'
- SECRET_KEY = 'we2ppcpEQi5Qj4lMvIZG1fCcMo6ztYaF '
- global aipSpeech
- aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
- f = open("audiofile.txt", "w+")
- text = "《我们都是追梦人》 。\
- 作曲 : 常石磊。\
- 作词 : 王平久,编曲 : 柒玖、于昊。\
- 每个身影 同阳光奔跑。 \
- 我们挥洒汗水 回眸微笑。\
- 一起努力 争做春天的骄傲。\
- 懂得了梦想,越追越有味道。\
- 我们都是追梦人,千山万水 奔向天地跑道。\
- 你追我赶 风起云涌春潮,海阔天空 敞开温暖怀抱,我们都是追梦人,在今天 勇敢向未来报到。\
- 当明天 幸福向我们问好,最美的风景是拥抱。\
- 啦……啦……啦……。\
- 每次奋斗 拼来了荣耀。\
- 我们乘风破浪 举目高眺。"
- f.write(text)
- f.close()
- global file_object
- file_object = open('audiofile.txt')
-
-
- def playaudio(audio_file):
- global pyadplay
- import pyaudio
- pyadplay = pyaudio
- chunk = 1024 # 2014kb
- wf = wave.open(audio_file, 'rb')
- p = pyadplay .PyAudio()
- stream = p.open(
- format=p.get_format_from_width(
- wf.getsampwidth()),
- channels=wf.getnchannels(),
- rate=wf.getframerate(),
- output=True)
- data = wf.readframes(chunk) # 读取数据
- while True:
- data = wf.readframes(chunk)
- if len(data) == 0:
- break
- else:
- print(data)
- stream.write(data)
- stream.stop_stream() # 停止数据流
- stream.close()
- p.terminate() # 关闭 PyAudio
- print('wav音乐播放play函数结束!')
-
-
- def start_t2a(spd=5, pit=5, vol=5, per=3):
- """
- :param spd: 合成语音的讲话速度
- :param pit: 合成语言的讲话音调
- :param vol: 合成语言的音量
- :param per: 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,5为情感合成-小琪琪,默认为情感合成-度逍遥
- :return:
- """
- global file_object, aipSpeech
- try:
- n = file_object.read()
- print(n)
- finally:
- file_object.close()
- result = aipSpeech.synthesis(n, 'zh', 1, {'spd': spd, 'pit': pit,
- 'vol': vol, 'per': per,
- })
- print(result)
- if not isinstance(result, dict):
- with open('res/txt2audio.mp3', 'wb') as f:
- f.write(result)
- 音乐格式转换.starttool("res/txt2audio.mp3", "txt2audio.wav")
-
-
- if __name__ == '__main__':
- default_init() # 加载百度语言应用 默认用的本人的,做商用请找到这个函数,在里面改成你们自己的。里面加载了一个测试用的文本
- start_t2a(per=5) # 开始文字转语音最终生成wav文件
- playaudio("res/txt2audio.wav") # 播放

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。