AVAudioPlayer:声音重叠。

我制作了一个简单的应用程序,可以在其中记录自己,然后采样自己记录的内容。由于我喜欢发送垃圾邮件按钮,因此我使用自己的应用程序进行了尝试。结果是,大约有20种我自己说话重叠的声音,并造成了可怕的混乱。我将来如何预防这种情况? 那是我的代码: 。H
-(IBAction)record {

        TempRecFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithString:@\"VoiceFile\"]]];

        recorder = [[AVAudioRecorder alloc] initWithURL:TempRecFile settings:nil error:nil];
        [recorder setDelegate:self];
        [recorder prepareToRecord];
        [recorder record];

}

-(IBAction)playback {

    [recorder stop];

    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:TempRecFile error:nil];
    player.volume = 1;
    [player play];

}
稍后我想播放附加到多个按钮的多种声音,如果所有这些声音开始重叠,则用户的耳朵可能很快就会开始流血... :( 多个声音按钮的问题是:我需要将每种声音限制为仅与自身重叠。我该怎么做?     
已邀请:
在“播放”方法中,首先禁用按钮。初始化您的类时,将您的类设置为AVAudioPlayer的委托并实现协议AVAudioPlayerDelegate,特别是要捕获audioPlayerDidFinishPlaying:successfully:事件。在这种情况下,请重新启用该按钮。 因此,这将禁用按钮,播放声音,并在声音播放完毕后启用按钮。 现在,对于多个按钮,只需对每个按钮执行相同的操作。要注意的是,您需要跟踪每个按钮的AVAudioPlayer并知道哪个播放器与哪个按钮一起使用。 NSDictionary可以用于保留玩家列表以及键值。 编辑:要停止先前的播放并从头开始... 在类级别声明一个AVPlayer,而不是为每次按钮创建一个新的AVPlayer。按下按钮后,您可以向其发送seekToTime消息以从头开始。对于多个按钮,具有多个类级别的AVPlayers。 编辑:如果您使用AVAudioPlayer类,则可以执行相同的操作来设置currentTime属性。     

要回复问题请先登录注册