资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

语音合成 Linux SDK

20251019 linux SDK技术文档

语音合成 Linux SDK

1. 文档说明

文档名称 语音合成集成文档
所属平台 Linux C++
提交日期 2025-09-03
概述 本文档是百度离线语音合成Linux Arm SDK的用户指南,描述了离线语音合成SDK相关接口的使用说明。本文档设计为在 Linux arm 平台上使用百度语音合成(BDS TTS)SDK 进行文本转语音的开发。该 SDK 支持离线语音合成模式,并提供丰富的参数配置进行一些功能性设置。

2. 版本说明

名称 版本与兼容范围
语音合成 1.0.0
系统支持 Linux C++
接口建议使用 Ubuntu 18.04 及以上版本
开发环境 要求支持C++17标准,GCC(GNU Compiler Collection)版本须 ≥ 7.3
架构支持 x86_64
最低需支持libc.so.6,并包含iconv模块

3. SDK说明

将SDK 压缩包解压缩,将得到如下文件:

文件名称 说明
百度语音合成Linux Arm SDK用户接入文档V1.0 本文档
demo 开发实例
include 依赖的头文件
libs 语音合成SDK库

4.开发环境

4.1 开发环境

SDK 支持在 Linux arm(armv8) 环境下进行编译,可选择:

  • 交叉编译:在 x86_64 主机上交叉构建;
  • 本地编译:直接在 64 位 ARM 开发板环境下构建。

在开发板上编译请确保已下载安装gcc、g++、cmake,如未安装可执行如下指令:

sudo apt install gcc g++ cmake

然后在 sdk demo 文件夹执行如下指令:

mkdir build
cd build
cmake ..
make -j4

编译完成后执行如下指令:

sh run.sh

4.2 依赖

确保系统已安装必要的依赖库如: libstdc++、pthread、dl、iconv 等。

SDK 提供的依赖文件结构如下:

  • include/:头文件
  • libs/:库文件

注意:部分发行版的 iconv 模块可能独立于 glibc,请确认系统自带或手动安装。

4.3 资源文件

可存放在如 resource文件夹,具体可参考示例。主要包括:文本模型文件、语音模型文件、授权文件(在激活时自动生成)。

参考目录结构:

sdk/
 ├─ include/
 ├─ libs/
 ├─ resource/
 ├─ demo/
 └─ run.sh

不同 Linux 平台的工具链差异较大,若仅用于功能体验或初步联调,可直接使用提供的 Ubuntu x86_64 预编译版本(Ubuntu ≥ 18.04)。

5.授权激活

本SDK 支持在线合成(online)和离线合成(offline)以及根据网络情况使用离在线融合模式(Mix)。需要通过设置正确的参数进行激活。

accessToken、包名等参数填写与申请请参考语音合成SDK集成

第一步 设置 accessToken

tts_set_param(bds::BdsTTSParamDefine::PARAM_ACCESS_TOKEN, "您申请的accessToken");

第二步 设置包名、appID、SN

设置包名请使用以下语句

tts_set_param(bds::BdsTTSParamDefine::PARAM_PACKAGE_NAME, "您申请的包名");

设置app ID请使用以下语句

tts_set_param(bds::BdsTTSParamDefine::PARAM_APP_ID, "您申请的appId");

设置SN请使用以下语句

tts_set_param(bds::BdsTTSParamDefine::PARAM_AUTH_SERIAL_NUMBER,"您申请的SN");

第三步 设置发音人

若希望指定发音人,还需要设置发音人ID。例如想要使用度泽言发音人,需要把ID设为4193。

tts_set_param(bds::BdsTTSParamDefine::PARAM_ONLINE_SPEAKER, "4193");

需要注意前面设置的 4.1、4.2权限是否包含该发音人权限。

6.SDK接入

6.1 Debug日志初始化

void tts_log_init() {
    // 输出到终端
    bds::BdsTTSLogger::getInstance().set_log_level(
        bds::BdsTTSLogLevel::BDS_TTS_LOG_VERBOSE);
    // 输出到文件
    // bds::BdsTTSLogger::getInstance().set_log_level(
    // bds::BdsTTSLogLevel::BDS_TTS_LOG_VERBOSE , get_executable_path());
    bds::BdsTTSLogger::getInstance().setOfflineEngineLogFilePath(
        "FPRINTF:0:" + get_executable_path() + "/engine.txt");
}

6.2 创建合成器实例

class BdsTTSSynthesizerListenerImpl : public bds::BdsTTSSynthesizerListener {
public:
    void on_synthesizer_response(const bds::BdsTTSSynthesizerResponse response) {
        // 处理合成回调
    }
};

static std::shared_ptr<bds::BdsTTSSynthesizer> g_tts_handler = nullptr;
static BdsTTSSynthesizerListenerImpl g_native_observer;

