From ce7bf8f76c41779d0f82309fc4abe27a794cd311 Mon Sep 17 00:00:00 2001 From: kimvde Date: Mon, 17 Mar 2025 08:20:35 -0700 Subject: [PATCH] Composition demo: use isLooping for background audio By using this setter, the duration of the background audio doesn't need to be computed anymore. It will also repeat the audio track if the video track is longer. PiperOrigin-RevId: 737621668 --- .../CompositionPreviewActivity.java | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java b/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java index 397e12c64a..37e18d5e0f 100644 --- a/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java +++ b/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java @@ -221,9 +221,6 @@ public final class CompositionPreviewActivity extends AppCompatActivity { videoEffectsBuilder.add(Presentation.createForHeight(resolutionHeight)); } ImmutableList videoEffects = videoEffectsBuilder.build(); - // Preview requires all sequences to be the same duration, so calculate main sequence duration - // and limit background sequence duration to match. - long videoSequenceDurationUs = 0; for (int i = 0; i < selectedMediaItems.length; i++) { if (selectedMediaItems[i]) { SonicAudioProcessor pitchChanger = new SonicAudioProcessor(); @@ -240,7 +237,6 @@ public final class CompositionPreviewActivity extends AppCompatActivity { /* audioProcessors= */ ImmutableList.of(pitchChanger), /* videoEffects= */ videoEffects)) .setDurationUs(presetDurationsUs[i]); - videoSequenceDurationUs += presetDurationsUs[i]; mediaItems.add(itemBuilder.build()); } } @@ -248,7 +244,7 @@ public final class CompositionPreviewActivity extends AppCompatActivity { List compositionSequences = new ArrayList<>(); compositionSequences.add(videoSequence); if (includeBackgroundAudioTrack) { - compositionSequences.add(getAudioBackgroundSequence(Util.usToMs(videoSequenceDurationUs))); + compositionSequences.add(getAudioBackgroundSequence()); } SonicAudioProcessor sampleRateChanger = new SonicAudioProcessor(); sampleRateChanger.setOutputSampleRateHz(8_000); @@ -264,19 +260,11 @@ public final class CompositionPreviewActivity extends AppCompatActivity { .build(); } - private EditedMediaItemSequence getAudioBackgroundSequence(long durationMs) { - MediaItem audioMediaItem = - new MediaItem.Builder() - .setUri(AUDIO_URI) - .setClippingConfiguration( - new MediaItem.ClippingConfiguration.Builder() - .setStartPositionMs(0) - .setEndPositionMs(durationMs) - .build()) - .build(); + private static EditedMediaItemSequence getAudioBackgroundSequence() { + MediaItem audioMediaItem = new MediaItem.Builder().setUri(AUDIO_URI).build(); EditedMediaItem audioItem = new EditedMediaItem.Builder(audioMediaItem).setDurationUs(59_000_000).build(); - return new EditedMediaItemSequence.Builder(audioItem).build(); + return new EditedMediaItemSequence.Builder(audioItem).setIsLooping(true).build(); } private void previewComposition() {