У меня есть несколько аудиофайлов, которые мне нужно вставить в файл AVMutableComposition
. Каждый звук имеет разную громкость. Для этого я создал AVMutableTrackComposition
и AVAssetTrack
для каждого аудиофайла. Поэтому я изменяю громкость для каждой дорожки, используя экземпляр AVMutableAudioMix
.
let composition = AVMutableComposition()
var trackMixArray = NSMutableArray()
for audio in layer{
let trackAudio:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID())
let file = project.stringByAppendingPathComponent(audio.name)
let soundAsset = AVURLAsset(URL: NSURL(fileURLWithPath: file), options: option as [NSObject : AnyObject])
let sounds = soundAsset.tracksWithMediaType(AVMediaTypeAudio)
var sound:AVAssetTrack = sounds[0] as! AVAssetTrack
let duration:CMTime = sound.timeRange.duration
let audioTimeRange:CMTimeRange = CMTimeRangeFromTimeToTime(kCMTimeZero, duration)
let start:CMTime = CMTimeMakeWithSeconds(audio.start.toDouble()!, 600)
let stop:CMTime = CMTimeMakeWithSeconds(audio.stop.toDouble()!, 600)
let trackMix = AVMutableAudioMixInputParameters(track: trackAudio)
trackMix.setVolume(audio.volume, atTime: kCMTimeZero)
trackMixArray.addObject(trackMix)
trackAudio.insertTimeRange(audioTimeRange, ofTrack: sound, atTime: start, error: nil)
}
let audioMix = AVMutableAudioMix()
audioMix.inputParameters = trackMixArray as [AnyObject]
Использование одного AVMutableCompositionTrack
с несколькими связанными с ним AVAssetTrack
не позволяет мне изменять громкость для каждой дорожки.
let trackMix = AVMutableAudioMixInputParameters(track: sound)
trackMix.setVolume(audio.volume, atTime: kCMTimeZero)
trackMixArray.addObject(trackMix)
Можно ли изменить громкость прямо из AVAssetTrack
?