AVAudioPlayer失真

时间:2014-08-27 12:36:06

标签: ios objective-c avfoundation avaudioplayer avplayer

我有一个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%的时间都会发生失真播放。有时它会按预期播放音效。谢谢。

2 个答案:

答案 0 :(得分:0)

我认为你可能有两个原因......

(1)这只是因为你想要播放声音并且AVAudioPlayer一直用方法分配时一直在调用方法。

你应该把alloc方法放在其他任何地方,然后只是播放或停止或准备播放功能使用。

因此,播放器只分配一次,但可以根据需要播放多次。

(2)否则问题出在声音文件中。只需在PC中播放该文件并检查。

希望这会有所帮助。而不是只是告诉这里更多的代码。

答案 1 :(得分:0)

我的代码中的其他地方有一个不相关的保留周期。在剖析器中快速检查显示有两个VC处理声音效果的实例。一旦保留周期得到修复,失真(双重播放)就会得到解决。