void tts_handler_init() {
    bds::BdsTTSSynthesizer *raw_ptr =
        bds::BdsTTSSynthesizer::create_bds_tts_synthesizer(g_native_observer);
    g_tts_handler = std::shared_ptr<bds::BdsTTSSynthesizer>(raw_ptr);
}

6.3 参数配置

通用参数

void tts_set_param(const std::string &key, const std::string &value) {
    g_tts_handler->set_param(key, value);
}

// 示例配置
tts_set_param(bds::BdsTTSParamDefine::PARAM_PACKAGE_NAME, "com.baidu.speech.demo"); 
tts_set_param(bds::BdsTTSParamDefine::PARAM_ACCESS_TOKEN, "your_access_token");

在线合成参数

若使用在线语音合成,请配置以下参数

tts_set_paramCbds::BdsTTSParamDefine::PARAMLONLINE_SPEAKER, "4100"); //发音人
tts_set_param(bds::BdsTTSParamDefine::PARAM_ONLINE_TIMEOUT, "2000"); //超时时间

离线合成参数

若使用离线语音合成,请配置以下参数

std::string setOfflineModel(std::string exe_dir) {
    auto text_path_key = bds::BdsTTSParamDefine::TTS_TEXT_MODEL_FILE;
    auto text_path = escape_json_string(exe_dir + "/path/to/text_model.dat");
    
    auto speech_path_key = bds::BdsTTSParamDefine::TTS_SPEECH_MODEL_FILE;
    auto speech_path = escape_json_string(exe_dir + "/path/to/speech_model.dat");
    
    std::string offline_model = "{\""+ text_path_key + "\":\"" + text_path +
                                "\",\"" + speech_path_key +"\":\"" +
                                speech_path +"\"}";
    return offline_model;
}

tts_set_param(bds::BdsTTSParamDefine::PARAM_APP_ID, "your_app_id");
tts_set_param(bds::BdsTTSParamDefine::PARAM AUTH_SERIAL_NUMBER, "your_serial");
tts_set_param(bds::BdsTTSParanDefine::PARAM_TTS_LICENSE_FILE_PATH,
            exe_dir + "/path/to/baidu_license.dat");// 可读可写文件
tts_set_param(bds::BdsTTSParamDefine::PARAM_RW_PATH, exe_dir);// 可读可写路径
tts_set_param(bds::BdsTTSParamDefine::PARAM_OFFLINE_MODEL, setOfflineModel(exe_dir));
tts_set_param(bds::BdsTTSParamDefine::PARAM_CONVERT_DAT_PATH, "your convert file");// 可选参数,使用非当前平台生成的个性化发音人时设置

6.4 加载引擎

加载在线引擎

若使用在线语音合成,请通过以下代码加载引擎

bool load_online_tts() {
    auto tts_result = g_tts_handler->load_online_tts();
    return tts_result.get_code() == 0;
}

加载离线引擎

若使用离线语音合成,请通过以下代码加载引擎

bool load_offline_tts() {
    auto tts_result = g_tts_handler->load_offline_tts();
    return tts_result.get_code() == 0;
}

6.5 语音合成

6.5.1 开始合成

bool synthesize(const bds::BdsTTSEntity &ttsEntity) {
    auto tts_result = g_tts_handler->synthesize(ttsEntity);
    return tts_result.get_code() == 0;
}

// 使用示例
auto text = "要合成的文本内容”;
auto tts_mode = bds::BdsTtsMode::MIX; // 混合模式
auto utterance_id = "unique_id_123";
auto ttsEntity = bds::BdsTTSEntity(text, tts_mode, utterance_id);
synthesize(ttsEntity);

6.5.2 合成回调处理

void on_synthesizer_response(const bds::BdsTTSSynthesizerResponse &response) {
    auto synthesize_type = response.get_synthesize_type();
    
    switch (synthesize_type) {
    case bds::SynthesizerType::SYNTHESIZE_START:
    case bds::SynthesizerType::SYNTHESIZE_FINISH:
        // 处理开始/结束事件
        break;

    case bds::SynthesizerType::SYNTHESIZE_DATA_ARRIVED:
        // 处理数据到达事件,获取进度等信息
        break;
        
    case bds::SynthesizerType::SYNTHESIZE_ERROR:
        // 处理错误事件
        break;
    }
}

6.5.3 控制接口

// 停止合成
g_tts_handler->stop();

// 释放资源
释放bds::BdsTTSSynthesizer *指针即可

完整示例如下

//初始化
tts_log_init();
tts_handler_init();

// 配置参数
tts_set_param(bds::BdsTTSParamDefine::PARAM_PACKAGE_NAME, "com.baidu.speech.demo");
tts_set_param(bds::BdsTTSParamDefine::PARAM ACCESS_TOKEN, "your_token");
tts_set_param(bds::BdsTTSParamDefine::PARAM_ONLINE_SPEAKER, "4100");

// 加载在线引擎
if (!load_online_tts()) return -1;

