首页 文章

AVMutableAudioMix - 无法淡出

提问于
浏览
2

我正试图淡出一个AVComposition轨道(它是一个视频的音轨) .

我可以在开始时将其淡化没问题,但是最后我很难将它淡出来 . 这是我的代码:

AVMutableAudioMixInputParameters *audioMixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:compositionAudioTrack];

[audioMixParameters setVolume:0.0 atTime:kCMTimeZero];
[audioMixParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(150, kVideoFPS))];

CMTime fadeOutBegin = CMTimeMake((length - 5) * kVideoFPS, kVideoFPS);
[audioMixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:CMTimeRangeMake(fadeOutBegin, totalDuration)];

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = [NSArray arrayWithObject:audioMixParameters];

length 是一个NSUInteger,它是视频的长度,以秒为单位 .

totalDuration 是视频总持续时间的CMTime,时间刻度为 kVideoFPS

kVideoFPS 是一个值为30的常量

我的目标是从乐曲结束开始淡出5秒 . 我尝试过各种各样的事情,比如CMTimeMakeWithSeconds . 我也改变了淡入淡出的值,并且它工作正常(在开始时将音量从1.0淡化到0.0) .

任何想法非常感谢!

2 回答

  • 0

    对于那些使用 AVAudioMix / AVMutableAudioMix 与流媒体一起遇到麻烦的人,请注意,根据Apple,它目前仅支持基于文件的资产 .

    Source:

    https://developer.apple.com/library/content/qa/qa1716/_index.html

    (靠近技术说明的底部)

  • 1

    CMTimeRangeMake 的第二个参数是 CMTimeRange 的持续时间,而不是时间范围的结束时间(ref):

    CMTimeRange CMTimeRangeMake(CMTime start, CMTime duration);

    尝试这个淡出最后5秒的构图:

    CMTime fadeOutEnd = CMTimeMake(5 * kVideoFPS, kVideoFPS);
    [audioMixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:CMTimeRangeMake(fadeOutBegin, fadeOutEnd)];
    

相关问题