Text To Speech demo

前言:微软的azure支持文本转语音的功能,本文将利用gpt的秘钥操作一个简单的demo,操作内容包括将文本转换为语音,以及不同句子的语音转换以达到两人对话的效果。(继续浏览本文之前请大家准备好gpt的秘钥%OPENAI_KEY%)

文字转语音简单实现

下列代码是向https://oa.api2d.net/azure/tts发送post请求;

url = "https://oa.api2d.net/azure/tts"

payload = json.dumps({
   "text": text,
   "voiceName":voiceName,
   "embedding": embedding,
   "speed" : speed,
   "moderation" : moderation,
   "moderation_stop" : moderation_stop
})
headers = {
   'Authorization': 'Bearer %OPENAI_KEY%',
   'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
   'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)

上述代码中,将headers以及payload发送给azure后会得到一个反馈response,返回的是 stream 形式的 mp3 类型文件数据。response.status_code为200时表示文字转语音成功,其中:

text

想要进行转换的文本(string)

embedding:

向量数组。目前支持的长度是 1536,也就是 OpenAI text-embedding-ada-002 模型返回的长度,如果你使用 text-embedding-ada-002 生成向量,可以直接用在这个接口(e.g embedding = [0.1] * 1536,其中1536不是固定值,list)

voiceName:

选择语音(e.g # zh-CN-XiaoyanNeural (Female) # zh-CN-XiaoyouNeural (Female, Child # en-GB-SoniaNeural (Female), string)#当选择的音色为英文时,只能读取英文文档,如果英文文本中有中文,则会忽略掉中文,如果给的是纯中文,则无法正常保存文件  #当选择的音色为中文时,中英文都能进行读取

Speed:  speed <= 0 为慢语速slow; speed = 1 为正常语速middle; speed > 1 为快语速;

slow_time = 2 * middle_time = 4 * fast_time

moderation,moderation_stop(不重要):

这两个参数判断是否对内容进行审核,默认为false.

Authorization:

添加秘钥,格式:'Bearer fk....'

User-Agent, Content-Type: 采用代码中的默认值即可

下面代码是将返回信息保存为MP3格式即实现文字转语音的功能

audio_data = response.content
print(type(audio_data))
with open("audio.mp3", "wb") as f:
f.write(audio_data)

实现两个人的对话

选择声音

voiceName_male = "zh-CN-YunjianNeural"
voiceName_female = "zh-CN-XiaoxiaoNeural"

定义一个对话函数,参数为文本内容,音色,速度,返回一个stream 形式的 mp3 类型文件数据。

def dialogue(text, voiceName, speed):
    url = "https://oa.api2d.net/azure/tts"

    payload = json.dumps({
    "text": text,
    "voiceName":voiceName,
    "embedding": embedding,
    "speed" : speed,
    "moderation" : moderation,
    "moderation_stop" : moderation_stop
    })
    headers = {
    'Authorization': 'Bearer %OPENAI_KEY%',
    'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
    'Content-Type': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=payload)
    return response.content

添加一个列表,模仿对话

dialogue_list = ["我正在考虑购买一辆新车,但是我不知道从哪里开始",
"首先你需要确定你的预算和购车需求,例如你需要什么类型的车,你的日常使用频率等。",
"我的预算是50000元左右,我需要一辆小型SUV,因为我需要经常出行,但是我也需要一辆车可以适应城市道路。",
"好的,现在你可以开始搜索你感兴趣的品牌和型号,然后比较不同汽车之间的价格和功能。",
"我已经找到了一些我喜欢的品牌和型号,但是我不知道在哪里购买。",
"你可以在汽车厂商的官方网站上查找附近的经销商,也可以在一些第三方汽车销售平台上进行搜索。",
"好的,我会尝试这些方法。但是我还想知道如何谈判价格和购买保险。",
"关于交易和保险,你可以在汽车经销商处进行谈判,也可以从其他渠道获得保险报价,然后选择最优惠的选项。",
"谢谢你的建议,我会考虑这些事情。"]

调用dialogue函数,并对返回的值进行累加拼接并保存为"audio_combine.mp3",

audio_combine = b""
for i, dia in enumerate(dialogue_list):
    if i % 2 == 0:
        audio = dialogue(dia, voiceName_female, 1)
    else:
        audio = dialogue(dia, voiceName_male, 1)
    audio_combine += audio
with open("audio_combine.mp3", "wb") as f:
f.write(audio_combine)

耗时21.6s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值