ios - 单个 AVPlayerItem 中的两个声音淡入淡出

标签 ios audio fadein fadeout avplayer

感谢stackoverflow user我能够淡入或淡出一个 AVPlayerTrack。但我找不到在一条轨道上同时执行这两项操作的方法。

这是我正在尝试使用的:

-(void)fadeOutVolume
{
    AVPlayerItem *myAVPlayerItem = self.songPlayer.currentItem;

    AVAsset *myAVAsset = myAVPlayerItem.asset;
    NSArray *audioTracks = [myAVAsset tracksWithMediaType:AVMediaTypeAudio];

    NSMutableArray *allAudioParams = [NSMutableArray array];
    for (AVAssetTrack *track in audioTracks) {

       AVMutableAudioMixInputParameters *audioInputParams = 
        [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];

       CMTime fadeDuration = CMTimeMakeWithSeconds(5, 600);
       CMTime fadeOutStartTime = 
         CMTimeMakeWithSeconds(CMTimeGetSeconds(myAVPlayerItem.duration)-5, 600);
       CMTime fadeInStartTime = CMTimeMakeWithSeconds(0, 600);


       [audioInputParams setVolumeRampFromStartVolume:1.0 
                                           toEndVolume:0 
                      timeRange:CMTimeRangeMake(fadeOutStartTime, fadeDuration)];

       AVMutableAudioMixInputParameters *audioInputParams2 = 
        [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];

       [audioInputParams2 setVolumeRampFromStartVolume:0.0 
                                           toEndVolume:1.0  
                        timeRange:CMTimeRangeMake(fadeInStartTime, fadeDuration)];


        [allAudioParams addObject:audioInputParams];
        [allAudioParams addObject:audioInputParams2];

    }

    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];

    [audioMix setInputParameters:allAudioParams];
    [myAVPlayerItem setAudioMix:audioMix];

}

如果我评论 [allAudioParams addObject:audioInputParams]; 或另一行,这会起作用。但是我不能同时拥有两个输入参数。

最佳答案

我发现了问题。我不需要两个 audioInputParams。事实上,它们似乎以某种方式覆盖了。

如果我删除新的 audioInputParam 并执行两个设置的斜坡,则一切正常。其实这有点误导。 SetRamp 似乎将被覆盖,而“addObject”是覆盖的对象。我在 for 部分得到了这段代码:

AVMutableAudioMixInputParameters *audioInputParams = 
        [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];


CMTime fadeDuration = CMTimeMakeWithSeconds(5, 600);
CMTime fadeOutStartTime = CMTimeMakeWithSeconds(CMTimeGetSeconds(myAVPlayerItem.duration)-5, 600);
CMTime fadeInStartTime = CMTimeMakeWithSeconds(0, 600);

[audioInputParams setVolumeRampFromStartVolume:1.0 toEndVolume:0 timeRange:CMTimeRangeMake(fadeOutStartTime, fadeDuration)];

[audioInputParams setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:CMTimeRangeMake(fadeInStartTime, fadeDuration)];

[allAudioParams addObject:audioInputParams];

感谢@Mundi 试图帮助我。

关于ios - 单个 AVPlayerItem 中的两个声音淡入淡出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17922261/

相关文章:

android - 在扬声器和听筒上同时播放相同的音乐文件,Android

javascript - 为什么 fadeIn() 不工作?

iphone - 访问 NSManagedObject 的数据属性给我带来了内存问题

ios - 有没有办法以编程方式在 IB 中设置约束?

javascript - 是否可以预取网页音频并尽早播放,使其与视频同步?是否有一个javascript命令?

windows - 如何使用 NAudio 获取当前使用 powershell 播放音频的应用程序的名称?

javascript - jQuery UI #Accordion 加载然后 fadeIN...怎么样?

jquery - 在淡出完成之前不要淡入?

ios - 测量 iphone 打开和关闭的次数

ios - 更新我的应用程序的旧版本