使用 AVAudioPlayer 延迟播放声音
Posted
技术标签:
【中文标题】使用 AVAudioPlayer 延迟播放声音【英文标题】:Delay in playing sounds using AVAudioPlayer 【发布时间】:2010-03-31 04:22:08 【问题描述】:-(IBAction)playSound AVAudioPlayer *myExampleSound;
NSString *myExamplePath = [[NSBundle mainBundle] pathForResource:@"myaudiofile" ofType:@"caf"];
myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:myExamplePath] error:NULL];
myExampleSound.delegate = self;
[myExampleSound play];
我想在单击按钮时播放哔声。我已经使用了上面的代码。但是播放声音需要一些延迟。
请大家帮忙。
【问题讨论】:
【参考方案1】:延迟有两个来源。第一个更大,可以使用AVAudioPlayer
的prepareToPlay
方法消除。这意味着您必须将myExampleSound
声明为类变量并在需要它之前对其进行初始化(当然在初始化后调用prepareToPlay
):
- (void) viewDidLoadOrSomethingLikeThat
NSString *myExamplePath = [[NSBundle mainBundle]
pathForResource:@"myaudiofile" ofType:@"caf"];
myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:myExamplePath] error:NULL];
myExampleSound.delegate = self;
[myExampleSound prepareToPlay];
- (IBAction) playSound
[myExampleSound play];
这应该会将延迟降低到大约 20 毫秒,这可能适合您的需求。如果没有,您将不得不放弃AVAudioPlayer
并改用其他播放声音的方式(如Finch sound engine)。
另请参阅我自己关于 lags in AVAudioPlayer 的问题。
【讨论】:
【参考方案2】:AudioservicesPlaySystemSound
是一个选项。教程here,示例代码here。
【讨论】:
但是你不能用这个控制音量。 据我所知,您一次只能播放一种声音。 根据我的经验,AudioServicesPlaySystemSound()
的延迟比AVAudioPlayer#.play()
的延迟要长或更长。以上是关于使用 AVAudioPlayer 延迟播放声音的主要内容,如果未能解决你的问题,请参考以下文章
在其他 swift 文件中调用时,AVAudioPlayer 不会播放声音