(1)安装库 pip install baidu-aip
(2) 调用库并创建客户端 相关信息在应用创建后自行生成
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
(3)接口调用(注:合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式)
#txtname 文本文件路径
#savefile 生成的多个音频文件保存目录
# spd String 语速,取值0-9,默认为5中语速
# pit String 音调,取值0-9,默认为5中语调
# vol String 音量,取值0-15,默认为5中音量
# per String 发音人选择, 0为女声,1为男声, 3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女
def txt2sound(txtname, savefile):
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
with open(txtname, 'r') as sub:
num = 0
while True:
text = sub.read(1023)#每次读取1023字节
if text:
num += 1
#调用接口生成音频文件
result = client.synthesis(text, 'zh', 1, {'vol': 5, 'per': 4})
if not isinstance(result, dict):
with open('{}/{}.mp3'.format(savefile, str(num)), 'wb') as f:
f.write(result)
print('正在合成第'+str(num)+'段文本......')
else:
break
#执行成功后则在音频文件保存目录中生成MP3音频文件
(1) 安装相关库 pip install pydub
(2) 执行代码如下
from pydub import AudioSegment
def joinvoice(savefile, save_name):
finally_sound = AudioSegment.empty()#创建一个空音频用于多个音频文件的拼接
for i in os.listdir('{}/'.format(savefile)):#遍历音频文件目录进行拼接
sound = AudioSegment.from_mp3('auido/{}'.format(i))
finally_sound += sound
#将拼接完成的音频文件导出,导出格式选用了wav 尝试导出为mp3格式后无法播放文件
finally_sound.export(save_name, format="wav")
(3)执行成功后则在对应保存路径下生成合成的wav音频文件(此部分可能报错可查看末尾的报错解决)
(1) 安装相关库 pip install pygame
(2) 执行代码如下:
def play(filename):
# frequency频率即播放速度 size=-16音频样本使用的位数,channels=4 1表示单声道,2表示立体声。不支持其他值(负值被视为1,大于2的值被视为2)
mixer.init(frequency=16000)
mixer.music.load(filename)
mixer.music.play()
userin = input('输入p停止播放:')
if userin == 'p':
mixer.music.pause()
mixer.music.stop()
from aip import AipSpeech
from pygame import mixer
import os
from pydub import AudioSegment
def txt2sound(txtname, savefile):
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
with open(txtname, 'r') as sub:
num = 0
while True:
text = sub.read(1023)
if text:
num += 1
result = client.synthesis(text, 'zh', 1, {'vol': 5, 'per': 4})
if not isinstance(result, dict):
with open('{}/{}.mp3'.format(savefile, str(num)), 'wb') as f:
f.write(result)
print('正在合成第'+str(num)+'段文本......')
else:
break
def play(filename):
# frequency频率即播放速度 size=-16音频样本使用的位数,channels=4 1表示单声道,2表示立体声。不支持其他值(负值被视为1,大于2的值被视为2)
mixer.init(frequency=16000)
mixer.music.load(filename)
mixer.music.play()
userin = input('输入p停止播放:')
if userin == 'p':
mixer.music.pause()
mixer.music.stop()
def joinvoice(savefile, save_name):
finally_sound = AudioSegment.empty()
for i in os.listdir('{}/'.format(savefile)):
sound = AudioSegment.from_mp3('auido/{}'.format(i))
finally_sound += sound
finally_sound.export(save_name, format="wav")
def main():
txtname = 'data.txt'
savefile = 'auido'
result_name = 'resultsound.wav'
txt2sound(txtname, savefile)
joinvoice(savefile, result_name)
play(result_name)
if __name__ == '__main__':
main()
1.AudioSegment 相关报错解决:
报错:Python AudioSegment winError 2 The system cannot find the file specified(winError2 找不到系统文件)
解决方式:https://www.pianshen.com/article/5739874938/