一、前言
从我去年集成好安卓的代码,已经过去了大半年了,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) {
参考链接
发表评论