AVAudioPlayer 失真
Posted
技术标签:
【中文标题】AVAudioPlayer 失真【英文标题】:AVAudioPlayer Distortion 【发布时间】:2014-08-27 12:36:05 【问题描述】:我有一个 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% 的时间会发生失真的播放。有时它会按预期播放声音效果。谢谢。
【问题讨论】:
【参考方案1】:我认为你面临的可能有两个原因......
(1) 只是因为你想播放声音时一直在调用方法,而AVAudioPlayer一直在用方法分配。
您应该将 alloc 方法放在其他任何地方,然后播放或停止或准备播放函数使用。
所以,播放器只分配一次,但可以根据需要多次播放声音。
(2) 否则问题出在声音文件中。只需在 PC 中播放该文件并检查即可。
希望这会有所帮助。而不是在这里用更多的代码告诉这里。
【讨论】:
文件没问题。我还测试了运行正常的应用程序(不是我自己的)的文件。我还尝试过移动分配器并使用单个音频文件进行初始化以进行测试。仍然得到失真。 你没有得到我。我想说的是,如果您分配了 AVAudioPlayer,那么您必须在再次分配之前释放 AVAudioPlayer 并再次播放声音。如果声音和设备没有问题,那么应该只有一件事。它是 AVAudioPlayer 播放两次。所以,你听到的是两种声音而不是一种声音。所以,管理alloc和release,问题就会自动解决。 我明白了。我在 viewDidLoad 中分配一次并使用一个音频文件进行初始化。然后我在 AVAudioPlayer 的单个实例上调用 play - 该文件永远不会因我的测试而改变。我应该可以多次播放 AVAudioPlayer 而无需每次都释放。【参考方案2】:我在代码的其他地方有一个不相关的保留周期。快速检查分析器显示有两个活生生的 VC 实例处理声音效果。固定保留周期后,失真(双重播放)就解决了。
【讨论】:
以上是关于AVAudioPlayer 失真的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序在 IPOD 中保持空闲超过 48 小时时,MPMoviePlayerController 和 AVAudioPlayer 的声音会失真