我制作了一个简单的应用程序,我可以录制自己,然后对我录制的内容进行抽样。由于我喜欢垃圾邮件按钮,我尝试使用自己的应用程序。结果是,大约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];
}
后来我想播放附加在多个按钮上的多个声音,如果所有这些声音都开始重叠,那么用户耳朵很可能会很快开始流血...... :(
多个声音按钮的问题是:我需要限制每个声音只与自身重叠。我该怎么办呢?
答案 0 :(得分:3)
在Playback方法中,首先禁用按钮。当您初始化类时,将您的类设置为AVAudioPlayer的委托并实现协议AVAudioPlayerDelegate,特别是您要捕获audioPlayerDidFinishPlaying:successful:event。在这种情况下,请重新启用该按钮。
因此,这将禁用按钮,播放声音,当声音播放完毕后启用按钮。
现在,对于多个按钮,只需对每个按钮执行相同的操作。问题是你需要跟踪每个按钮的AVAudioPlayer并知道哪个玩家使用哪个按钮。可以使用NSDictionary来保留玩家列表以及关键值。
编辑:停止上一次播放并在开始时重新开始......
在类级别声明AVPlayer,而不是为每个按钮创建一个新的按钮。按下按钮时,您可以向其发送seekToTime消息,以便在开始时重新开始。对于多个按钮有多个级别级别的AVPlayers。
编辑:如果您使用AVAudioPlayer类,您可以设置currentTime属性。