在我的应用程序中,只要应用程序开始播放无限循环的背景声音,我就会启动AVAudioPlayer。这个背景声音应该在应用程序打开的整个时间播放。
当我打开应用程序时,背景声音正确启动,但是当我创建另一个播放器并开始另一个声音时(例如,当我触摸显示屏时),第二个声音开始播放,背景声音由于某种原因停止。
// This should start the background sound. _audioPlayer is declared in the header file.
_audioPlayer = [[AudioPlayer alloc] init];
[_audioPlayer soundPlay:@"/rainforestambience.wav" withLoops:-1];
// Starts another sound later.
AudioPlayer *monkeyPlayer = [[AudioPlayer alloc] init];
[monkeyPlayer soundPlay:@"/jungle1.wav" withLoops:1];
// Play function in my AudioPlayer class.
AVAudioPlayer *player;
- (void) soundPlay:(NSString *)filePath withLoops: (int)loops
{
NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
resourcePath = [resourcePath stringByAppendingString:filePath];
NSLog(@"Path to play: %@", resourcePath);
NSError* err;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:resourcePath] error:&err];
player.numberOfLoops = loops;
[player prepareToPlay];
if(err) {
NSLog(@"Failed with reason: %@", [err localizedDescription]);
} else {
[player play];
}
}
编辑:通过更改我的AudioPlayer类中的一行来修复它。
而不是
AVAudioPlayer *player;
在AudioPlayer.m文件中,我将Variable移动到声明空间中的头文件中。现在它完美且按预期工作。 :)
答案 0 :(得分:0)
我猜你应该通过执行performSelectorOnMainThread调用另一个线程中的另一个玩家。
AVAudioPlayer的两个实例可能会给您带来这样的问题。
答案 1 :(得分:0)
嗯,你说,有2个AVAudioPlayers。
我认为第一名球员是_audioPlayer,第二名球员是monkeyPlayer
_audioPlayer正在播放背景。 当你调用第二个声音(monkeyPlayer)时,只需停止_audioPlaer
即
[_audioPlayer stopPlay];
[monkeyPlayer Play];
它将停止背景音乐。