我正在使用Google Text To Speech API来讲NSString,我正在执行以下操作:
-(void) playSound {
[[AVAudioSession sharedInstance] setActive:YES error:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"file.mp3"];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
NSLog(@"YES");
}
NSString *stringer = [NSString stringWithFormat:@"%@", URLArray[playerInt]];
NSLog(@"%i",playerInt);
NSURL *url = [NSURL URLWithString:[stringer stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url] ;
[request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" forHTTPHeaderField:@"User-Agent"];
NSURLResponse* response = nil;
NSError* error = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
[data writeToFile:path atomically:YES];
player = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:path] error:nil];
player.delegate = self;
[player prepareToPlay];
[player play];
NSLog(@"%@", stringer);
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag
{
[self playSound];
}
让我解释一下代码。我使用这个作为谷歌文本到演讲api:http://translate.google.com/translate_tts?&tl=en-US&ie=UTF-8&q=Hello
我需要说出大段落,以便将它们分成数组URLArray
中的多个链接。然后由于URLArray
是一个包含大量链接的数组,我最初设置int playerInt = -1
(因为我们将playerInt + = 1后设置为0)。因此,只要第一个声音播放完毕,它就会重新启动它并将playerInt
一个整数设置为大(所以为1)并说出URLArray[playerInt]
所以第二个链接。
这有几个问题。首先,当我运行它时,音频甚至没有播放。其次,没有调用audioPlayerDidFinishPlaying方法。
感谢任何帮助。
答案 0 :(得分:0)
根据您提供的内容,您似乎尚未激活音频会话。尝试添加
[[AVAudioSession sharedInstance] setActive:YES error:nil];
答案 1 :(得分:0)
如果您正在使用ARC,则需要保留音频,使其不会自动设置为nil,将以下属性添加到标题中。
@property (nonatomic, strong) AVAudioPlayer *player;
之前我回答了类似的问题,并且对AVAudioPlayer not playing sound IOS
起作用了希望这对你有所帮助。 干杯吉姆
答案 2 :(得分:0)
你似乎在这里正确设置,所以对于第一部分我会检查是否:
[[NSFileManager defaultManager] fileExistsAtPath:path]
返回YES
。在开始播放文件之前,它可能还没有完成保存。或者对于最坏的情况,sendSynchronousRequest
失败会花费更长的时间。
第二部分:
audioPlayerDidFinishPlaying
未被调用,因为您需要设置它:
player.delegate = self;
希望这有帮助。