全部产品
云市场
云游戏

iOS SDK

更新时间:2020-09-02 09:50:56

本文介绍了如何使用阿里云智能语音服务提供的iOS SDK,包括SDK的安装方法及SDK代码示例。

说明

推荐您使用新版本iOS SDK,本版本后续将不再更新。详情请参见iOS SDK

前提条件

  • 首先阅读接口说明,详情请参见接口说明

  • 已在智能语音管控台创建项目并获取appkey,详情请参见创建项目

  • 已获取智能语音服务访问令牌,详情请参见获取Token

语音合成

语音合成即将文本转化为语音。我们支持多个说话人声音,支持PCM/WAV/MP3格式输出,示例实现了基于PCM的语音合成和播放。

下载安装

  1. 下载iOS SDK

    解压后,NlsDemo目录即为示例工程目录。

  2. 双击NlsDemo.xcodeproj,使用Xcode打开示例工程。

    • 导入的iOS SDK即NlsDemo/AliyunNlsSdk.framework。SDK支持 x86_64/armv7/arm64架构。

    • 如果您要将应用程序提交发布至苹果应用商店,请您使用该版本SDK:NlsDemo-iOS/dynamic-verison-framework/AliyunNlsSdk.framework。

调用步骤

说明

请使用Embedded Binaries方式导入SDK到工程中。

  1. 导入NlsSdk中的AliyunNlsClientAdaptor.h、NlsSpeechSynthesizerRequest.h以及SynthesizerRequestParam.h头文件。

  2. 实现NlsSpeechSynthesizerRequest的NlsSpeechSynthesizerDelegate回调方法。
  3. 创建AliyunNlsClientAdaptor对象nlsClient。

    该对象全局只需创建一次且可以重复使用。

  4. 通过调用nlsClient对象的createSynthesizerRequest方法获得NlsSpeechSynthesizerRequest对象。

    该NlsSpeechSynthesizerRequest对象不可重复使用,一个请求创建一个对象。

  5. 通过SynthesizerRequestParam设置参数,如access Token、appkey等。

  6. 通过NlsSpeechSynthesizerRequest的setSynthesizerParams 传入步骤5中设置的SynthesizerRequestParam对象。

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

  8. 通过NlsSpeechSynthesizerDelegate回调的

    -(void)OnBinaryDataReceived:(NlsDelegateEvent)event voiceData:(Byte *)data length:(NSInteger)length;

    方法传入合成语音数据。

  9. 使用NLSPlayAudio工具播放步骤8接收的语音数据。

关键接口

  • AliyunNlsClientAdaptor:语音处理客户端,利用该客户端可以进行一句话识别、实时语音识别和语音合成的语音处理任务。该客户端为线程安全,建议全局仅创建一个实例。

  • NlsSpeechSynthesizerRequest:语音合成处理的请求对象,线程安全。
  • SynthesizerRequestParam:语音合成相关参数。
  • NlsSpeechSynthesizerDelegate:语音合成相关回调函数。在获得结果、遇到错误等事件发生时会触发回调。

代码示例

#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 回调合成语音数据,通过NlsAudioPlayer工具播放。
- (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