AVAudioMixでオーディオの調節を行う
( iOS )先日、心霊動画アプリ「もう一度ご覧いただこう」のアップデートしました。
その修正内容を書き綴ろうと思います。この動画アプリでは、録画した動画の同じタイムライン上にナレーションが入るのですが、あまりに録画した動画がにぎやかすぎるとナレーションがほとんど聞き取れない問題がありました。
対策としては、ナレーションの音声はそのままにして録画した動画の音声を小さくするように調整すること。AVAudioMix
、AVMutableAudioMixInputParameters
をうまく利用することで解決しました。
実装
基本的には対象のメディア情報に対して、オーディオを制御する用のAVMutableAudioMixInputParameters
を利用します。
AVMutableComposition avComposition;
(snip)
// movie sound
AVMutableCompositionTrack* compositionAudioTrack = [avComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
// オーディオのメディア情報をもとにオーディオミックス用のパラメータを生成する
AVMutableAudioMixInputParameters *mixInputParameters = [AVMutableAudioMixInputParameters
audioMixInputParametersWithTrack:audioTrack];
// 音量の調整
[mixInputParameters setVolumeRampFromStartVolume:0.2f toEndVolume:0.2f
timeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)];
// 入力パラメータをオーディオミックスに渡す。
mutableAudioMix = [AVMutableAudioMix audioMix];
mutableAudioMix.inputParameters = @[mixInputParameters];
- (BOOL)getVolumeRampForTime:(CMTime)time startVolume:(float *)startVolume endVolume:(float *)endVolume timeRange:(CMTimeRange *)timeRange
これでどの時間からどのくらいの間、音量をどのくらいにするのかの設定を行えるので、ここでその制御を行います。自分の場合はずっと音量を低くできればよかったので上記のような設定になっています。
AVAssetExportSession *assetExportSession;
(snip)
// 音声の制御
assetExportSession.audioMix = mutableAudioMix;
設定が終われば、AVAssetExportSession
のaudioMix
に格納すれば、設定が反映されているはずです。
これでナレーションが動画がうるさくてもしっかり聞こえるようになったので、よりテレビ番組のような感じに近づけられたかと思います!!!