Xcode将许多音频文件预加载到一个AVAudioPLayer中?

时间:2015-01-20 13:41:01

标签: ios objective-c audio avaudioplayer

我设法将音频文件加载到播放器上并通过以下方法播放:

- (void) play:(NSString*)loop{

NSString* resourcePath = [[NSBundle mainBundle] pathForResource:loop
                                                             ofType:@"mp3"];



player = [[AVAudioPlayer alloc] initWithContentsOfURL:
          [NSURL fileURLWithPath:resourcePath]];

    player.delegate = self;
    [player play];
    player.numberOfLoops = 1;
    player.currentTime = 0;
    player.volume = 1.0;
}
}

(我在这篇文章中删除了几行,但方法本身效果很好)

这里的问题是,只有在调用方法play()时才会加载声音,这会导致调用方法的按钮点击和实际播放它的玩家之间有一点延迟。

我的应用程序中有大约200个声音,一种方法是在viewDidLoad中将自己的AVAudioPLayer中的每个声音加载,但我怀疑这被认为是好的代码。

在Android上,我正在使用SoundPool来解决这个问题而且效果很好,但我不认为在iOS上有相同的功能。

1 个答案:

答案 0 :(得分:0)

我现在设法通过AudioServicesPlaySystemSound()

来完成

我使用的方法加载巨型数组中的所有声音

- (void)prepSounds{
    NSString *soundPath =
    [[NSBundle mainBundle] pathForResource:@"bl3"
                                    ofType:@"mp3"];
    NSURL *soundPathURL = [NSURL fileURLWithPath:soundPath];
    AudioServicesCreateSystemSoundID(
                                     (__bridge CFURLRef)soundPathURL, &soundID[0]);
    AudioServicesPlaySystemSound(soundID[0]);

}

其中soundID[]是标题中声明的SystemSoundID数组。

现在,我可以轻松地通过AudioServicesPlaySystemSound(soundID[0])发出声音,其中0与我加载的第一个声音有关。延迟接近0(我猜5毫秒)

但是,这仅适用于不超过30秒的声音。

如果您需要任何帮助,请在这里发表评论,我很乐意提供帮助。