AVAudioPlayer没有播放声音

时间:2014-04-27 03:43:16

标签: ios objective-c string audio text-to-speech

我正在使用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方法。

感谢任何帮助。

3 个答案:

答案 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;

希望这有帮助。