AVAudioPlayer:声音重叠

时间:2011-05-01 23:14:09

标签: iphone audio avaudioplayer avfoundation

我制作了一个简单的应用程序,我可以录制自己,然后对我录制的内容进行抽样。由于我喜欢垃圾邮件按钮,我尝试使用自己的应用程序。结果是,大约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];

}

后来我想播放附加在多个按钮上的多个声音,如果所有这些声音都开始重叠,那么用户耳朵很可能会很快开始流血...... :(

多个声音按钮的问题是:我需要限制每个声音只与自身重叠。我该怎么办呢?

1 个答案:

答案 0 :(得分:3)

在Playback方法中,首先禁用按钮。当您初始化类时,将您的类设置为AVAudioPlayer的委托并实现协议AVAudioPlayerDelegate,特别是您要捕获audioPlayerDidFinishPlaying:successful:event。在这种情况下,请重新启用该按钮。

因此,这将禁用按钮,播放声音,当声音播放完毕后启用按钮。

现在,对于多个按钮,只需对每个按钮执行相同的操作。问题是你需要跟踪每个按钮的AVAudioPlayer并知道哪个玩家使用哪个按钮。可以使用NSDictionary来保留玩家列表以及关键值。

编辑:停止上一次播放并在开始时重新开始......

在类级别声明AVPlayer,而不是为每个按钮创建一个新的按钮。按下按钮时,您可以向其发送seekToTime消息,以便在开始时重新开始。对于多个按钮有多个级别级别的AVPlayers。

编辑:如果您使用AVAudioPlayer类,您可以设置currentTime属性。

相关问题