我的应用程序动态地添加和删除节点馈送mainMixerNode
. 发生这种情况时,我会听到咔哒声或爆音,因为音量没有减弱。
建立连接时如何实现平滑过渡?我需要在我的 AudioUnit 中自己实现淡入淡出,还是 AVAudioEngine 可以更优雅地处理它?
我的应用程序动态地添加和删除节点馈送mainMixerNode
. 发生这种情况时,我会听到咔哒声或爆音,因为音量没有减弱。
建立连接时如何实现平滑过渡?我需要在我的 AudioUnit 中自己实现淡入淡出,还是 AVAudioEngine 可以更优雅地处理它?
我在我的应用程序中淡出而不接触 AudioUnit(代码如下)。您也可以对其进行调整以进行淡入。
请注意,我将计时器分配给成员 var,因此我可以在其他点(viewWillDisappear
、delloc
等)使其无效。我担心它听起来不流畅,但我试了一下,效果很好。
- (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];
}
}