使用AVAudioEngine进行淡入/淡出

4

我的应用程序动态添加和删除节点来供给mainMixerNode。当这种情况发生时,我会听到点击或爆炸声,因为音量没有淡出。

如何在建立连接时实现平滑过渡?我需要在我的AudioUnit中自己实现淡入淡出吗,还是AVAudioEngine可以更优雅地处理它?

1个回答

2

我的应用程序中有一个淡出效果,而不需要触摸AudioUnit(代码如下)。 您也可以将其调整为淡入效果。

请注意,我将计时器分配给成员变量,以便可以在其他点(viewWillDisappeardelloc等)处使其无效。我担心它听起来不够平滑,但我尝试了一下,效果很好。

- (void)fadeOutAudioWithDuration:(double)duration {
    double timerInterval = 0.1;
    NSNumber *volumeInterval = [NSNumber numberWithDouble:(timerInterval / duration)];
    self.fadeOutTimer = [NSTimer scheduledTimerWithTimeInterval:timerInterval target:self selector:@selector(fadeOutTimerDidFire:) userInfo:volumeInterval repeats:YES];
}

- (void)fadeOutTimerDidFire:(NSTimer *)timer {
    float volumeInterval = ((NSNumber *)timer.userInfo).floatValue;
    float currentVolume = self.audioEngine.mainMixerNode.outputVolume;
    float newValue = MAX(currentVolume - volumeInterval, 0.0f);
    self.audioEngine.mainMixerNode.outputVolume = newValue;
    if (newValue == 0.0f) {
        [timer invalidate];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接