mirror of
https://github.com/samsonjs/media.git
synced 2026-03-27 09:45:47 +00:00
Add test cases for mixing to mono.
PiperOrigin-RevId: 517127021
This commit is contained in:
parent
236748070c
commit
9e66998ea4
1 changed files with 85 additions and 11 deletions
|
|
@ -18,6 +18,7 @@ package androidx.media3.transformer;
|
|||
import static androidx.media3.test.utils.TestUtil.createByteBuffer;
|
||||
import static androidx.media3.test.utils.TestUtil.createFloatArray;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
|
||||
import androidx.media3.common.C;
|
||||
import androidx.media3.common.audio.AudioProcessor.AudioFormat;
|
||||
|
|
@ -33,7 +34,6 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 2, C.ENCODING_PCM_FLOAT);
|
||||
private static final AudioFormat AUDIO_FORMAT_MONO_PCM_FLOAT =
|
||||
new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 1, C.ENCODING_PCM_FLOAT);
|
||||
|
||||
private static final AudioFormat AUDIO_FORMAT_STEREO_PCM_16BIT =
|
||||
new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 2, C.ENCODING_PCM_16BIT);
|
||||
private static final AudioFormat AUDIO_FORMAT_MONO_PCM_16BIT =
|
||||
|
|
@ -45,6 +45,8 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 2);
|
||||
private static final ChannelMixingMatrix STEREO_TO_MONO =
|
||||
ChannelMixingMatrix.create(/* inputChannelCount= */ 2, /* outputChannelCount= */ 1);
|
||||
private static final ChannelMixingMatrix MONO_TO_MONO =
|
||||
ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 1);
|
||||
|
||||
@Test
|
||||
public void supportsSourceAudioFormatsForStereoMixing() {
|
||||
|
|
@ -76,8 +78,8 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
STEREO_TO_STEREO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertThat(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertThat(mixingBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0f, -0.125f, 0.375f, -0.25f});
|
||||
|
|
@ -95,8 +97,8 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
MONO_TO_STEREO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertThat(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertThat(mixingBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0f, -0.5f, 0.75f, -0.25f});
|
||||
|
|
@ -114,13 +116,32 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
STEREO_TO_MONO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertThat(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertThat(mixingBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0.1875f, 0.5625f});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mixMonoFloatIntoMonoFloat() {
|
||||
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_MONO_PCM_FLOAT);
|
||||
|
||||
ByteBuffer mixingBuffer = createByteBuffer(new float[] {0.25f, -0.25f});
|
||||
ByteBuffer sourceBuffer = createByteBuffer(new float[] {0.5f, 0.25f});
|
||||
algorithm.mix(
|
||||
sourceBuffer,
|
||||
AUDIO_FORMAT_MONO_PCM_FLOAT,
|
||||
MONO_TO_MONO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0.5f, -0.125f});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mixStereoS16IntoStereoFloat() {
|
||||
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_STEREO_PCM_FLOAT);
|
||||
|
|
@ -140,8 +161,8 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
STEREO_TO_STEREO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertThat(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertThat(mixingBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer))
|
||||
|
|
@ -163,8 +184,8 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
MONO_TO_STEREO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertThat(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertThat(mixingBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer))
|
||||
|
|
@ -173,6 +194,59 @@ public final class FloatAudioMixingAlgorithmTest {
|
|||
.inOrder();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mixStereoS16IntoMonoFloat() {
|
||||
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_MONO_PCM_FLOAT);
|
||||
|
||||
ByteBuffer mixingBuffer = createByteBuffer(new float[] {0.25f, 0.5f});
|
||||
ByteBuffer sourceBuffer =
|
||||
createByteBuffer(
|
||||
new short[] {
|
||||
-16384 /* -0.5f */,
|
||||
8192 /* 0.25000762962f */,
|
||||
-8192 /* -0.25f */,
|
||||
16384 /* 0.50001525925f */
|
||||
});
|
||||
|
||||
algorithm.mix(
|
||||
sourceBuffer,
|
||||
AUDIO_FORMAT_STEREO_PCM_16BIT,
|
||||
STEREO_TO_MONO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer))
|
||||
.usingTolerance(1f / Short.MAX_VALUE)
|
||||
.containsExactly(new float[] {0.1875f, 0.5625f})
|
||||
.inOrder();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mixMonoS16IntoMonoFloat() {
|
||||
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_MONO_PCM_FLOAT);
|
||||
|
||||
ByteBuffer mixingBuffer = createByteBuffer(new float[] {0.25f, 0.5f});
|
||||
ByteBuffer sourceBuffer =
|
||||
createByteBuffer(new short[] {-16384 /* -0.5f */, 8192 /* 0.25000762962f */});
|
||||
algorithm.mix(
|
||||
sourceBuffer,
|
||||
AUDIO_FORMAT_MONO_PCM_16BIT,
|
||||
MONO_TO_MONO.scaleBy(0.5f),
|
||||
/* frameCount= */ 2,
|
||||
mixingBuffer);
|
||||
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
|
||||
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
|
||||
|
||||
mixingBuffer.flip();
|
||||
assertThat(createFloatArray(mixingBuffer))
|
||||
.usingTolerance(1f / Short.MAX_VALUE)
|
||||
.containsExactly(new float[] {0f, 0.625f})
|
||||
.inOrder();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doesNotSupportSampleRateConversion() {
|
||||
AudioMixingAlgorithm algorithm =
|
||||
|
|
|
|||
Loading…
Reference in a new issue