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之后,您是否尝试过检查它的内容?