一.基本常识
TTS(Text To Speech),语音合成手艺,是指把原本的文本信息转换成能够发音的语音旌旗灯号,在GPS导航等需要人机交互斗劲多的场所经常会用到。 iPhone系统自己没有供给TTS引擎,可是可以使用外部数据的体例使iPhone具有TTS功能。
二.具体介绍
今朝找到两种可以在iPhone上免费使用TTS的体例,一种是使用Acapela为iPhone开发的工具包,另一种是使用Google Translate的TTS接口。
以下介绍Google Translate的TTS接口:
获取音频并保存起来:
1NSString *urlString = [@"http://translate.google.com/translate_tts?tl=en&q=" stringByAppendingString:@"I+am+techcrunch"]; 2NSURL *url = [[NSURL alloc] initWithString:[urlString stringByReplacingOccurrencesOfString:@" " withString:@"+"]]; 3//获得返回的mp3文件,格式为NSdata 4NSData *voiceData = [[NSData alloc] initWithContentsOfURL:url]; 5[NSThread sleepForTimeInterval:3.0];//等待3秒获取google词库的发音数据 6if(voiceData) 7{ 8 NSLog(@"已经1次性获取到voice"); 9} 10else 11{ 12 int k=0; 13 while(k<10&&!voiceData)//若voiceData为空,则继续获取voiceData5次,防止单词没有读音 14 { 15 NSString *urlString = [@"http://translate.google.com/translate_tts?tl=en&q=" stringByAppendingString:@"I+love+techcrunch "]; 16 NSURL *url = [[NSURL alloc] initWithString:[urlString stringByReplacingOccurrencesOfString:@" " withString:@"+"]]; 17 //获得返回的mp3文件,格式为NSdata 18 voiceData = [[NSData alloc] initWithContentsOfURL:url]; 19 [NSThread sleepForTimeInterval:5.0]; 20 k++; 21 } 22 if(voiceData){NSLog(@"第%d次获取到voice",k+1);} 23} 24NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 25NSString *documentsDirectory = [paths objectAtIndex:0]; 26NSLog(@"%@",documentsDirectory); 27[voiceData writeToFile:[documentsDirectory stringByAppendingPathComponent:@"test2"] atomically:YES]; 28[voiceData release];
读取音频并播放:
1NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 2NSString *documentsDirectory = [paths objectAtIndex:0]; 3NSString* appFile =[documentsDirectory stringByAppendingPathComponent:@"test2"]; 4 5NSURL* filePath = [NSURL fileURLWithPath:appFile isDirectory:NO]; 6_wordData = [NSData dataWithContentsOfURL:filePath];; 7 8//保证静音模式下也能播放 9AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 10NSError *error = nil; 11BOOL b = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error]; 12b = [audioSession setActive:YES error:&error]; 13 14//播放 15_avAudioPlayer = [[AVAudioPlayer alloc] initWithData:_wordData error:nil]; 16_avAudioPlayer.delegate = self; 17_avAudioPlayer.volume = 1.0f; 18[_avAudioPlayer prepareToPlay];//分配播放所需的资源,并将其加入内部播放队列 19[_avAudioPlayer play];