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.hNlsSpeechSynthesizerRequest.hSynthesizerRequestParam.h 头文件。

  2. 实现 NlsSpeechSynthesizerDelegate 回调方法。

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

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

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

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

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

  8. NlsSpeechSynthesizerDelegateOnBinaryDataReceived:voiceData:length: 回调中接收合成音频数据。

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

关键接口

类或协议

说明

NlsClientAdaptor

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

NlsSpeechSynthesizerRequest

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

SynthesizerRequestParam

语音合成请求参数。

NlsSpeechSynthesizerDelegate

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

代码示例

以下 Objective-C 代码展示示例工程中语音合成和播放的主要逻辑,依赖工程中的 Synthesizer.hNLSPlayAudio 及界面控件配置,不是独立源文件。使用前,将 setTokensetAppkey 的空字符串替换为匹配的 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