Xcode AVMutableAudioMix简单问题

Xcode AVMutableAudioMix简单问题,xcode,avfoundation,avplayer,Xcode,Avfoundation,Avplayer,我只是想了解,我能用这个AVMutableAudioMix类做些什么,一旦我将PlayerItems(资产)插入AudioMix,我能用AVPlayer一次播放一个或同时播放其中的一部分并动态更改参数吗 我想你可能没有正确地想象它。AVMutableAudioMix实例实际上是AVPlayerItem类上的一个实例。首先获取资产使用的轨迹,并使用创建实例。在inputparameters实例上设置任何音频属性(例如setVolume:atTime) 然后需要将输入参数添加到AVMutableAu

我只是想了解,我能用这个AVMutableAudioMix类做些什么,一旦我将PlayerItems(资产)插入AudioMix,我能用AVPlayer一次播放一个或同时播放其中的一部分并动态更改参数吗

我想你可能没有正确地想象它。AVMutableAudioMix实例实际上是AVPlayerItem类上的一个实例。首先获取资产使用的轨迹,并使用创建实例。在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,并尝试在每次您希望发生某些事情时重置参数。如果这不起作用,您可能每次都必须创建一个AVMutableAudioMix实例,但不确定


另请参见和

我想你可能没有正确地想象它。AVMutableAudioMix实例实际上是AVPlayerItem类上的一个实例。首先获取资产使用的轨迹,并使用创建实例。在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,并尝试在每次您希望发生某些事情时重置参数。如果这不起作用,您可能每次都必须创建一个AVMutableAudioMix实例,但不确定

另请参见和