【问题标题】:AVMutableAudioMix simple questionAVMutableAudioMix 简单问题
【发布时间】:2011-06-10 10:09:48
【问题描述】:

只是想了解一下,我可以用这个 AVMutableAudioMix 类做什么,一旦我将 PlayerItems(资产)插入到 AudioMix 中,我可以一次播放它们还是使用 AVPlayer 同时播放其中一些?动态改变参数?

【问题讨论】:

    标签: xcode avfoundation avplayer


    【解决方案1】:

    我认为您可能将其可视化不正确。 AVMutableAudioMix 实例实际上是 AVPlayerItem 类上的 property。首先使用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,并在每次您希望发生某些事情时尝试重置参数。如果这不起作用,您可能必须每次都创建一个 AVMutableAudioMix 实例,不确定。

    另见this postthis

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2011-01-29
      • 2017-12-10
      • 2018-03-07
      相关资源
      最近更新 更多