0

ユーザーがキューに追加する前にトラックを試聴できるようにする音楽プレーヤーアプリをプログラミングしています(これに使用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ません。アイデアがあることを願っています。:)

4

1 に答える 1

0

いくつかの提案。まず、seekToTimeを実行する前にフェードを設定します。次に、CMTimeMakeWithSecondsにはもっと大きなタイムスケールを使用します-おそらく60000かそこらです。CMTimeの詳細については、 http: //warrenmoore.net/understanding-cmtimeを参照 してください。呼び出しの場合、timeRangeは正確な秒の境界にのみ当てはまり、秒の端数には当てはまらないため、タイムスケールは重要です。

于 2013-02-21T12:34:20.093 に答える