2016-04-18 4 views
1

Мое приложение динамически добавляет и удаляет узлы, подающие mainMixerNode. Когда это произойдет, я слышу щелчок или поп, потому что громкость не исчезает.fade in/out с AVAudioEngine

Как добиться плавных переходов при выполнении соединений? Нужно ли мне реализовать Fade самостоятельно в моем AudioUnit или может AVAudioEngine обрабатывать его более элегантно?

ответ

1

У меня есть постепенное исчезновение в приложении, не касаясь AudioUnit (код ниже). Вы можете приспособить это, чтобы сделать затухание.

Обратите внимание, что я назначаю таймер члену var, поэтому я могу сделать его недействительным в других точках (, 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]; 
    } 
}