如何解决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属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。