长文本在线合成JAVA SDK
快速入门
安装Speech Java SDK
Speech Java SDK目录结构
1com.baidu.aip
2 ├── auth //签名相关类
3 ├── http //Http通信相关类
4 ├── client //公用类
5 ├── exception //exception类
6 ├── speech
7 │ └── AipSpeech //AipSpeech类
8 └── util //工具类
支持 JAVA版本:1.7+
查看源码 Java SDK代码现已公开,您可以查看代码、或者在License范围内修改和编译SDK以适配您的环境。请点击此处下载java sdk源代码。
使用maven依赖:
添加以下依赖即可。其中版本号可在maven官网查询
1<dependency>
2 <groupId>com.baidu.aip</groupId>
3 <artifactId>java-sdk</artifactId>
4 <version>${version}</version>
5</dependency>
直接使用JAR包步骤如下:
1.在官方网站下载识别、合成 RESTful API Java SDK压缩工具包。
2.将下载的aip-java-sdk-version.zip解压后,复制到工程文件夹中。
3.在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”。
4.添加SDK工具包aip-java-sdk-version.jar和第三方依赖工具包json-20160810.jar log4j-1.2.17.jar。
其中,version为版本号,添加完成后,用户就可以在工程中使用Speech Java SDK。
新建AipSpeech
AipSpeech是语音识别与合成的Java客户端,为使用语音合成的开发人员提供了一系列的交互方法。
用户可以参考如下代码新建一个AipSpeech,初始化完成后建议单例使用,避免重复获取access_token:
1public class LongTtsCreate {
2 // 设置APPID/AK/SK
3 public static final String APP_ID = "你的 App ID";
4 public static final String API_KEY = "你的 Api Key";
5 public static final String SECRET_KEY = "你的 Secret Key";
6 public static void main(String[] args) {
7 // 初始化一个AipSpeech
8 AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
9 List<String> texts = Arrays.asList(
10 "你好百度,",
11 "你好世界。"
12 );
13
14 // 可选参数
15 HashMap<String, Object> options = new HashMap<String, Object>();
16 // 音频格式
17 options.put("format", "mp3-16k"); // "mp3-16k","mp3-48k","wav","pcm-8k","pcm-16k",默认为mp3-16k
18 // 音库
19 options.put("voice", 0); // 可选,具体参考文档
20 // 语速
21 options.put("speed", 5); // 取值0-15,默认为5中语速
22 // 语调
23 options.put("pitch", 5); // 取值0-15,默认为5中语调
24 // 音量
25 options.put("volume", 5); // 音量,基础音库取值0-9,精品音库取值0-15,默认为5中音量(取值为0时为音量最小值,并非为无声)
26 // 是否开启字幕时间戳
27 options.put("enable_subtitle", 0); // 取值范围0, 1, 2,默认为0。0表示不开启字幕时间戳,1表示开启句级别字幕时间戳,2表示开启词级别字幕时间戳
28 // 段落间隔
29 options.put("break", 0); // 取值 0-5000 ,单位ms,用于合成文本分段传入时设置段落间间隔。
30
31 JSONObject res = client.longTextSynthesisCreate(texts, "zh", options);
32
33 System.out.println(res);
34 }
35}
在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
配置AipSpeech
如果用户需要配置AipSpeech的一些细节参数,可以在构造AipSpeech之后调用接口设置参数,目前只支持以下参数:
| 接口 | 说明 |
|---|---|
| setConnectionTimeoutInMillis | 建立连接的超时时间(单位:毫秒) |
| setSocketTimeoutInMillis | 通过打开的连接传输数据的超时时间(单位:毫秒) |
| setHttpProxy | 设置http代理服务器 |
| setSocketProxy | 设置socket代理服务器 (http和socket类型代理服务器只能二选一) |
接口说明
长文本合成
详细文档参考官网:https://ai.baidu.com/ai-doc/SPEECH/ulbxh8rbu
接口描述
长文本在线合成接口可以将10万字以内文本一次性合成,异步返回音频。支持多种优质音库,将超长文本快速转换成稳定流畅、饱满真实的音频。适用于阅读听书、新闻播报等客户。
步骤:
1、根据文本内容、音频格式、音库等参数创建语音合成任务,获取task_id参数。
2、根据task_id的数组批量查询语音合成任务结果。
一、长文本合成-创建任务
请求说明
1package org.example;
2import com.baidu.aip.speech.AipSpeech;
3import org.json.JSONObject;
4
5import java.util.Arrays;
6import java.util.HashMap;
7import java.util.List;
8
9public class LongTtsCreate {
10 // 设置APPID/AK/SK
11 public static final String APP_ID = "你的 App ID";
12 public static final String API_KEY = "你的 Api Key";
13 public static final String SECRET_KEY = "你的 Secret Key";
14 public static void main(String[] args) {
15 // 初始化一个AipSpeech
16 AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
17 List<String> texts = Arrays.asList(
18 "你好百度,",
19 "你好世界。"
20 );
21
22 // 可选参数
23 HashMap<String, Object> options = new HashMap<String, Object>();
24 // 音频格式
25 options.put("format", "mp3-16k"); // "mp3-16k","mp3-48k","wav","pcm-8k","pcm-16k",默认为mp3-16k
26 // 音库
27 options.put("voice", 0); // 可选,具体参考文档
28 // 语速
29 options.put("speed", 5); // 取值0-15,默认为5中语速
30 // 语调
31 options.put("pitch", 5); // 取值0-15,默认为5中语调
32 // 音量
33 options.put("volume", 5); // 音量,基础音库取值0-9,精品音库取值0-15,默认为5中音量(取值为0时为音量最小值,并非为无声)
34 // 是否开启字幕时间戳
35 options.put("enable_subtitle", 0); // 取值范围0, 1, 2,默认为0。0表示不开启字幕时间戳,1表示开启句级别字幕时间戳,2表示开启词级别字幕时间戳
36 // 段落间隔
37 options.put("break", 0); // 取值 0-5000 ,单位ms,用于合成文本分段传入时设置段落间间隔。
38
39 JSONObject res = client.longTextSynthesisCreate(texts, "zh", options);
40
41 System.out.println(res);
42 }
43}
参数详解
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
| text | list | 是 | 待合成文本,需要为UTF-8编码;输入多段文本时,文本间会插入1s长度的空白间隔总字数不超过10万个字符,1个中文字、英文字母、数字或符号均算作1个字符 |
| format | string | 否 | 音频格式,取值为"mp3-16k","mp3-48k","wav","pcm-8k","pcm-16k",默认为mp3-16k |
| voice | int | 是 | 发音人选择,具体值参考音色列表 |
| speed | int | 否 | 语速,取值 0-15,默认为 5 中语速 |
| pitch | int | 否 | 音调,取值 0-15,默认为 5 中语调 |
| volume | int | 否 | 音量,基础音库取值0-9,其他音库取值 0-15,默认为 5 中音量取值为0时为音量最小值,并非为无声 |
| enable_subtitle | int | 否 | 是否开启字幕时间戳,取值范围0, 1, 2,默认为0。0表示不开启字幕时间戳,1表示开启句级别字幕时间戳,2表示开启词级别字幕时间戳若希望自由控制长文本切分与返回时间戳,可使用^p进行分割(注意分割句间最好不要长于200字),此功能与句级、词级字幕时间戳功能不冲突 |
| break | int | 否 | 段落间隔,取值 0-5000,单位ms,用于合成文本分段传入时设置段落间间隔。 |
返回说明
参数详解
| 参数名称 | 类型 | 是否必需 | 对外状态 |
|---|---|---|---|
| log_id | int | 是 | log id |
| task_id | str | 否 | 任务id。注意保存该id,用于后续请求结果 |
| task_status | str | 否 | 任务状态 |
| error_code | int | 否 | 错误码,详细解释见错误码汇总 |
| error_msg | str | 否 | 错误信息,详细解释见错误码汇总 |
二、长文本合成 - 查询任务
请求说明
1package org.example;
2import com.baidu.aip.speech.AipSpeech;
3import org.json.JSONObject;
4
5import java.util.Arrays;
6import java.util.List;
7
8public class LongTtsQuery {
9 // 设置APPID/AK/SK
10 public static final String APP_ID = "你的 App ID";
11 public static final String API_KEY = "你的 Api Key";
12 public static final String SECRET_KEY = "你的 Secret Key";
13 public static void main(String[] args) {
14 // 初始化一个AipSpeech
15 AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
16 // 任务id集合
17 // 推荐一次查询多个任务id,单次最多可查询200个
18 List<String> taskIds = Arrays.asList(
19 "task_id_1",
20 "task_id_2"
21 );
22 JSONObject res = client.longTextSynthesisQuery(taskIds);
23 System.out.println(res);
24 }
25}
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
| task_ids | int | 是 | 任务id,推荐一次查询多个任务id,单次最多可查询200个 |
返回说明
| 参数名 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| log_id | int | 是 | log id |
| tasks_info | list | 否 | 任务信息 |
| +task_id | str | 是 | 任务id |
| +task_status | str | 是 | 任务状态 |
| +task_result | dict | 否 | 任务结果 |
| ++speech_url | str | 否 | 音频下载链接,任务完成后储存72小时 |
| ++speech_timestamp | dict | 否 | 字幕时间戳信息 |
| +++sentences | list | 否 | 句子列表 |
| ++++paragraph_index | int | 否 | 句子在传入文本中段落位置 |
| ++++sentence_texts | str | 否 | 句子文本信息 |
| ++++begin_time | int | 否 | 句子文本在合成音频的开始时间戳 |
| ++++end_time | int | 否 | 句子文本在合成音频的结束时间戳 |
| ++++characters | list | 否 | 句子中各个词的信息 |
| +++++character_text | str | 否 | 句子中的词文本 |
| +++++begin_time | int | 否 | 句子中的词在合成音频的开始时间戳 |
| +++++end_time | int | 否 | 句子中的词在合成音频的结束时间戳 |
| ++err_no | int | 否 | 错误码,详细解释见错误码汇总 |
| ++err_msg | str | 否 | 错误信息,详细解释见错误码汇总 |
| ++sn | str | 否 | |
| error_code | int | 否 | 错误码 |
| error_msg | str | 否 | 错误信息 |
| error_info | list | 否 | 错误的或查询不存在taskId数组 |
