当前位置:   article > 正文

python3写入文本转为音频并播放_python将txt文件的内容写入wav

python将txt文件的内容写入wav

原理:

先写入文本,再通过百度语音引擎接口将文本合成指定的音频,然后保存到mp3文件。再通过

pydub第三方库将mp3文本转化为wav文件,然后利用wav库和pydub播放wav音频

 

写入文本案例:

  1. text="测试文本1 2 3 4 5 6 7"
  2. f = open("audiofile.txt", "w+")
  3. f.write(text)
  4. f.close()

 

总的代码包含两个文件,一个是音乐格式转换.py,另一个是百度语音引擎.py

其中音乐格式转换文件依赖ffmgeg.根据代码运行提示自行安装

 

环境支持:本人用的python3.7.3 32位版本,windows10   本程序不支持linux,其他windows版本及python版本自测

本程序依赖以下第三方库,建议提前安装好:

  1. python32 -m pip install pyaudio
  2. python32 -m pip install pydub
  3. python32 -m pip install baidu-aip

 

总的代码:

音乐格式转换.py
  1. #!/usr/bin/env python3
  2. # _*_ coding: utf-8 _*_
  3. # File : 音乐格式转换.py
  4. # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
  5. # Date : 2019/6/3
  6. import sys
  7. import os
  8. pypath = sys.executable
  9. print(pypath)
  10. def pipsetup(packname):
  11. packcmd = "%s -m pip install %s" % (pypath, packname)
  12. try:
  13. p = os.popen(packcmd)
  14. except UnicodeDecodeError:
  15. print("返回文本的格式编码有问题!")
  16. try:
  17. print(p.read()) # 执行cmd并得到返回的字符串
  18. except UnicodeDecodeError:
  19. print("读取返回值失败,大概意思是编码不对,不过已经执行完毕了")
  20. def starttool(mp3path, output, form="wav"):
  21. if os.path.exists("ffmpeg.exe") and os.path.exists(
  22. "ffplay.exe") and os.path.exists("ffprobe.exe"):
  23. try:
  24. from pydub import AudioSegment
  25. except BaseException:
  26. print("本地不存在音乐处理支持库,开始安装pydub...")
  27. pipsetup("pydub")
  28. from pydub import AudioSegment
  29. # AudioSegment.converter = r"D:\ffmpeg\bin\ffmpeg.exe"
  30. def trans_mp3_to_wav(filepath):
  31. if os.path.exists(mp3path):
  32. song = AudioSegment.from_mp3(filepath)
  33. print(song)
  34. song.export("res/%s" % output, format=form)
  35. else:
  36. print("目标文件不存在!")
  37. trans_mp3_to_wav(mp3path)
  38. else:
  39. csdn_url = "https://blog.csdn.net/qq_32394351/article/details/90748900"
  40. ext_mpeg = os.path.exists("ffmpeg.exe")
  41. ext_play = os.path.exists("ffplay.exe")
  42. ext_probe = os.path.exists("ffprobe.exe")
  43. print("请将ffmpeg.exe,ffplay.exe,ffprobe.exe程序放到本文件同目录后再执行!")
  44. print("不会操作请访问作者csdn教程查看:%s" % csdn_url)
  45. print(
  46. "文件检测:ffmpeg.exe:%s,ffplay.exe:%s,ffprobe.exe:%s" %
  47. (ext_mpeg, ext_play, ext_probe))
  48. if __name__ == '__main__':
  49. # pipsetup("pydub")
  50. # starttool(r"C:\Users\dashen\Desktop\1688.mp3", "musc.wav")
  51. starttool("res/txt2audio.mp3", "txt2audio.wav")
百度语音引擎.py
  1. #!/usr/bin/env python3
  2. # _*_ coding: utf-8 _*_
  3. # File : 百度语音引擎.py
  4. # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
  5. # Date : 2019/6/4
  6. from aip import AipSpeech
  7. import wave
  8. import 音乐格式转换
  9. file_object = None
  10. aipSpeech = None
  11. def default_init():
  12. APP_ID = '16427879'
  13. API_KEY = 'H1OOrfrsKCjZruv8SvWn3MHw'
  14. SECRET_KEY = 'we2ppcpEQi5Qj4lMvIZG1fCcMo6ztYaF '
  15. global aipSpeech
  16. aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
  17. f = open("audiofile.txt", "w+")
  18. text = "《我们都是追梦人》 。\
  19. 作曲 : 常石磊。\
  20. 作词 : 王平久,编曲 : 柒玖、于昊。\
  21. 每个身影 同阳光奔跑。 \
  22. 我们挥洒汗水 回眸微笑。\
  23. 一起努力 争做春天的骄傲。\
  24. 懂得了梦想,越追越有味道。\
  25. 我们都是追梦人,千山万水 奔向天地跑道。\
  26. 你追我赶 风起云涌春潮,海阔天空 敞开温暖怀抱,我们都是追梦人,在今天 勇敢向未来报到。\
  27. 当明天 幸福向我们问好,最美的风景是拥抱。\
  28. 啦……啦……啦……。\
  29. 每次奋斗 拼来了荣耀。\
  30. 我们乘风破浪 举目高眺。"
  31. f.write(text)
  32. f.close()
  33. global file_object
  34. file_object = open('audiofile.txt')
  35. def playaudio(audio_file):
  36. global pyadplay
  37. import pyaudio
  38. pyadplay = pyaudio
  39. chunk = 1024 # 2014kb
  40. wf = wave.open(audio_file, 'rb')
  41. p = pyadplay .PyAudio()
  42. stream = p.open(
  43. format=p.get_format_from_width(
  44. wf.getsampwidth()),
  45. channels=wf.getnchannels(),
  46. rate=wf.getframerate(),
  47. output=True)
  48. data = wf.readframes(chunk) # 读取数据
  49. while True:
  50. data = wf.readframes(chunk)
  51. if len(data) == 0:
  52. break
  53. else:
  54. print(data)
  55. stream.write(data)
  56. stream.stop_stream() # 停止数据流
  57. stream.close()
  58. p.terminate() # 关闭 PyAudio
  59. print('wav音乐播放play函数结束!')
  60. def start_t2a(spd=5, pit=5, vol=5, per=3):
  61. """
  62. :param spd: 合成语音的讲话速度
  63. :param pit: 合成语言的讲话音调
  64. :param vol: 合成语言的音量
  65. :param per: 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,5为情感合成-小琪琪,默认为情感合成-度逍遥
  66. :return:
  67. """
  68. global file_object, aipSpeech
  69. try:
  70. n = file_object.read()
  71. print(n)
  72. finally:
  73. file_object.close()
  74. result = aipSpeech.synthesis(n, 'zh', 1, {'spd': spd, 'pit': pit,
  75. 'vol': vol, 'per': per,
  76. })
  77. print(result)
  78. if not isinstance(result, dict):
  79. with open('res/txt2audio.mp3', 'wb') as f:
  80. f.write(result)
  81. 音乐格式转换.starttool("res/txt2audio.mp3", "txt2audio.wav")
  82. if __name__ == '__main__':
  83. default_init() # 加载百度语言应用 默认用的本人的,做商用请找到这个函数,在里面改成你们自己的。里面加载了一个测试用的文本
  84. start_t2a(per=5) # 开始文字转语音最终生成wav文件
  85. playaudio("res/txt2audio.wav") # 播放

 

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号