Xf-TextToSpeech
TODO-list
- 粤语语音生成
- 单个语音生成
- 多语语音合成
- 添加语音缓存功能
- 使用 beego 部署 http 服务
- 提供单个语音生成的 http 接口
- 提供多语语音合成的 http 接口
- docker 快速部署
- 提供性能基准测试
Usage
编译
使用 Make Tool
make build
或者
source xftts.sh build
语音合成
使用 Make Tool
make say_your_words/xxx.wav
或者
./xftts.sh 'say_your_words' [*.wav]
API 调用流程
参数说明
qtts.h::MSPLogin
int MSPAPI MSPLogin (const char * usr,
const char * pwd,
const char * params
)
params
业务 | 参数 | 名称 | 说明 |
---|---|---|---|
通用 | appid | 应用ID | SDK申请成功后获取到的appid。申请SDK请前往讯飞开放平台,此参数必须传入 |
离线 | engine_start | 离线引擎启动 | 启动离线引擎,支持参数,ivw:唤醒,asr:识别 |
离线 | [xxx]_res_path | 离线引擎资源路径 | 设置ivw、asr引擎离线资源路径,详细格式如下:fo|[path]|[offset]|[length]| 示例如下,单个资源路径: ivw_res_path=fo|res/ivw/wakeupresource.jet, 多个资源路径:asr_res_path=fo|res/asr/common.jet;fo|res/asr/sms.jet |
msp_cmn.h::QTTSSessionBegin
const char* MSPAPI QTTSSessionBegin(const char * params,
int * errorCode
)
params
业务 | 参数 | 名称 | 说明 |
---|---|---|---|
通用 | engine_type | 引擎类型 | 可取值: cloud:在线引擎 local:离线引擎,默认为cloud |
通用 | voice_name | 发音人 | 不同的发音人代表了不同的音色, 如男声、女声、童声等,具体参数值请到发音人授权管理确认 |
通用 | speed | 语速 | 合成音频对应的语速, 取值范围:[0,100],数值越大语速越快。 默认值:50 |
通用 | volume | 音量 | 合成音频的音量, 取值范围:[0,100],数值越大音量越大。 默认值:50 |
通用 | pitch | 语调 | 合成音频的音调, 取值范围:[0,100],数值越大音调越高。 默认值:50 |
离线 | tts_res_path | 合成资源路径 | 合成资源所在路径,支持fo 方式参数设置,对应格式如下: fo|[path]|[offset]|[length] (1)若是合并资源,则只需传入一个资源路径,如:fo|combined.jet|0|1024 (2)若是分离资源,则需传两个资源路径,如:fo|common.jet|0|1024;fo| xiaoyan.jet|0|1024 |
通用 | rdn | 数字发音 | 合成音频数字发音,支持参数, 0 数值优先, 1 完全数值, 2 完全字符串, 3 字符串优先, 默认值:0 |
离线 | rcn | 中文发音 | 支持参数: 0:表示发音为yao 1:表示发音为yi 默认值:0 |
通用 | text_encoding | 文本编码格式 | 合成文本编码格式,支持参数,GB2312,GBK,BIG5,UNICODE,GB18030,UTF8 |
通用 | sample_rate | 合成音频采样率 | 合成音频采样率,支持参数,16000,8000,默认为16000 |
在线 | background_sound | 背景音 | 合成音频中的背景音,支持参数, 0:无背景音乐, 1:有背景音乐 |
在线 | aue | 音频编码格式和压缩等级 | 码算法:raw;speex;speex-wb;ico 编码等级:raw:不进行解压缩 speex系列:0-10; 默认为speex-wb;7 speex对应sample_rate=8000 speex-wb对应sample_rate=16000 ico对应sample_rate=16000 |
在线 | ttp | 文本类型 | 合成文本类型,支持参数, text: 普通格式文本 cssml:cssml 格式文本 默认值:text |
离线 | speed_increase | 语速增强 | 通过设置此参数控制合成音频语速基数,取值范围, 1:正常 2:2 倍语速 4:4 倍语速 |
离线 | effect | 合成音效 | 合成音频的音效,取值范围, 0 无音效,1 忽远忽近,2 回声,3 机器人,4 合唱,5 水下,6 混响,7 阴阳怪气 |
wave 文件编码格式
该规范用于对接讯飞接口输出的 pcm 数据流,可用于编写音频文件的生成:xf/tts.h
RIFF Chunk
标签名 | 大小 | 取值 | 描述 |
---|---|---|---|
ChunkID | 4 | "RIFF" | 用作 RIFF 资源交换文件标识 |
ChunkSize | 4 | 0~2^32 | 描述了除 ChunkID、ChunkSize 外的 Chunk 总字节数,为文件总大小 -8 字节 |
Format | 4 | "WAVE" | wave 文件标识,当为 "WAVE" 时还至少需要两个 Sub Chunks:Format Chunk、Data Chunk |
Format Chunk
标签名 | 大小 | 值 | 描述 |
---|---|---|---|
SubChunk1ID | 4 | "fmt " | 最后一位为空白字符,音频编码格式 Chunk 的标识符 |
SubChunk1Size | 4 | 0 ~ 2^32 | Format Chunk 的大小,一般为 16 |
AudioFormat | 2 | 0 or 1 | 表示音频数据的格式,值 1 表示数据为线性 PCM 编码 |
NumChannels | 2 | 1 or 2 | 表示音频声道数,值 1 为单声道, 2 是双声道 |
SampleRate | 4 | - | 采样率,每秒从连续信号中提取并组成离散信号的采样个数,用赫兹(Hz)表示 |
ByteRate | 4 | - | 比特率,波形文件每秒的字节数,ByteRate = SampleRate * NumChannels * BitsPerSample / 8 |
BlockAlign | 2 | - | 数据块对齐单位,单次采样的字节大小,BlockAlign = NumChannels * BitsPerSample / 8 |
BitsPerSample | 2 | 8*2^n | 采样位数或采样深度,一般使用 16 |
Data Chunk
标签名 | 大小 | 值 | 描述 |
---|---|---|---|
SubChunk2ID | 4 | "data" | 音频数据 Chunk 的标识符 |
SubChunk2Size | 4 | 0~2^32 | Data Chunk 的大小,PCM 音频数据域的长度 |
data | - | - | PCM 音频数据流 |
生成 wave 头文件后拼接 xf 的 pcm 数据流即可生成 .wav 文件了。
mepg layer3 文件编码格式
MP3 文件分为 3 部分:TAG_V2(ID3V2),Frames,TAG_V1(ID3V1):
Layer | 描述 |
---|---|
ID3V2 | 包含作曲,专辑等信息,不定长,ID3V1的扩展 |
Frames | 音频的序列帧,不定长 |
ID3V1 | 包含作者,作曲,专辑等信息,固定 128 字节 |
ID3V2
ID3V2 由 10 字节的标签头、若干标签帧以及一些其它可选项(以下按拼接顺序排列)组成:
标签 | 描述 |
---|---|
Header | 标签头,固定 10 字节 |
Extended Header | 拓展头,不定长,可选项,默认不添加 |
Frames | 标签帧,不定长 |
Padding | 空白填充,不定长,可选项,默认不添加 |
Footer | 脚注,固定 10 字节,可选项,默认不添加 |
标签头由以下部分组成:
Tag | 大小 | 值 | 描述 |
---|---|---|---|
ID | 3 | "ID3" | ID3v2 的标识符 |
Version | 2 | 0x04 00 | 前一个字节为 ID3v2的主版本,后一个字节为副版本 |
Flags | 1 | 0b11110000 | 目前只有 4 个标识位,从左到右分别是:帧不同步、扩展头、实验版标识、脚注 |
Size | 4 | - | 标签大小,包括标签头的 10 个字节和所有的标签帧的大小 |
标签帧的结构: