调整 AVAudioMix 音量属性在 iOS9 中没有效果
Posted
技术标签:
【中文标题】调整 AVAudioMix 音量属性在 iOS9 中没有效果【英文标题】:Adjusting AVAudioMix volume property has no effect in iOS9 【发布时间】:2015-09-21 14:44:39 【问题描述】:我有一个应用程序,它通过 AVMutableComposition 将本地文件加载到 avPlayer 中,它可能有多达 6 个音频和视频轨道作为合成的一部分。
我有一个 UISlider,用于调整播放器中每个音轨的音量。
以下是用于更新音量的代码。
- (void)updateVolumeForTake:(Take *)take
NSInteger trackID = // method that gets trackID
AVMutableAudioMix *audioMix = self.player.currentItem.audioMix.mutableCopy;
NSMutableArray *inputParameters = audioMix.inputParameters.mutableCopy;
AVMutableAudioMixInputParameters *audioInputParams = [inputParameters filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:kTrackIdPredicate, trackID]].firstObject;
[audioInputParams setVolume:myNewVolumeFloat atTime:myDesiredTime];
audioMix.inputParameters = inputParameters;
AVPlayerItem *playerItem = self.player.currentItem;
playerItem.audioMix = audioMix;
这目前在 appStore 中,自 ios6 以来一直存在,并且一直没有问题。 在运行 iOS9 的设备上,上述内容根本不起作用。我查看了发行说明,虽然其中提到了 AVFoundation,但我没有看到任何关于 AVAudioMix 的信息。我在 Google 上四处搜索,没有发现其他人遇到此问题。
我还尝试使用 AVPlayer 和 UISlider 创建一个新项目,但我看到了相同的行为。
我的问题如下,有没有其他人遇到过这个问题? 有人知道与此相关的已知错误吗?
【问题讨论】:
【参考方案1】:我找到了解决方案,但不幸的是不是一个确切的原因。
我不能说我完全理解为什么这解决了我的问题,但这里是解决方案,并试图解释为什么它解决了我遇到的问题。
- (void)updateVolumeForTake:(Take *)take
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
NSMutableArray *inputParameters = [self.inputParameters filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:kNotTrackIdPredicate, myTrackID]].mutableCopy;
AVCompositionTrack *track = (AVCompositionTrack *)[self.composition trackWithTrackID:myTrackID];
AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];
[audioInputParams setVolume:myDesiredVolume atTime:kCMTimeZero];
[inputParameters addObject:audioInputParams];
audioMix.inputParameters = inputParameters;
AVPlayerItem *playerItem = self.player.currentItem;
playerItem.audioMix = audioMix;
self.inputParameters = inputParameters;
正如您在上面看到的,我已经停止使用我的 AVAudioMix 及其 inputParameters 的可变副本,而是为 inputParameters 创建了一个新的 AVAudioMix 和 NSMutableArray。新的 inputParameters 数组是现有 inputParameters 的副本(从属性“self.inputParameters”引用)减去与我希望更改的轨道匹配的轨道。
其次,我使用我希望编辑音量的轨道创建 AVMutableAudioMixInputParameters 的新实例(之前我使用匹配的 trackID 引用现有参数并修改它们)。我编辑它,将其添加到我的新数组中,并使其成为 currentItem 的音频混合。
再次,我不能肯定地说为什么会修复它,但它确实对我有用,我想知道当我重新分配 playerItem 的 audioMix 时,是否所有可变副本都没有被发现不同,这就是为什么我没有听到音量有任何变化。 (尽管这似乎值得怀疑)。
无论如何我的问题已经解决了,我希望这可以帮助任何有类似问题的人。
【讨论】:
非常感谢!正是 5 年后解决了我的问题 :)以上是关于调整 AVAudioMix 音量属性在 iOS9 中没有效果的主要内容,如果未能解决你的问题,请参考以下文章
通过移动设备音量调高按钮调整 chromecast 电视音量