AVAudioPlayer 不播放长音?

AVAudioPlayer not playing long sounds?

我有一系列从0.3s到3.0s的声音文件。

当尝试使用 AVAudioPlayer 播放时,我什么也没得到,除非我在之后添加一个 sleep(4) 调用以确保声音可以播放。真奇怪。

除此之外,传入的错误参数和每次 [player play] returns YES 都没有错误。但是,奇怪的是,委托方法没有被调用。

这是我的代码。

(.m 文件)

@interface MyClass ()
@property (nonatomic, strong) AVAudioPlayer *soundPlayer;
@end

@implementation SLInspireKit
//view did load here

- (void)playRandomSound {
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];

    NSError *error;

    NSString *musicFileName = [NSString stringWithFormat:@"my-sound-%d.aiff", arc4random_uniform(8)];
    NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], musicFileName];
    NSURL *soundUrl = [NSURL fileURLWithPath:path];

    self.soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error];
    self.soundPlayer.delegate = self;
    [self.soundPlayer setVolume:1.0];
    [self.soundPlayer prepareToPlay];

    if ([self.soundPlayer play]){
        NSLog(@"Played fine");
    } else {
        NSLog(@"Did not play fine");
    }
    sleep(1); //uncomment this out, and nothing. Set to 1, first second of each sound, 2, 2 seconds and so on. 

}

有什么想法吗?我不认为这是 ARC 的事情,但它可能是:/我每次都必须启动,因为声音每次都在变化。

评论的快速总结: 结果是需要 sleep(n) 因为包含 AVAudioPlayer 的整个 class 被释放了。

保留 class 可以解决问题。

干杯!