use*_*370 6 audio cocoa-touch objective-c avaudioplayer ios
我有一个相对简单的应用程序播放声音使用AVAudioPlayer,像这样:
NSURL *file3 = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ball_bounce.aiff", [[NSBundle mainBundle] resourcePath]]];
player3 = [[AVAudioPlayer alloc] initWithContentsOfURL:file3 error:nil];
[player3 prepareToPlay];
Run Code Online (Sandbox Code Playgroud)
后来被叫去玩,像这样:
[player3 play];
Run Code Online (Sandbox Code Playgroud)
但是这种声音在多个地方被调用(与弹跳球碰撞)很多次.有时,球会以足够快的速度击中两个东西,当第二次碰撞时,第一次弹跳的声音仍在播放.第二次弹跳然后不会发出声音.每次碰撞时如何让它发出声音,即使它涉及发出的声音与已播放的声音重叠?
任何帮助是极大的赞赏.
解决此问题的一种方法是,AVAudioPlayer如果前一个实例已经在播放,则创建一个新实例:
if([player3 isPlaying]) {
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[player3 url]];
[newPlayer setDelegate:self];
[newPlayer play];
}
Run Code Online (Sandbox Code Playgroud)
然后,在委托方法中audioPlayerDidFinishPlaying:successfully:,您应该向玩家发送消息-release:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
if(player != player3) {
[player release];
}
}
Run Code Online (Sandbox Code Playgroud)
这就是它必须的方式,因为您确实需要为每个并发声音播放一个新的源缓冲区。:(
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |