#import "HiBaiduTts.h"
#import "HiSpeechSynthesizer.h"
#import <Foundation/Foundation.h>
@interface HiBaiduTts () <HiSpeechSynthesizerDelegate>
@property(nonatomic,strong)HiSpeechSynthesizer *speechSynthesizer;
@end
@implementation HiBaiduTts
- (void)willRemoveAllTexts:(nonnull NSArray *)texts error:(nullable NSError *)error {
for (int i=0; i<[texts count]; i++) {
NSDictionary *text = texts[i];
RCTPromiseRejectBlock reject = [text objectForKey:@"reject"];
if(reject)reject(@"error",@"cancel",error);
}
}
- (void)didEndSpeakText:(nonnull NSDictionary *)text{
RCTPromiseResolveBlock resolve = [text objectForKey:@"resolve"];
if(resolve)resolve(@{@"success" : @(true)});
}
RCT_EXPORT_MODULE()
// Example method
// See // https://reactnative.dev/docs/native-modules-ios
RCT_EXPORT_METHOD(initSDK:(NSString *)apiKey secretKey:(NSString *)secretKey appId:(NSString *)appId)
{
if(!_speechSynthesizer){
_speechSynthesizer = [[HiSpeechSynthesizer alloc] initApiKey:apiKey secretKey:secretKey];
_speechSynthesizer.delegate = self;
[_speechSynthesizer setSpeed:@(6)];
}
}
RCT_REMAP_METHOD(speak,text:(NSString *)text resolve:(RCTPromiseResolveBlock )resolve reject:(RCTPromiseRejectBlock )reject)
{
if(_speechSynthesizer){
NSMutableDictionary *dic = [_speechSynthesizer synthesizeText:text];
if(dic){
if(resolve){
[dic setObject:[resolve copy] forKey:@"resolve"];
if(reject)[dic setObject:[reject copy]forKey:@"reject"];
}
}
else {
if(reject) reject(@"speak fail!", nil, nil);
}
}
}
RCT_EXPORT_METHOD(setSpeaker:(NSString *)speaker)
{
if(_speechSynthesizer){
[_speechSynthesizer setSpeaker:speaker];
}
}
RCT_EXPORT_METHOD(setVolume:(nonnull NSNumber *)value)
{
if(_speechSynthesizer){
[_speechSynthesizer setVolume:value];
}
}
RCT_EXPORT_METHOD(setSpeed:(nonnull NSNumber *)value)
{
if(_speechSynthesizer){
[_speechSynthesizer setSpeed:value];
}
}
RCT_EXPORT_METHOD(setPitch:(nonnull NSNumber *)value)
{
if(_speechSynthesizer){
[_speechSynthesizer setPitch:value];
}
}
RCT_EXPORT_METHOD(setAudioSessionCategory:(nonnull NSNumber *)category)
{
if(_speechSynthesizer){
[_speechSynthesizer setAudioSessionCategory:category];
}
}
RCT_EXPORT_METHOD(setAudioSessionEnable:(nonnull NSNumber *)value)
{
if(_speechSynthesizer){
[_speechSynthesizer setAudioSessionEnable:value];
}
}
RCT_EXPORT_METHOD(cancel)
{
if(_speechSynthesizer){
[_speechSynthesizer cancel];
}
}
- (dispatch_queue_t)methodQueue
{
return dispatch_get_main_queue();
}
@end