本文介绍了如何使用阿里云智能语音服务提供的iOS NUI SDK,包括SDK下载安装、关键接口及代码示例。
前提条件
下载安装
- 说明
请下载后在样例初始化代码中替换您的阿里云账号信息、appkey和token才可运行。
解压ZIP包,使用nuisdk.framework进行集成。
说明代码采用Ojective-C和C++混合编写,请您调用.mm扩展名文件。
使用Xcode打开此工程。
其中语音合成示例代码在TTSViewController.mm文件。
SDK关键接口
nui_tts_initialize:初始化SDK。
/** * 初始化SDK,SDK为单例,请先释放后再次进行初始化。请勿在UI线程调用,可能会引起阻塞。 * @param parameters:初始化参数,参见接口说明。 * @param listener:事件监听回调,参见下文具体回调。 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @param level:log打印级别,值越小打印越多。 * @param save_log:是否保存log为文件,存储目录为parameter中的debug_path字段值。 * @return:参见错误码。 */ -(int) nui_tts_initialize:(const char *)parameters ttsListener:(const NuiTtsSdkListener *)listener asyncCallback:(const NuiAsyncCallback *)async_listener logLevel:(NuiSdkLogLevel)level saveLog:(bool)save_log;
其中,NuiTtsSdkListener类型如下表。
名称
类型
说明
tts_event_callback
FuncTtsListenerOnEvent
语音合成事件回调
tts_user_data_callback
FuncTtsUserProvideData
语音合成数据回调
tts_user_volume_callback
FuncTtsUserProvideVolume
音量回调
user_data
void *
用户数据,上述回调中第一个参数。
FuncTtsListenerOnEvent:SDK事件回调。
/** * SDK主要事件回调 * @param user_data:暂不使用。 * @param event:回调事件,参见如下事件列表。 * @param taskid:本次合成的任务ID。 * @param code:参见错误码,出现TTS_EVENT_ERROR事件时有效。 */ typedef void (*FuncTtsListenerOnEvent) (void *user_data, NuiSdkTtsEvent event, char *taskid, int code);
事件列表:
名称
说明
TTS_EVENT_START
语音合成开始,准备播放。
TTS_EVENT_END
语音合成播放结束
TTS_EVENT_CANCEL
取消语音合成
TTS_EVENT_PAUSE
语音合成暂停
TTS_EVENT_RESUME
语音合成恢复
TTS_EVENT_ERROR
语音合成发生错误
FuncTtsUserProvideData:回调中输出合成的音频数据。
/** * 开始合成后,此回调输出合成的音频数据,App可进行播放。 * @param user_data:暂不使用。 * @param info:当使用时间戳功能时,将返回JSON格式的时间戳结果。 * @param info_len:info字段的数据长度。 * @param buffer:合成的语音数据。 * @param len:合成的语音长度。 * @param taskid:本次合成的任务ID。 */ typedef void (*FuncTtsUserProvideData) (void *user_data, char *info, int info_len, char *buffer, int len, char *taskid);
FuncTtsUserProvideVolume:合成数据音量回调。
/** * SDK主要事件回调 * @param user_data:暂不使用。 * @param volume:合成语音的音量,可用于音量的动态显示。 * @param taskid:本次合成的任务ID。 */ typedef void (*FuncTtsUserProvideVolume) (void *user_data, int volume, char *taskid);
nui_tts_play:开始播放。
/** * 开始播放 * @param priority:任务优先级,请使用"1"。 * @param taskid:任务ID,可传入32个字节的uuid,或传入空内容由SDK自动生成。 * @param text:播放的文本内容。 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参见错误码。 */ -(int) nui_tts_play:(const char *)priority taskId:(const char *)taskid text:(const char *)text asyncCallback:(const NuiAsyncCallback *)listener;
nui_tts_cancel:取消播放。
/** * 取消合成任务 * @param taskid:传入想要停止的任务ID,如果为空则取消所有任务。 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参见错误码。 */ -(int) nui_tts_cancel:(const char *)taskid asyncCallback:(const NuiAsyncCallback *)listener;
nui_tts_pause:暂停播放。
/** * 暂停 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参见错误码。 */ -(int) nui_tts_pause:(const NuiAsyncCallback *)listener;
nui_tts_resume:恢复播放。
/** * 恢复暂停的任务 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参见错误码。 */ -(int) nui_tts_resume:(const NuiAsyncCallback *)listener;
nui_tts_set_param:设置语音合成参数。
/** * 以键值对形式设置参数 * @param param:参数名,参见接口说明。 * @param value:参数值,参见接口说明。 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参见错误码。 */ -(int) nui_tts_set_param:(const char *)param value:(const char *)value asyncCallback:(const NuiAsyncCallback *)listener;
nui_tts_get_param:获取参数。
/** * 获取参数值 * @param param:参数名,参见接口说明。 * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参数值。 */ -(const char *) nui_tts_get_param:(const char *)param asyncCallback:(const NuiAsyncCallback *)listener;
nui_tts_release:释放SDK资源。
/** * 释放SDK * @param async_listener:异步回调,设置nullptr采用同步方式调用。 * @return:参见错误码。 */ -(int) nui_tts_release:(const NuiAsyncCallback *)async_listener;
调用步骤
初始化SDK和播放组件。
根据业务需要设置参数。
调用nui_tts_play进行播放。
在合成数据回调中,将数据写入播放器进行播放,建议使用流式播放。
收到语音合成结束的回调。
代码示例
语音合成初始化
NSString * initParam = [self genInitParams]; //nui listener NuiTtsSdkListener ttsListener; ttsListener.tts_event_callback = ttsListenerOnEvent; ttsListener.tts_font_progress_callback = nullptr; ttsListener.tts_user_volume_callback = ttsUserProvideVolume; ttsListener.tts_user_data_callback = ttsListenerUserdata; ttsListener.user_data = nullptr; [_nui nui_tts_initialize:[initParam UTF8String] ttsListener:&ttsListener asyncCallback:nullptr logLevel:LOG_LEVEL_VERBOSE saveLog:true];
其中,genInitParams生成为String JSON字符串,包含资源目录和用户信息。其中用户信息包含如下字段。
[dictM setObject:id_string forKey:@"device_id"]; [dictM setObject:@"" forKey:@"url"]; [dictM setObject:@"" forKey:@"app_key"]; [dictM setObject:@"" forKey:@"token"];
根据需求设置参数
//可以设置发音人、语调和语速等参数,参数列表参见接口说明。 [self.nui nui_tts_set_param:"font_name" value:"xiaoyun" asyncCallback:nullptr];
启动语音合成
[self.nui nui_tts_play:"1" taskId:"" text:[content UTF8String] asyncCallback:nullptr];
回调处理
onNuiTtsEventCallback:语音合成事件回调,根据语音合成状态控制播放器。
- (void)onNuiTtsEventCallback:(nuisdk::NuiSdkTtsEvent)event taskId:(char*)taskid code:(int)code { TLog(@"onNuiTtsEventCallback event[%d]", event); if (event == TTS_EVENT_START) { loop_in = TTS_EVENT_START; dispatch_async(dispatch_get_main_queue(), ^{ [self->_voicePlayer play]; }); } else if (event == TTS_EVENT_END) { loop_in = TTS_EVENT_END; dispatch_async(dispatch_get_main_queue(), ^{ [self->_voicePlayer drain]; }); } }
onNuiTtsUserdataCallback:语音合成数据回调,将回调中的合成数据写入播放器进行播放。
- (void)onNuiTtsUserdataCallback:(char*)info wordIdx:(int)info_len buffer:(char*)buffer len:(int)len taskId:(char*)task_id { TLog(@"onnuiTtsUserdataCallback played info %s info_len %d", info, info_len); [_voicePlayer write:(char*)buffer Length:(unsigned int)len]; }
结束语音合成
[self.nui nui_tts_cancel:nullptr asyncCallback:nullptr];
在文档使用中是否遇到以下问题
更多建议
匿名提交