我有一个iOS应用程序,使用AVPlayer播放一些视频。我也有一个AVAudioPlayer实例,我用来播放按钮时播放音效,例如开始播放并停止播放。这两个都在同时“玩”。这样可以正常工作,但声音效果似乎是双倍的(同时播放两次)或声音过大。听起来它听起来像是在播放两次。我正在触发这样的声音效果:
- (void)playSFXForAction:(ActionSFX)action
{
NSURL *sfx;
switch (action) {
case ActionSFXStartRecord:
sfx = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"start-recording-fade" ofType:@"aiff"]];
break;
case ActionSFXStopRecord:
sfx = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"stop-recording-fade" ofType:@"aiff"]];
break;
case ActionSFXPreview:
sfx = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"buzz" ofType:@"aiff"]];
break;
default:
break;
}
NSError *error;
self.sfxPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:sfx error:&error];
[self.sfxPlayer play];
}
大约80%的时间都会发生失真播放。有时它会按预期播放音效。谢谢。
答案 0 :(得分:0)
我认为你可能有两个原因......
(1)这只是因为你想要播放声音并且AVAudioPlayer一直用方法分配时一直在调用方法。
你应该把alloc方法放在其他任何地方,然后只是播放或停止或准备播放功能使用。
因此,播放器只分配一次,但可以根据需要播放多次。
(2)否则问题出在声音文件中。只需在PC中播放该文件并检查。
希望这会有所帮助。而不是只是告诉这里更多的代码。
答案 1 :(得分:0)
我的代码中的其他地方有一个不相关的保留周期。在剖析器中快速检查显示有两个VC处理声音效果的实例。一旦保留周期得到修复,失真(双重播放)就会得到解决。