Add new effects helper util for unit tests.

PiperOrigin-RevId: 557515564
This commit is contained in:
samrobinson 2023-08-16 17:44:26 +01:00 committed by oceanjules
parent 9631923440
commit 27bc2e6844
3 changed files with 45 additions and 87 deletions

View File

@ -32,6 +32,8 @@ import static androidx.media3.transformer.TestUtil.FILE_WITH_SEF_SLOW_MOTION;
import static androidx.media3.transformer.TestUtil.FILE_WITH_SUBTITLES; import static androidx.media3.transformer.TestUtil.FILE_WITH_SUBTITLES;
import static androidx.media3.transformer.TestUtil.addAudioDecoders; import static androidx.media3.transformer.TestUtil.addAudioDecoders;
import static androidx.media3.transformer.TestUtil.addAudioEncoders; import static androidx.media3.transformer.TestUtil.addAudioEncoders;
import static androidx.media3.transformer.TestUtil.createAudioEffects;
import static androidx.media3.transformer.TestUtil.createPitchChangingAudioProcessor;
import static androidx.media3.transformer.TestUtil.createTransformerBuilder; import static androidx.media3.transformer.TestUtil.createTransformerBuilder;
import static androidx.media3.transformer.TestUtil.getDumpFileName; import static androidx.media3.transformer.TestUtil.getDumpFileName;
import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders; import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders;
@ -60,7 +62,6 @@ import androidx.media3.common.C;
import androidx.media3.common.Effect; import androidx.media3.common.Effect;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.audio.AudioProcessor;
import androidx.media3.common.audio.SonicAudioProcessor; import androidx.media3.common.audio.SonicAudioProcessor;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.effect.Presentation; import androidx.media3.effect.Presentation;
@ -361,7 +362,7 @@ public final class MediaItemExportTest {
EditedMediaItem editedMediaItem = EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)) new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects(new Effects(ImmutableList.of(sonicAudioProcessor), ImmutableList.of())) .setEffects(createAudioEffects(sonicAudioProcessor))
.build(); .build();
EditedMediaItemSequence sequence = EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem)); new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
@ -427,10 +428,11 @@ public final class MediaItemExportTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
EditedMediaItem editedMediaItem = EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build(); new EditedMediaItem.Builder(mediaItem)
.setEffects(createAudioEffects(sonicAudioProcessor))
.build();
transformer.start(editedMediaItem, outputPath); transformer.start(editedMediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
@ -446,10 +448,10 @@ public final class MediaItemExportTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
EditedMediaItem editedMediaItem = EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build(); new EditedMediaItem.Builder(mediaItem)
.setEffects(createAudioEffects(sonicAudioProcessor))
.build();
EditedMediaItemSequence editedMediaItemSequence = EditedMediaItemSequence editedMediaItemSequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem)); new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
Composition composition = Composition composition =
@ -971,10 +973,10 @@ public final class MediaItemExportTest {
SUPPORTED_OUTPUT_TYPE_ENCODED, /* sampleConsumerRef= */ null)) SUPPORTED_OUTPUT_TYPE_ENCODED, /* sampleConsumerRef= */ null))
.build(); .build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(new SonicAudioProcessor());
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
EditedMediaItem editedMediaItem = EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build(); new EditedMediaItem.Builder(mediaItem)
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
.build();
transformer.start(editedMediaItem, outputPath); transformer.start(editedMediaItem, outputPath);
ExportException exportException = ExportException exportException =

View File

