AVMutableAudioMix简单的问题

时间:2011-06-10 10:09:49

标签: xcode avfoundation avplayer

只是想了解一下,我能用AVMutableAudioMix类做些什么,一旦我将PlayerItems(Assets)插入到AudioMix中,我可以一次播放一个或者用AVPlayer同时播放其中一些动态更改参数?

1 个答案:

答案 0 :(得分:3)

我认为您可能会错误地将其可视化。 AVMutableAudioMix实例实际上是AVPlayerItem类上的property。首先使用tracksWithMediaType:抓取资产的跟踪,然后使用AVMutableAudioMixInputParameters创建audioMixInputParametersWithTrack:个实例。在该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;

至于动态执行此操作,您可以,但只能使用本地文件(而不是从Internet流式传输)。我可能会尝试将此audioMix保留为ivar,并尝试在每次想要发生某些事情时重置params。如果这不起作用,您可能每次都必须创建一个AVMutableAudioMix实例,不确定。

另见this postthis