灵云SDK开发手册(C API)  5.2
 全部 结构体 函数 变量 类型定义 枚举 枚举值  
TTS能力

以下描述了如何使用灵云TTS能力。

1. TTS简介

TTS (Text To Speech) 语音合成技术,能将文字信息实时转化为各种不同音色的声音。

2. 选择模块和能力

灵云可以提供云端和本地端的合成能力 无论使用云端或本地端的合成能力,基础模块 hci_tts都是需要的。 需要使用云端能力时,需要加上hci_tts_cloud_synth模块; 需要使用本地端能力时,需要加上hci_tts_local_synth模块; 需要使用本地歌唱能力时,需要加上hci_tts_local_synth_sing模块;

如果使用本地合成引擎,需要访问相应的本地音库。具体某种能力需要的本地音库,可参见 能力列表

3. 语音合成

通过 hci_tts_synth() 来进行语音合成,示例如下:

char * pszConfig = "";
// 合成文本是UTF8编码,有些平台需要转换
char * pszText = "要合成的文本";
// 打开一个可写文件,将文件句柄当成自定义参数传给合成函数
FILE * fp = fopen("out.pcm", "w");
// 提供一个回调函数指针
errCode = hci_tts_synth(nSessionId, pszText, pszConfig, TtsSynthCallbackFunction, fp);
fclose(fp);

回调函数的示例如下:

bool HCIAPI TtsSynthCallbackFunction(void * pvUserParam,
TTS_SYNTH_RESULT * psTtsSynthResult,
HCI_ERR_CODE hciErrCode)
{
if( hciErrCode != HCI_ERR_NONE )
{
return false;
}
// 这里的pvUserParam 就是 hci_tts_synth()时传入的最后一个参数
FILE * fp = (FILE *)pvUserParam;
if (psTtsSynthResult->pvVoiceData!= NULL && psTtsSynthResult->uiVoiceSize != 0)
{
// 将合成结果写入文件
fwrite(psTtsSynthResult->pvVoiceData, psTtsSynthResult->uiVoiceSize, 1, fp);
}
// 此回调函数返回false会中止合成,返回true表示继续合成
return true;
}

合成函数是通过回调函数的方式给出数据,但仍然是同步方式,也即只有所有数据都通过回调函数给出后,合成函数才会返回。 因此如果需要响应用户界面操作等,需要将此函数放在一个独立的线程中进行。

合成是分段进行的,在合成过程中会调用多次回调函数,每次给出部分数据。在回调函数的TTS_SYNTH_RESULT参数中, 其pszText为当前正在合成文本段的首地址, 如果当前文本段的合成数据需要多次回调, 则只在第一次回调时给出该文本段的信息,其余回调中,该地址为NULL。

合成的过程中,也有可能出现某个回调没有声音数据返回,即pvVoiceData可能为NULL或者uiVoiceSize为0的情况, 这是正常的,简单忽略即可。

回调函数传入的数据,在退出回调函数后,不保证继续有效,因此,如果需要继续使用这些数据, 需要开发者自行将数据拷贝出去。

回调函数返回false会中止合成,而返回true则会继续合成。可以利用这一特性实现中断合成的操作。

4. 合成选项

主要支持的合成选项如下:

  1. pitch, speed, volume
    分别对应基频、语速、音量,这些配置项可用于调节合成语音的效果,一般情况下取默认值即可。

  2. audioFormat
    输出的语音格式,根据云端或本地合成不同,支持的语音格式不一样,可根据需要选择。

  3. encode, encLevel
    如果是云端合成,可以使用音频压缩配置,以便让云端对合成的音频数据进行压缩后再进行传输,以节省网络流量。 另外,可以使用encLevel选项,来调节音频压缩的级别, 以便在传输流量和音频质量之间达到平衡。具体编解码库使用上的说明参见 音频编解码库
    当本地合成时,不支持这两个配置项,将会直接忽略。当云端合成但audioFormat为vox6k4bit/vox8k4bit/mp3时, 也会忽略这两个配置项,数据会直接使用vox或mp3格式传输,不再另行启动encode指定的压缩。
    这一选项只影响传输过程,在数据传输到客户端后,灵云SDK会将数据转换为audioFormat选项指定的格式, 因此在回调函数中获取的数据格式,仍然是audioFormat指定的格式。

  4. 其它配置
    例如数字读法(digitMode), 标点符号读法(puncMode)等,请参见 hci_tts_synth()的说明。 要注意的是,这些参数和不同的合成引擎相关,不同的引擎支持的配置项不完全一致,具体请参见《灵云能力列表》文档。