@ -24,16 +24,15 @@ import static androidx.media3.transformer.TestUtil.FILE_AUDIO_VIDEO;
import static androidx.media3.transformer.TestUtil.FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S; import static androidx.media3.transformer.TestUtil.FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S;
import static androidx.media3.transformer.TestUtil.addAudioDecoders; import static androidx.media3.transformer.TestUtil.addAudioDecoders;
import static androidx.media3.transformer.TestUtil.addAudioEncoders; import static androidx.media3.transformer.TestUtil.addAudioEncoders;
import static androidx.media3.transformer.TestUtil.createAudioEffects;
import static androidx.media3.transformer.TestUtil.createPitchChangingAudioProcessor; import static androidx.media3.transformer.TestUtil.createPitchChangingAudioProcessor;
import static androidx.media3.transformer.TestUtil.createTransformerBuilder; import static androidx.media3.transformer.TestUtil.createTransformerBuilder;
import static androidx.media3.transformer.TestUtil.getDumpFileName; import static androidx.media3.transformer.TestUtil.getDumpFileName;
import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders; import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders;
import android.content.Context; import android.content.Context;
import androidx.media3.common.Effect;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.audio.SonicAudioProcessor;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.effect.RgbFilter; import androidx.media3.effect.RgbFilter;
import androidx.media3.test.utils.DumpFileAsserts; import androidx.media3.test.utils.DumpFileAsserts;
@ -109,12 +108,13 @@ public final class SequenceExportTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f);
Effect videoEffect = RgbFilter.createGrayscaleFilter();
Effects effects =
new Effects(ImmutableList.of(sonicAudioProcessor), ImmutableList.of(videoEffect));
EditedMediaItem editedMediaItem = EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build(); new EditedMediaItem.Builder(mediaItem)
.setEffects(
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
ImmutableList.of(RgbFilter.createGrayscaleFilter())))
.build();
EditedMediaItemSequence editedMediaItemSequence = EditedMediaItemSequence editedMediaItemSequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem)); new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
Composition composition = Composition composition =
@ -237,18 +237,12 @@ public final class SequenceExportTest {
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
EditedMediaItem audioEditedMediaItem = EditedMediaItem audioEditedMediaItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItem noAudioEditedMediaItem = EditedMediaItem noAudioEditedMediaItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItemSequence sequence = EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem, noAudioEditedMediaItem)); new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem, noAudioEditedMediaItem));
@ -276,17 +270,11 @@ public final class SequenceExportTest {
EditedMediaItem noAudioEditedMediaItem = EditedMediaItem noAudioEditedMediaItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItem audioEditedMediaItem = EditedMediaItem audioEditedMediaItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
Composition composition = Composition composition =
new Composition.Builder( new Composition.Builder(
@ -340,18 +328,12 @@ public final class SequenceExportTest {
EditedMediaItem silenceWithEffectsItem = EditedMediaItem silenceWithEffectsItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItem silenceItem = EditedMediaItem silenceItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItemSequence sequence = EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(silenceWithEffectsItem, silenceItem)); new EditedMediaItemSequence(ImmutableList.of(silenceWithEffectsItem, silenceItem));
@ -379,18 +361,12 @@ public final class SequenceExportTest {
EditedMediaItem silenceWithEffectsItem = EditedMediaItem silenceWithEffectsItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItem silenceItem = EditedMediaItem silenceItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItemSequence sequence = EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(silenceItem, silenceWithEffectsItem)); new EditedMediaItemSequence(ImmutableList.of(silenceItem, silenceWithEffectsItem));
@ -418,18 +394,12 @@ public final class SequenceExportTest {
EditedMediaItem firstItem = EditedMediaItem firstItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItem secondItem = EditedMediaItem secondItem =
new EditedMediaItem.Builder(mediaItem) new EditedMediaItem.Builder(mediaItem)
.setRemoveAudio(true) .setRemoveAudio(true)
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItemSequence sequence = EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(firstItem, secondItem)); new EditedMediaItemSequence(ImmutableList.of(firstItem, secondItem));
@ -472,11 +442,10 @@ public final class SequenceExportTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f);
Effects effects =
new Effects(ImmutableList.of(sonicAudioProcessor), /* videoEffects= */ ImmutableList.of());
EditedMediaItem editedMediaItem = EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(audioOnlyMediaItem).setEffects(effects).build(); new EditedMediaItem.Builder(audioOnlyMediaItem)
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
.build();
EditedMediaItemSequence editedMediaItemSequence = EditedMediaItemSequence editedMediaItemSequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem)); new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
Composition composition = Composition composition =
@ -497,23 +466,15 @@ public final class SequenceExportTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
Effects highPitchEffects =
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of());
EditedMediaItem highPitchMediaItem = EditedMediaItem highPitchMediaItem =
new EditedMediaItem.Builder(audioOnlyMediaItem) new EditedMediaItem.Builder(audioOnlyMediaItem)
.setRemoveVideo(true) .setRemoveVideo(true)
.setEffects(highPitchEffects) .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
.build(); .build();
Effects lowPitchEffects =
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 0.5f)),
/* videoEffects= */ ImmutableList.of());
EditedMediaItem lowPitchMediaItem = EditedMediaItem lowPitchMediaItem =
new EditedMediaItem.Builder(audioOnlyMediaItem) new EditedMediaItem.Builder(audioOnlyMediaItem)
.setRemoveVideo(true) .setRemoveVideo(true)
.setEffects(lowPitchEffects) .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 0.5f)))
.build(); .build();
EditedMediaItemSequence sequence = EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(highPitchMediaItem, lowPitchMediaItem)); new EditedMediaItemSequence(ImmutableList.of(highPitchMediaItem, lowPitchMediaItem));
@ -558,19 +519,14 @@ public final class SequenceExportTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
Effects highPitch =
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of());
EditedMediaItem stereo48000Audio = EditedMediaItem stereo48000Audio =
new EditedMediaItem.Builder( new EditedMediaItem.Builder(
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ)) MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ))
.setEffects(highPitch) .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
.build(); .build();
EditedMediaItem mono44100Audio = EditedMediaItem mono44100Audio =
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)) new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
.setEffects(highPitch) .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
.build(); .build();
EditedMediaItemSequence editedMediaItemSequence = EditedMediaItemSequence editedMediaItemSequence =
@ -596,17 +552,11 @@ public final class SequenceExportTest {
EditedMediaItem stereo48000AudioHighPitch = EditedMediaItem stereo48000AudioHighPitch =
new EditedMediaItem.Builder( new EditedMediaItem.Builder(
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ)) MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ))
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItem mono44100AudioLowPitch = EditedMediaItem mono44100AudioLowPitch =
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)) new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
.setEffects( .setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 0.5f)))
new Effects(
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 0.5f)),
/* videoEffects= */ ImmutableList.of()))
.build(); .build();
EditedMediaItemSequence editedMediaItemSequence = EditedMediaItemSequence editedMediaItemSequence =
new EditedMediaItemSequence( new EditedMediaItemSequence(

View File

@ -22,6 +22,7 @@ import androidx.annotation.Nullable;
import androidx.media3.common.C; import androidx.media3.common.C;
import androidx.media3.common.Format; import androidx.media3.common.Format;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.audio.AudioProcessor;
import androidx.media3.common.audio.SonicAudioProcessor; import androidx.media3.common.audio.SonicAudioProcessor;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
@ -144,6 +145,11 @@ public final class TestUtil {
new DefaultEncoderFactory.Builder(context).setEnableFallback(enableFallback).build()); new DefaultEncoderFactory.Builder(context).setEnableFallback(enableFallback).build());
} }
public static Effects createAudioEffects(AudioProcessor... audioProcessors) {
return new Effects(
ImmutableList.copyOf(audioProcessors), /* videoEffects= */ ImmutableList.of());
}
public static SonicAudioProcessor createPitchChangingAudioProcessor(float pitch) { public static SonicAudioProcessor createPitchChangingAudioProcessor(float pitch) {
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor(); SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
sonicAudioProcessor.setPitch(pitch); sonicAudioProcessor.setPitch(pitch);