この AVMutableAudioMix クラスで正確に何ができるかを理解したいのですが、PlayerItems (アセット) を AudioMix に挿入したら、AVPlayer で一度に 1 つまたはいくつかを同時に再生し、パラメーターを変更できますか?動的に?
1 に答える
あなたはそれを間違って視覚化しているのではないかと思います。AVMutableAudioMixインスタンスは、実際にはAVPlayerItemクラスのプロパティです。まず、tracksWithMediaType:を使用してアセットのトラックを取得し、audioMixInputParametersWithTrack :を使用してAVMutableAudioMixInputParametersインスタンスを 作成します。そのinputparametersインスタンスにオーディオプロパティを設定します(たとえば、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をivarとして保持し、何かが発生するたびにparamsをリセットしようとします。それが機能しない場合は、毎回AVMutableAudioMixのインスタンスを作成する必要があるかもしれません。