一、前言

从我去年集成好安卓的代码,已经过去了大半年了,sdk的版本也从1.5升级到了2.0,近期终于完成了ios的集成,希望可以帮助到大家。本人)Objective C写的不好,代码可能不是那么大的完备,仅作参考学习。

二、下载sdk

需要登陆腾讯云,找到语音技术,下载sdk 文档链接 腾讯tts文档

三、 iOS 原生模块

1. 集成frameworks

从sdk文件夹里面找到QCloudTTS.xcframework,引入到项目中。

2. TTSModule.h

注意1:我这里用了MediaPlayerDemo,也可以使用sdk内置播放器

//

// TTSModule.h

//

// Created by cauyyl on 2023/5/24.

//

#import

#import

//#import

#import "MediaPlayerDemo.h"

//@interface TTSModule : RCTEventEmitter

@interface TTSModule : NSObject

@property(strong) MediaPlayerDemo *player;

@property (nonatomic)int cout; //统计合成句子数,当作utteranceId用于标记句子用

@property (atomic)NSMutableArray* textArr;

@end

3.TTSModule.m

注意1:setOnlineAuthParam的参数需要改成你的账户信息 注意2:我简化了很多参数设置,参数都被我写死了。参数的详情可以参考demo里面LongTextViewController.m我的代码也是主要参考的LongTextViewController.m 注意3:我去掉了离线模式

//

// TTSModule.m

//

// Created by cauyyl on 2023/5/24.

//

#import "TTSModule.h"

#import

@implementation TTSModule

RCTResponseSenderBlock ttsCallback;

- (void)dealloc{

_player = nil;

[QCloudTTSEngine instanceRelease];

}

RCT_EXPORT_MODULE(TTS);

RCT_EXPORT_METHOD(pause){

if(_player){

[_player PausePlay];

}

}

RCT_EXPORT_METHOD(destroy){

[_player StopPlay];

[_textArr removeAllObjects];

QCloudTTSEngine *tts = [QCloudTTSEngine getShareInstance];

[tts cancel];

_player = nil;

[QCloudTTSEngine instanceRelease];

}

-(void) stop{

[_player StopPlay];

[_textArr removeAllObjects];

QCloudTTSEngine *tts = [QCloudTTSEngine getShareInstance];

[tts cancel];

}

RCT_EXPORT_METHOD(playLongText: (NSString *)title content:(NSString *)content forceStart:(BOOL *)forceStart callback:(RCTResponseSenderBlock)callback) {

ttsCallback=callback;

NSLog(@"showWithMessage");

NSLog(@"title=%@",title);

NSLog(@"content=%@",content);

// if(forceStart){

// NSLog(@"forceStart");

// }

//

QCloudTTSEngine *tts = [QCloudTTSEngine getShareInstance];

if(_player){

if(forceStart){

NSLog(@"forceStart");

_cout=0;

[self stop];

_textArr = [self breakIntoSentencesFromString:content];

// NSLog(@"_textArr38=%@",_textArr);

NSLog(@"_cout63=%d",_cout);

for (int i = 0; i < 10 - [_player getAudioQueueSize]; i++) {

if (_textArr.count > 0) {

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: