Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 首先查看时间,然后从开始体积使用SetVolumeramps淡入_Objective C_Xcode_Audio_Avplayer - Fatal编程技术网

Objective c 首先查看时间,然后从开始体积使用SetVolumeramps淡入

Objective c 首先查看时间,然后从开始体积使用SetVolumeramps淡入,objective-c,xcode,audio,avplayer,Objective C,Xcode,Audio,Avplayer,我正在编写一个音乐播放器应用程序,允许用户在将曲目添加到队列之前预先播放曲目(我使用AVQueuePlayer) 如果用户选择了一首他想预先播放的歌曲,则当前歌曲将使用setVolumeRampFromStartVolume淡出,所选歌曲将开始播放。这个很好用 用户完成预听后,中断的歌曲将被恢复,我用seekToTime:completionHandler查找回被预听曲目中断的时间: 我的代码看起来有点像这样: - (void)stopPreview { if (previewInter

我正在编写一个音乐播放器应用程序,允许用户在将曲目添加到队列之前预先播放曲目(我使用
AVQueuePlayer

如果用户选择了一首他想预先播放的歌曲,则当前歌曲将使用
setVolumeRampFromStartVolume
淡出,所选歌曲将开始播放。这个很好用

用户完成预听后,中断的歌曲将被恢复,我用
seekToTime:completionHandler
查找回被预听曲目中断的时间:

我的代码看起来有点像这样:

- (void)stopPreview
{
    if (previewInterruptedItem) {
        [self addMediaItemToUserQueue:previewInterruptedItem afterCurrentItem:YES];
        previewInterruptedItem = nil;

        [[self queuePlayer] advanceToNextItem];

        [[[self queuePlayer] currentItem] seekToTime:previewInterruptedTime
                                   completionHandler:^(BOOL finished){
            if (finished) {
                [self fadeVolumeIn:YES];
            }
        }];

    }
}

- (void)fadeVolumeIn:(BOOL)fadeIn
{
    float startVolume = 0.1;
    float endVolume = 1.0;

    if (!fadeIn) {
        startVolume = 1.0;
        endVolume = 0.0;
    }


    AVAssetTrack *audioTrack = [[[self queuePlayer].currentItem.asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
    AVMutableAudioMixInputParameters *params = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];

    CMTime currentTime = [[[self queuePlayer] currentItem] currentTime];

    [params setVolumeRampFromStartVolume:startVolume
                             toEndVolume:endVolume
                               timeRange:CMTimeRangeMake(currentTime, CMTimeMakeWithSeconds(1, 1))];

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

    [self queuePlayer].currentItem.audioMix = audioMix;
}
这不是出于某种原因。如果我删除
seekTime
行,它会很好地淡入,但我真的希望曲目在暂停的地方恢复


我假设它与时间范围有关,但我无法理解。我希望你有个主意。:)

几点建议。首先,我会在你搜索之前设置你的淡入度。第二,我会为你的CMTimeMake使用一个更大的时间刻度(秒),可能是60000左右。有关CMTime的更多详细信息,请参阅,时间刻度非常重要,因为在通话中,您的时间范围只会落在精确的秒边界上,而不会落在几分之一秒上。

谢谢您的回答,@amergin。我尝试了你的两个建议,但不幸的是什么都没用。我仍然认为它与我在CMTimeRangeMake内设置的开始时间有关……在创建currentTime之后,您是否尝试过检查它的内容?