Я думаю, что вы, возможно, визуализируете это неправильно.Экземпляр AVMutableAudioMix на самом деле является свойством класса AVPlayerItem.Сначала захватите дорожку ресурса, используя trackWithMediaType: и создайте AVMutableAudioMixInputParameters экземпляр, используя audioMixInputParametersWithTrack: .Установите любые аудио свойства в этом экземпляре входных параметров (например, setVolume: atTime).
Затем вам необходимо добавить входные параметры в экземпляр AVMutableAudioMix.Затем вам нужно добавить это к элементу игрока.Я знаю, это звучит странно, но именно так AVFoundation работает практически со всем.Термины летают повсюду, но почти во всем есть иерархия.
Итак, общая иерархия такова: player-> playerItem-> audioMix-> inputParameters.Код для уменьшения громкости с 5 до 7 секунд должен выглядеть примерно так:
AVAssetTrack *audioTrack = [[self.player.currentItem.asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVMutableAudioMixInputParameters *params = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
[params setVolumeRampFromStartVolume:1.0 toEndVolume:0.5 timeRange:CMTimeRangeMake(CMTimeMake(5,1), CMTimeMake(2,1))];
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = [NSArray arrayWithObject:params];
self.player.currentItem.audioMix = audioMix;
Насколько это возможно динамически, вы можете, но только с локальными файлами (в отличие от потоковой передачи изинтернет).Я, вероятно, попытался бы сохранить этот audioMix в качестве ивара и пытаться сбрасывать параметры каждый раз, когда вы хотите, чтобы что-то произошло.Если это не сработает, возможно, вам придется каждый раз создавать экземпляр AVMutableAudioMix, не уверен.
Также см. этот пост и этот .