У меня есть постепенное исчезновение в приложении, не касаясь 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];
}
}