ユーザーがキューに追加する前にトラックを試聴できるようにする音楽プレーヤーアプリをプログラミングしています(これに使用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
とうまくフェードインしますが、一時停止したところからトラックを再開したいのです。
と何か関係があると思いますが、わかりtimeRange
ません。アイデアがあることを願っています。:)