使用SystemSoundID预加载* .wav?

时间:2010-04-20 12:03:00

标签: iphone objective-c cocoa-touch

当我按下UI中的按钮时,我正在播放一个wav文件以提供一些音频反馈。我的问题是当你第一次按下按钮时有一个延迟(大约1.5秒),而声音文件“sound.wav”被加载和缓存。有没有办法预先缓存此文件(可能在我的viewDidLoad中)?我想我可以通过播放viewDidLoad来实现它,但是真的需要禁用音频,这样每次应用程序启动它都不会“蜂鸣”。

非常感谢和帮助。

加里

EDIT_001: 看起来我的问题与this post重复,除非有人有任何新信息?也许是一种暂时降低播放音量的方法,除非每次通过运行循环清除音频。

EDIT_002: 我目前正在使用SystemSoundID / AudioServices:

-(void)playButtonSound {
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *soundPath = [bundle pathForResource:@"buttonClick_002" ofType:@"wav"];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundPath], &soundID);
    AudioServicesPlaySystemSound(soundID);
}

2 个答案:

答案 0 :(得分:0)

在视图加载时使用performSelectorInBackground:@selector(<A SELECTOR>)将wav文件加载到内存中。然后在需要时播放声音;)

希望这有帮助!

答案 1 :(得分:0)

最后我发现使用AVAudioPlayer允许我在viewDidLoad中使用我需要的预载(见下文)进行预加载:

[audioPlayer prepareToPlay];

然后在按钮方法中使用(见下文),我需要按需播放声音。

[audioPlayer play];

加里