如何让多个音频流在iOS中重叠播放?

如何让多个音频流在iOS中重叠播放?,ios,avaudioplayer,Ios,Avaudioplayer,我将屏幕的三个区域定义为“热点”,因此,如果检测到任何触摸,它将播放特定于区域的声音。这一切都很好,除了如果我点击区域1,然后点击区域2,区域2的声音会切断区域1。我想要任何区域的声音播放到完成。所以,如果我点击区域1,然后点击区域2,区域1的声音将继续播放,区域2将在区域1上播放 以下是我目前拥有的代码(工作正常,但不允许音频重叠): if(点y76和点x200) { NSURL*url=[NSURL fileURLWithPath:[NSString stringWithFormat:@“%

我将屏幕的三个区域定义为“热点”,因此,如果检测到任何触摸,它将播放特定于区域的声音。这一切都很好,除了如果我点击区域1,然后点击区域2,区域2的声音会切断区域1。我想要任何区域的声音播放到完成。所以,如果我点击区域1,然后点击区域2,区域1的声音将继续播放,区域2将在区域1上播放

以下是我目前拥有的代码(工作正常,但不允许音频重叠):

if(点y<316和点y>76和点x<220和点x>200)
{
NSURL*url=[NSURL fileURLWithPath:[NSString stringWithFormat:@“%@/sound1.mp3”,[[NSBundle mainBundle]resourcePath]];
n错误*错误;
audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url错误:&错误];
audioPlayer.numberOfLoops=0;
如果(音频播放器==零)
NSLog([错误描述]);
其他的
[音频播放器播放];
}
如果(点y<316和点y>76和点x<260和点x>240)
{
NSURL*url=[NSURL fileURLWithPath:[NSString stringWithFormat:@“%@/sound2.mp3”,[[NSBundle mainBundle]resourcePath]];
n错误*错误;
audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url错误:&错误];
audioPlayer.numberOfLoops=0;
如果(音频播放器==零)
NSLog([错误描述]);
其他的
[音频播放器播放];
}
如果(点y<316和点y>76和点x<300和点x>280)
{
NSURL*url=[NSURL fileURLWithPath:[NSString stringWithFormat:@“%@/sound3.mp3”,[[NSBundle mainBundle]resourcePath]];
n错误*错误;
audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url错误:&错误];
audioPlayer.numberOfLoops=0;
如果(音频播放器==零)
NSLog([错误描述]);
其他的
[音频播放器播放];
}

有人能帮我找出如何使这些声音重叠吗?谢谢

看起来您只是在为每个案例重新分配audioPlayer。如果audioPlayer已经在播放一种声音,然后您将其重新指定为播放另一种声音,则原始audioPlayer将被销毁并停止播放

我过去解决这个问题的方法是设置多个AVPlayer对象,如:

AVPlayer *_player[MAX_CHANNELS];
NSUInteger _currentChannel;
然后玩:

_player[_currentChannel] = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
_currentChannel++;
if (_currentChannel == MAX_CHANNELS) {
    _currentChannel = 0;
}

这样,您就不会得到无限多的重叠音效,但您可以预定义一些“合理”的数字作为最大声道,并在下一个音效停止第一个音效之前获得如此多的重叠音效。

看起来您只是在为每种情况重新分配audioPlayer。如果audioPlayer已经在播放一种声音,然后您将其重新指定为播放另一种声音,则原始audioPlayer将被销毁并停止播放

我过去解决这个问题的方法是设置多个AVPlayer对象,如:

AVPlayer *_player[MAX_CHANNELS];
NSUInteger _currentChannel;
然后玩:

_player[_currentChannel] = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
_currentChannel++;
if (_currentChannel == MAX_CHANNELS) {
    _currentChannel = 0;
}
这样你就不会得到无限多的重叠声音效果,但是你可以预先定义一些“合理”的数字作为MAX_通道,在下一个声音停止第一个声音之前有那么多的重叠效果