资讯专栏INFORMATION COLUMN

百度语音合成在python中的使用

Alliot / 3507人阅读

摘要:使用百度的语音合成,首先需要在百度的开放平台上注册。百度语音的获取方式如下为官网获取的,为官网获取的天过期注意,是有有效期的,需要定时获取新的。

今天来说一下在python中如何使用百度的语音合成功能;即输入一段文字,请求百度相关服务器后,会返回来一段二进制语音流,将这段二进制数据经过base64编码返回给前端,前端解码后,可以播放出这段语音;也可以将这段二进制语音流保存到一个wav文件中。

使用百度的语音合成,首先需要在百度的ai开放平台上注册。

具体代码如下:

import asyncio
from aiohttp import ClientSession

def get_baidu_voice(text, baidu_voice_token):
    content_audio = {
        "tex": text,
        "tok": baidu_voice_token,
        "cuid": "default",
        "ctp": "1",
        "lan": "zh",
        "per": "4",

    }
    
    speech_url = "https://tsn.baidu.com/text2audio?"
    headers = {
        # "Content-Type": "audio/mp3"
        "Content-Type": "application/json"
    }
    async with ClientSession() as session:
        async with session.post(url=speech_url, data=content_audio,
                                headers=headers) as res:
            ret = await res.content.read()
            try:
                # 将bytes类型转换为str类型
                ret_str = str(ret, encoding="utf-8")
            except Exception as e:
                # 正常返回
                self.speech = base64.b64encode(ret)
            else:
                # 异常返回
                ret_dict = json.loads(ret_str)
                if ret_dict["err_no"] == 502:
                    raise RuntimeError("access token expired, please check")
                elif ret_dict["err_no"] == 501:
                    raise RuntimeError("the input arguments is incorrect, please check")
                elif ret_dict["err_no"] == 503:
                    raise RuntimeError("合成后端出错")
                elif ret_dict["err_no"] == 500:
                    raise RuntimeError("unsupport input")

需要传入两个参数,分别是:需要转换成语音的文本和百度的语音token。

百度语音token的获取方式如下:

def get_baidu_voice_token():
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+ client_id + "&client_secret=" + client_secret
    request = urllib.request.Request(host)
    request.add_header("Content-Type", "application/json; charset=UTF-8")
    response = urllib.request.urlopen(request)
    content_bytes = response.read()
    content_dict = json.loads(str(content_bytes, encoding="utf-8"))
    if content_dict:
        # 28天过期
        return content_dict["access_token"]

注意,token是有有效期的,需要定时获取新的token。

以上就是百度语音合成的调用,如有错误,欢迎交流指正!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42494.html

相关文章

  • ReactNative集成百度语音合成

    摘要:为百度语音资源,声音文件,它为一个必须文件,中英文资源。使用集成常见问题百度语音文档中心百度语音的集成一行代码简单调用百度语音合成使用原生自带的语音合成 语音交互是现今应用最多的智能交互方式,在人工智能越来越火的当下应用十分广泛,所以特别针对车内环境,在驾驶员安心驾驶的时候,用语音可以安全的进行操控。恰好新版项目中要加入语音播报功能,因为我们的应用和司机有关,于是在网上搜索一些解决方案...

    lunaticf 评论0 收藏0
  • Python使用科大讯飞Web API进行语音合成

    摘要:所以这次总结一下在中使用讯飞进行语音合成的过程。最后需要将配置参数编码为字符串字典类型明文字符串编码字符串,具体实现可以参考代码。返回值的具体说明请参考返回值语音合成。 前几日讯飞开放平台推出了WebAPI接口,恰好最近需要实现一个文字转语音的功能,于是就尝试着用了起来。但不知什么原因,官方文档的调用示例一直报错,最后自己照着示例的思路用python3重写了一遍。所以这次总结一下在Py...

    Eminjannn 评论0 收藏0

发表评论

0条评论

Alliot

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<