// 配置离线参数
tts_set_param(bds::BdsTTSParamDefine::PARAM APP_ID, "your_app_id");
tts_set_param(bds::BdsTTSParamDefine::PARAM_OFFLINE_MODEL, setOfflineModel(get_executable_path()));

// 加载离线引擎
if (!load_offline_tts()) return -1;

//开始合成
auto text = "要合成的文本内容”;
auto ttsEntity = bds::BdsTTSEntity(text, bds::BdsTtsMode::MIX, "123456");
synthesize(ttsEntity);

// 等待合成完成
sleep(10);

6.6 合成参数设置

参考前述参数配置项,设置合成参数采用方法:

tts_set_param 进行设置,各参数意义描述如下:

参数名 类型、值 在线或离线生效 常用程度 解释
PARAM_SPEAKER(基础发音人) 选项 在线 常用 仅在线生效,在线的发音
"0"(默认) 在线 常用 度小美(普通女声)
"1" 在线 常用 度小宇(成熟男声)
"3" 在线 常用 度逍遥(磁性男声)
"4" 在线 常用 度丫丫(可爱女童)
PARAM_SPEAKER(精品发音人) "106" 在线 常用 度博文(情感男声)
"110" 在线 常用 度小童(情感儿童声)
"111" 在线 常用 度小萌(情感女声)
"103" 在线 常用 度米朵(情感儿童声)
"5" 在线 常用 度小娇(情感女声)
"5003" 在线 常用 精品度逍遥(磁性男声)
"5118" 在线 常用 度小鹿(甜美女声)
PARAM_VOLUME String, 默认"5" 全部 常用 在线及离线合成的音量 。范围["0" - "15"],不支持小数。 "0"最轻,"15" 最响(取值为0时为音量最小值,并非为无声)
PARAM_SPEED String, 默认"5" 全部 常用 在线及离线合成的语速 。范围["0" - "15"],不支持小数。 "0"最慢,"15" 最快(如需更高语速可提交需求工单或联系商务同学申请)

7.常见问题

Q: 合成没有声音输出

A: 检查音频设备是否正常,检查合成回调是否有错误信息

Q: 离线合成失败

A: 检查模型文件路径是否正确,授权文件是否有效

Q: 在线合成超时

A: 检查网络连接,适当增加超时时间

Q: 如何切换发音人

A: 通过 PARAM_ONLINE_SPEAKER 参数设置不同的发音人 ID


错误码

错误码值 错误码描述
-1 在线引擎授权失败
-4 在线授权中断异常
-5 在线授权执行时异常
-6 在线授权时间超时
-7 在线合成返回错误信息
-10 在线引擎合成时异常
-11 当前 mode 不支持的操作
-12 在线合成请求解析出错
-15 在线合成获取合成结果超时
-16 在线授权被取消
-18 在线合成无效的主机名
-19 在线合成读数据失败
-20 在线合成连接失败
-21 在线合成 socket 异常
-24 在线合成请求主机名为空
-25 在线合成发送数据失败
-29 在线合成接收前缀数据长度错误
-30 在线合成接收数据长度错误
-31 在线合成合成数据包速度过快
-32 在线合成网络未知类型错误
-39 在线服务临时错误
-100 离线引擎授权失败
-102 离线授权下载 License 失败
-105 离线授权中断异常
-106 离线授权执行时异常
-107 离线授权执行时间超时
-108 离线合成引擎初始化失败
-110 离线合成时异常
-111 离线合成返回值非 0
-118 离线授权任务被取消
-122 离线 tts_offline_resource 文件异常
-123 离线发音人参数异常
-124 下载 license 失败,sn 参数异常
-125 离线合成文本为空
-200 混合引擎离线在线都授权失败
-204 混合引擎初始化 tts 时,离线初始化失败
-206 混合引擎初始化 tts 时,在线初始化失败
-300 合成文本为空
-301 合成文本长度过长(不要超过 GBK1024 个字节)
-302 合成文本无法获取 GBK 字节
-401 TTS 模式无效
-402 TTS 合成队列已满
-406 TTS 被调用方法参数无效
-500 Context 被释放或为空
-700 播报的短音频文件不存在
-701 当前接口不支持播报短音频
-1001 模型管理请求出错
-1002 模型管理服务器端错误
-1003 模型管理数据库模型信息无效
-1004 模型管理数据库模型文件信息无效
-1005 模型数据已经存在(或已下载)
-1006 无法获取到模型信息
-1007 无法获取到模型文件信息
-1008 模型检查过程异常
-1009 模型文件下载时异常
-9999 未知错误

附录:

目前linux的sdk版本要求系统,c++17 gcc >=7.3。libc.so.6需要包含iconv。因为不同linux平台使用的工具链都是不一样的,如果只是业务方想体验或者联调,可以给一个ubuntu x86_64的版本。ubuntu需要大于等于18.04

上一篇
语音合成 HarmonyOS SDK
下一篇
语音识别