开源 python 应用 开发(十三)AI应用--百度智能云TTS语音合成

发布于:2025-08-30 ⋅ 阅读:(24) ⋅ 点赞:(0)

 最近有个项目需要做视觉自动化处理的工具,最后选用的软件为python,刚好这个机会进行系统学习。短时间学习,需要快速开发,所以记录要点步骤,防止忘记。

 链接:

开源 python 应用 开发(一)python、pip、pyAutogui、python opencv安装-CSDN博客

开源 python 应用 开发(二)基于pyautogui、open cv 视觉识别的工具自动化-CSDN博客

开源 python 应用 开发(三)python语法介绍-CSDN博客

开源 python 应用 开发(四)python文件和系统综合应用-CSDN博客

开源 python 应用 开发(五)python opencv之目标检测-CSDN博客

开源 python 应用 开发(六)网络爬虫-CSDN博客

开源 python 应用 开发(七)数据可视化-CSDN博客

开源 python 应用 开发(八)图片比对-CSDN博客

开源 python 应用 开发(九)目标跟踪-CSDN博客

开源 python 应用 开发(十)音频压缩-CSDN博客

开源 python 应用 开发(十一)AI应用--百度智能云ASR短语音转文本-CSDN博客

开源 python 应用 开发(十二)AI应用--百度智能云Agent聊天-CSDN博客

开源 python 应用 开发(十三)AI应用--百度智能云TTS语音合成-CSDN博客

 推荐链接:

开源 Arkts 鸿蒙应用 开发(一)工程文件分析-CSDN博客

开源 Arkts 鸿蒙应用 开发(二)封装库.har制作和应用-CSDN博客

开源 Arkts 鸿蒙应用 开发(三)Arkts的介绍-CSDN博客

开源 Arkts 鸿蒙应用 开发(四)布局和常用控件-CSDN博客

开源 Arkts 鸿蒙应用 开发(五)控件组成和复杂控件-CSDN博客

 推荐链接:

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

推荐链接:

开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客

开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客

​​​​​​开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客

本章内容为使用百度智能云将文本合成为语音的方法,其中速度、语调等多种参数可以设置。

一、主要内容

使用使用百度语音合成API将文本转换为语音的Python程序。

二、API Key 和 Secret Key获取

进入百度智能云  ->  选择语音合成标准版 ->  选择开通付费,默认赠送10小时流量,不购买资源

->  实名认证后获得,api key 和 secret key  

在以下页面可以查看API Key 和 Secret Key

三、源代码分析

主要功能
文本转语音:将中文文本转换为wav格式的音频文件

API认证:通过百度API获取访问令牌

音频保存:将合成的音频保存为本地文件

代码结构分析
1. 导入模块
python
import requests  # 用于发送HTTP请求
import urllib.parse  # 用于URL编码
2. 全局变量
python
API_KEY = ""  # 需要填写的百度API Key
SECRET_KEY = ""  # 需要填写的百度Secret Key
3. 主函数 main()
设置API端点:https://tsn.baidu.com/text2audio

准备待转换的文本并进行URL编码

构建请求参数,包括语速、音调、音量等设置

发送POST请求获取音频数据

保存音频文件为output.wav

4. 认证函数 get_access_token()
调用百度OAuth接口获取访问令牌

使用client_credentials授权模式

返回access_token用于后续API调用

参数说明
tex: URL编码后的文本

tok: 访问令牌

cuid: 用户唯一标识

ctp: 客户端类型(1为web)

lan: 语言(zh为中文)

spd: 语速(0-15,5为适中)

pit: 音调(0-15,5为适中)

vol: 音量(0-15,5为适中)

per: 发音人(0为默认女声)

aue: 音频格式(6为mp3)

以下为源码:

import requests
import urllib.parse

API_KEY = "***"
SECRET_KEY = "***"

def main():
    try:
        url = "https://tsn.baidu.com/text2audio"
        
        # 准备文本并编码
        text = "这是一段测试代码啊,百度云也能听清楚我讲的是什么吗?"
        encoded_text = urllib.parse.quote(text)
        
        # 构建请求参数
        params = {
            'tex': encoded_text,
            'tok': get_access_token(),
            'cuid': 'cmClbqGBAL3Mi8RSdREgdAl1uRJJXbZG',
            'ctp': 1,
            'lan': 'zh',
            'spd': 5,  # 调整为适中语速
            'pit': 5,  # 调整为适中音调
            'vol': 5,  # 调整为适中音量
            'per': 0,  # 使用默认发音人
            'aue': 6   # mp3格式
        }
        
        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'audio/mp3'
        }
        
        # 发送请求
        response = requests.post(url, data=params, headers=headers)
        
        # 检查响应
        if response.status_code == 200:
            # 保存音频文件
            with open('output.wav', 'wb') as f:
                f.write(response.content)
            print("语音合成成功,已保存为 output.wav")
        else:
            print(f"请求失败,状态码: {response.status_code}")
            print(f"错误信息: {response.text}")
            
    except Exception as e:
        print(f"程序执行出错: {e}")

def get_access_token():
    """获取百度API访问令牌"""
    try:
        url = "https://aip.baidubce.com/oauth/2.0/token"
        params = {
            "grant_type": "client_credentials", 
            "client_id": API_KEY, 
            "client_secret": SECRET_KEY
        }
        
        response = requests.post(url, params=params)
        response.raise_for_status()
        
        token = response.json().get("access_token")
        if not token:
            raise ValueError("未能获取到access_token")
            
        return token
        
    except Exception as e:
        print(f"获取access_token失败: {e}")
        return None

if __name__ == '__main__':
    main()

三、效果演示

将录音文件test.wav文件放到和python文件同一个目录,运行效果如下,生产了16K频率的音频文件。