iOS SDK(旧版)

更新时间:
复制 MD 格式

旧版 iOS SDK 提供语音合成接口,可将文本转换为语音,并通过回调获取合成音频。

重要

旧版 iOS SDK 不再更新,建议使用新版 SDK。详情请参见iOS SDK。

前提条件

  • 已在智能语音交互控制台创建项目并获取 Appkey。详情请参见创建项目。

  • 已获取智能语音交互访问令牌(Token)。详情请参见获取 Token。

语音合成

语音合成支持多种音色,以及 PCM、WAV、MP3 格式的音频输出。本文示例使用 PCM 格式合成并播放音频。调用前请阅读语音合成接口说明,了解请求参数和回调事件。

调用步骤

调用前,将 SDK 集成到工程中。SDK 包内的静态库和动态库采用不同的集成方式:

库类型

包内架构

集成方式

静态库

x86_64、armv7、arm64

将框架加入链接阶段,不加入动态框架的嵌入阶段。

动态库

armv7、arm64

将框架加入链接阶段,并嵌入应用。

  1. 导入 AliyunNlsClientAdaptor.h、NlsSpeechSynthesizerRequest.h 和 SynthesizerRequestParam.h 头文件。

  2. 实现 NlsSpeechSynthesizerDelegate 回调方法。

  3. 创建 NlsClientAdaptor 对象 nlsClient。该客户端全局只需创建一次,可重复使用。

  4. 调用 nlsClient 的 createSynthesizerRequest 方法,创建 NlsSpeechSynthesizerRequest 对象,并设置其 delegate。请求对象不可重复使用,每次请求都需创建新对象。

  5. 使用 SynthesizerRequestParam 设置 Token、Appkey、待合成文本和音频格式等参数。

  6. 调用请求对象的 setSynthesizerParams 方法,传入已配置的 SynthesizerRequestParam 对象。

  7. 调用请求对象的 start 方法,开始语音合成。

  8. 在 NlsSpeechSynthesizerDelegate 的 OnBinaryDataReceived:voiceData:length: 回调中接收合成音频数据。

  9. 使用示例工程中的 NLSPlayAudio 工具播放收到的 PCM 音频。

关键接口

类或协议

说明

NlsClientAdaptor

语音处理客户端,用于一句话识别、实时语音识别和语音合成。客户端是线程安全的,建议全局只创建一个实例。

NlsSpeechSynthesizerRequest

语音合成请求对象,是线程安全的。每次请求需创建新对象。

SynthesizerRequestParam

语音合成请求参数。

NlsSpeechSynthesizerDelegate

语音合成回调协议,在收到音频数据、合成结束或发生错误等事件时触发对应回调。

代码示例

以下 Objective-C 代码展示示例工程中语音合成和播放的主要逻辑,依赖工程中的 Synthesizer.h、NLSPlayAudio 及界面控件配置,不是独立源文件。使用前,将 setToken 和 setAppkey 的空字符串替换为匹配的 Token 和 Appkey。

#import <Foundation/Foundation.h>
#import "Synthesizer.h"
@interface Synthesizer()<NlsSpeechSynthesizerDelegate>{
    IBOutlet UITextView *textViewSynthesizer;
}
@end
@implementation Synthesizer
-(void)viewDidLoad{
    [super viewDidLoad];
    //1. 全局参数初始化操作
    //1.1 初始化语音合成客户端
    _nlsClient = [[NlsClientAdaptor alloc]init];
    //1.2 初始化语音播放工具类
    _nlsAudioPlayer = [[NLSPlayAudio alloc]init];
    //1.3 初始化合成参数类
    _requestParam = [[SynthesizerRequestParam alloc]init];
    //1.4 设置log级别
    [_nlsClient setLog:NULL logLevel:1];
}
-(IBAction)startSynthesizer{
    //2. 创建请求对象和开始语音合成
    if(_synthesizerRequest!= NULL){
        _synthesizerRequest = NULL;
    }
    //2.1 初始化语音播放类
    [_nlsAudioPlayer cleanup];
    _nlsAudioPlayer = [[NLSPlayAudio alloc]init];
    //2.2 创建请求对象,设置NlsSpeechSynthesizerRequest回调。
    _synthesizerRequest = [_nlsClient createSynthesizerRequest];
    _synthesizerRequest.delegate = self;
    //2.3 获取页面合成文本
    NSString *inputText = [textViewSynthesizer text];
    //2.4 设置SynthesizerRequestParam请求参数
    [_requestParam setFormat:@"pcm"];
    [_requestParam setText:inputText];
    [_requestParam setToken:@""];
    [_requestParam setAppkey:@""];
    //2.5 传入请求参数
    [_synthesizerRequest setSynthesizerParams:_requestParam];
    //2.6 开始语音合成
    [_synthesizerRequest start];
}
/**
 *3. NlsSpeechSynthesizerDelegate接口回调
 */
//3.1 本次请求失败
- (void)OnTaskFailed:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    NSLog(@"OnTaskFailed, statusCode is: %@ error message :%@",statusCode,eMsg);
}
//3.2 服务端连接关闭
- (void)OnChannelClosed:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
    NSLog(@"OnChannelClosed, statusCode is: %@",statusCode);
}
//3.3 回调合成语音数据,通过NLSPlayAudio工具播放。
- (void)OnBinaryDataReceived:(NlsDelegateEvent)event voiceData:(Byte *)data length:(NSInteger)length{
    NSLog(@"Received voice data length %lu", length);
    [_nlsAudioPlayer process:data length:length];
}
//3.4 合成结束
- (void)OnSynthesizerCompleted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
}
//3.5 合成开始
- (void)OnSynthesizerStarted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
}
@end