全部产品
阿里云办公

iOS SDK 2.0

更新时间:2018-10-18 14:41:44

版本提示

本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务

语音合成

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

SDK下载调用

  • 下载 iOS SDK 2.0,解压后打开压缩包,NlsDemo目录即为Demo工程目录;
  • 双击NlsDemo.xcodeproj可以使用Xcode 9.3打开Demo工程,如您的Xcode版本高于/低于该版本,可能需要您调整版本或手动导入Demo文件;
  • iOS SDK 即NlsDemo/NlsSdk.framework,SDK支持 x86_64/armv7/arm64三种架构,SDK的Deployment Target是iOS 8.0;
  • 修改Demo中的Recognizer.m/Transcriber.m/Synthesizer.m文件,填入您的appkey和token即可运行Demo。

SDK调用顺序

  1. 引入NlsSdk中的NlsClientAdaptor.h、NlsSpeechSynthesizerRequest.h以及SynthesizerRequestParam.h头文件。
  2. 实现NlsSpeechSynthesizerRequest的NlsSpeechSynthesizerDelegate回调方法。
  3. 创建一个NlsClientAdaptor的对象nlsClient,该对象只需创建一次并且可以重复使用。
  4. 通过调用nlsClient对象的createSynthesizerRequest方法获得一个NlsSpeechSynthesizerRequest 对象。该NlsSpeechSynthesizerRequest对象不能重复使用,但是可以创建多个,每个请求创建一个对象。
  5. 通过SynthesizerRequestParam设置识别过程中的参数,如accessToken、appkey等(详细参数说明见下文)。
  6. 通过NlsSpeechSynthesizerRequest的setSynthesizerParams 传入【步骤 5】中设置的SynthesizerRequestParam对象。
  7. 调用NlsSpeechSynthesizerRequest对象的start方法开始语音合成。
  8. 通过NlsSpeechSynthesizerDelegate回调的-(void)OnBinaryDataReceived:(NlsDelegateEvent)event voiceData:(Byte *)data length:(NSInteger)length; 接口传入合成语音数据。
  9. 使用NLSPlayAudio工具播放【步骤 8】接受到的语音数据。

关键接口

  • NlsClientAdaptor:语言处理client,相当于所有语音相关处理类的factory,全局创建一个实例即可。线程安全。
  • NlsSpeechSynthesizerRequest:语音合成处理的请求对象,线程安全。
  • SynthesizerRequestParam:语音合成相关参数。
  • NlsSpeechSynthesizerDelegate:定义了语音合成相关回调函数,在获得结果,遇到错误等事件发生时会触发回调。

代码调用示例

  1. #import <Foundation/Foundation.h>
  2. #import "Synthesizer.h"
  3. @interface Synthesizer()<NlsSpeechSynthesizerDelegate>{
  4. IBOutlet UITextView *textViewSynthesizer;
  5. }
  6. @end
  7. @implementation Synthesizer
  8. -(void)viewDidLoad{
  9. [super viewDidLoad];
  10. //1. 全局参数初始化操作
  11. //1.1 初始化语音合成客户端
  12. _nlsClient = [[NlsClientAdaptor alloc]init];
  13. //1.2 初始化语音播放工具类
  14. _nlsAudioPlayer = [[NLSPlayAudio alloc]init];
  15. //1.3 初始化合成参数类
  16. _requestParam = [[SynthesizerRequestParam alloc]init];
  17. //1.4 设置log级别
  18. [_nlsClient setLog:NULL logLevel:1];
  19. }
  20. -(IBAction)startSynthesizer{
  21. //2. 创建请求对象和开始语音合成
  22. if(_synthesizerRequest!= NULL){
  23. _synthesizerRequest = NULL;
  24. }
  25. //2.1 初始化语音播放类
  26. [_nlsAudioPlayer cleanup];
  27. _nlsAudioPlayer = [[NLSPlayAudio alloc]init];
  28. //2.2 创建请求对象,设置NlsSpeechSynthesizerRequest回调
  29. _synthesizerRequest = [_nlsClient createSynthesizerRequest];
  30. _synthesizerRequest.delegate = self;
  31. //2.3 获取页面合成文本
  32. NSString *inputText = [textViewSynthesizer text];
  33. //2.4 设置SynthesizerRequestParam请求参数
  34. [_requestParam setFormat:@"pcm"];
  35. [_requestParam setText:inputText];
  36. //请使用https://help.aliyun.com/document_detail/72153.html 动态生成token
  37. // <AccessKeyId> <AccessKeySecret> 请使用您的阿里云账户生成 https://ak-console.aliyun.com/
  38. [_requestParam setToken:@""];
  39. //请使用阿里云语音服务管控台(https://nls-portal.console.aliyun.com/)生成您的appkey
  40. [_requestParam setAppkey:@""];
  41. //2.5 传入请求参数
  42. [_synthesizerRequest setSynthesizerParams:_requestParam];
  43. //2.6 开始语音合成
  44. [_synthesizerRequest start];
  45. }
  46. /**
  47. *3. NlsSpeechSynthesizerDelegate接口回调
  48. */
  49. //3.1 本次请求失败
  50. - (void)OnTaskFailed:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
  51. NSLog(@"OnTaskFailed, statusCode is: %@ error message :%@",statusCode,eMsg);
  52. }
  53. //3.2 服务端连接关闭
  54. - (void)OnChannelClosed:(NlsDelegateEvent)event statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
  55. NSLog(@"OnChannelClosed, statusCode is: %@",statusCode);
  56. }
  57. //3.3 回调合成语音数据,通过NlsAudioPlayer工具播放
  58. - (void)OnBinaryDataReceived:(NlsDelegateEvent)event voiceData:(Byte *)data length:(NSInteger)length{
  59. NSLog(@"Received voice data length %lu", length);
  60. [_nlsAudioPlayer process:data length:length];
  61. }
  62. //3.4 合成结束
  63. - (void)OnSynthesizerCompleted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
  64. }
  65. //3.5 合成开始
  66. - (void)OnSynthesizerStarted:(NlsDelegateEvent)event result:(NSString *)result statusCode:(NSString *)statusCode errorMessage:(NSString *)eMsg {
  67. }
  68. @end