Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9e66998e
authored
Mar 16, 2023
by
samrobinson
Committed by
Rohit Singh
Mar 16, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add test cases for mixing to mono.
PiperOrigin-RevId: 517127021
parent
23674807
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
11 deletions
libraries/transformer/src/test/java/androidx/media3/transformer/FloatAudioMixingAlgorithmTest.java
libraries/transformer/src/test/java/androidx/media3/transformer/FloatAudioMixingAlgorithmTest.java
View file @
9e66998e
...
@@ -18,6 +18,7 @@ package androidx.media3.transformer;
...
@@ -18,6 +18,7 @@ package androidx.media3.transformer;
import
static
androidx
.
media3
.
test
.
utils
.
TestUtil
.
createByteBuffer
;
import
static
androidx
.
media3
.
test
.
utils
.
TestUtil
.
createByteBuffer
;
import
static
androidx
.
media3
.
test
.
utils
.
TestUtil
.
createFloatArray
;
import
static
androidx
.
media3
.
test
.
utils
.
TestUtil
.
createFloatArray
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
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.C
;
import
androidx.media3.common.audio.AudioProcessor.AudioFormat
;
import
androidx.media3.common.audio.AudioProcessor.AudioFormat
;
...
@@ -33,7 +34,6 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -33,7 +34,6 @@ public final class FloatAudioMixingAlgorithmTest {
new
AudioFormat
(
/* sampleRate= */
44100
,
/* channelCount= */
2
,
C
.
ENCODING_PCM_FLOAT
);
new
AudioFormat
(
/* sampleRate= */
44100
,
/* channelCount= */
2
,
C
.
ENCODING_PCM_FLOAT
);
private
static
final
AudioFormat
AUDIO_FORMAT_MONO_PCM_FLOAT
=
private
static
final
AudioFormat
AUDIO_FORMAT_MONO_PCM_FLOAT
=
new
AudioFormat
(
/* sampleRate= */
44100
,
/* channelCount= */
1
,
C
.
ENCODING_PCM_FLOAT
);
new
AudioFormat
(
/* sampleRate= */
44100
,
/* channelCount= */
1
,
C
.
ENCODING_PCM_FLOAT
);
private
static
final
AudioFormat
AUDIO_FORMAT_STEREO_PCM_16BIT
=
private
static
final
AudioFormat
AUDIO_FORMAT_STEREO_PCM_16BIT
=
new
AudioFormat
(
/* sampleRate= */
44100
,
/* channelCount= */
2
,
C
.
ENCODING_PCM_16BIT
);
new
AudioFormat
(
/* sampleRate= */
44100
,
/* channelCount= */
2
,
C
.
ENCODING_PCM_16BIT
);
private
static
final
AudioFormat
AUDIO_FORMAT_MONO_PCM_16BIT
=
private
static
final
AudioFormat
AUDIO_FORMAT_MONO_PCM_16BIT
=
...
@@ -45,6 +45,8 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -45,6 +45,8 @@ public final class FloatAudioMixingAlgorithmTest {
ChannelMixingMatrix
.
create
(
/* inputChannelCount= */
1
,
/* outputChannelCount= */
2
);
ChannelMixingMatrix
.
create
(
/* inputChannelCount= */
1
,
/* outputChannelCount= */
2
);
private
static
final
ChannelMixingMatrix
STEREO_TO_MONO
=
private
static
final
ChannelMixingMatrix
STEREO_TO_MONO
=
ChannelMixingMatrix
.
create
(
/* inputChannelCount= */
2
,
/* outputChannelCount= */
1
);
ChannelMixingMatrix
.
create
(
/* inputChannelCount= */
2
,
/* outputChannelCount= */
1
);
private
static
final
ChannelMixingMatrix
MONO_TO_MONO
=
ChannelMixingMatrix
.
create
(
/* inputChannelCount= */
1
,
/* outputChannelCount= */
1
);
@Test
@Test
public
void
supportsSourceAudioFormatsForStereoMixing
()
{
public
void
supportsSourceAudioFormatsForStereoMixing
()
{
...
@@ -76,8 +78,8 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -76,8 +78,8 @@ public final class FloatAudioMixingAlgorithmTest {
STEREO_TO_STEREO
.
scaleBy
(
0.5f
),
STEREO_TO_STEREO
.
scaleBy
(
0.5f
),
/* frameCount= */
2
,
/* frameCount= */
2
,
mixingBuffer
);
mixingBuffer
);
assert
T
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Source buffer"
).
t
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
T
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Mixing buffer"
).
t
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
mixingBuffer
.
flip
();
mixingBuffer
.
flip
();
assertThat
(
createFloatArray
(
mixingBuffer
)).
isEqualTo
(
new
float
[]
{
0
f
,
-
0.125f
,
0.375f
,
-
0.25f
});
assertThat
(
createFloatArray
(
mixingBuffer
)).
isEqualTo
(
new
float
[]
{
0
f
,
-
0.125f
,
0.375f
,
-
0.25f
});
...
@@ -95,8 +97,8 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -95,8 +97,8 @@ public final class FloatAudioMixingAlgorithmTest {
MONO_TO_STEREO
.
scaleBy
(
0.5f
),
MONO_TO_STEREO
.
scaleBy
(
0.5f
),
/* frameCount= */
2
,
/* frameCount= */
2
,
mixingBuffer
);
mixingBuffer
);
assert
T
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Source buffer"
).
t
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
T
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Mixing buffer"
).
t
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
mixingBuffer
.
flip
();
mixingBuffer
.
flip
();
assertThat
(
createFloatArray
(
mixingBuffer
)).
isEqualTo
(
new
float
[]
{
0
f
,
-
0.5f
,
0.75f
,
-
0.25f
});
assertThat
(
createFloatArray
(
mixingBuffer
)).
isEqualTo
(
new
float
[]
{
0
f
,
-
0.5f
,
0.75f
,
-
0.25f
});
...
@@ -114,14 +116,33 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -114,14 +116,33 @@ public final class FloatAudioMixingAlgorithmTest {
STEREO_TO_MONO
.
scaleBy
(
0.5f
),
STEREO_TO_MONO
.
scaleBy
(
0.5f
),
/* frameCount= */
2
,
/* frameCount= */
2
,
mixingBuffer
);
mixingBuffer
);
assert
T
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Source buffer"
).
t
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
T
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Mixing buffer"
).
t
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
mixingBuffer
.
flip
();
mixingBuffer
.
flip
();
assertThat
(
createFloatArray
(
mixingBuffer
)).
isEqualTo
(
new
float
[]
{
0.1875f
,
0.5625f
});
assertThat
(
createFloatArray
(
mixingBuffer
)).
isEqualTo
(
new
float
[]
{
0.1875f
,
0.5625f
});
}
}
@Test
@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
()
{
public
void
mixStereoS16IntoStereoFloat
()
{
AudioMixingAlgorithm
algorithm
=
new
FloatAudioMixingAlgorithm
(
AUDIO_FORMAT_STEREO_PCM_FLOAT
);
AudioMixingAlgorithm
algorithm
=
new
FloatAudioMixingAlgorithm
(
AUDIO_FORMAT_STEREO_PCM_FLOAT
);
...
@@ -140,8 +161,8 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -140,8 +161,8 @@ public final class FloatAudioMixingAlgorithmTest {
STEREO_TO_STEREO
.
scaleBy
(
0.5f
),
STEREO_TO_STEREO
.
scaleBy
(
0.5f
),
/* frameCount= */
2
,
/* frameCount= */
2
,
mixingBuffer
);
mixingBuffer
);
assert
T
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Source buffer"
).
t
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
T
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Mixing buffer"
).
t
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
mixingBuffer
.
flip
();
mixingBuffer
.
flip
();
assertThat
(
createFloatArray
(
mixingBuffer
))
assertThat
(
createFloatArray
(
mixingBuffer
))
...
@@ -163,8 +184,8 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -163,8 +184,8 @@ public final class FloatAudioMixingAlgorithmTest {
MONO_TO_STEREO
.
scaleBy
(
0.5f
),
MONO_TO_STEREO
.
scaleBy
(
0.5f
),
/* frameCount= */
2
,
/* frameCount= */
2
,
mixingBuffer
);
mixingBuffer
);
assert
T
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Source buffer"
).
t
hat
(
sourceBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
T
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
assert
WithMessage
(
"Mixing buffer"
).
t
hat
(
mixingBuffer
.
remaining
()).
isEqualTo
(
0
);
mixingBuffer
.
flip
();
mixingBuffer
.
flip
();
assertThat
(
createFloatArray
(
mixingBuffer
))
assertThat
(
createFloatArray
(
mixingBuffer
))
...
@@ -174,6 +195,59 @@ public final class FloatAudioMixingAlgorithmTest {
...
@@ -174,6 +195,59 @@ public final class FloatAudioMixingAlgorithmTest {
}
}
@Test
@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
(
1
f
/
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
(
1
f
/
Short
.
MAX_VALUE
)
.
containsExactly
(
new
float
[]
{
0
f
,
0.625f
})
.
inOrder
();
}
@Test
public
void
doesNotSupportSampleRateConversion
()
{
public
void
doesNotSupportSampleRateConversion
()
{
AudioMixingAlgorithm
algorithm
=
AudioMixingAlgorithm
algorithm
=
new
FloatAudioMixingAlgorithm
(
new
FloatAudioMixingAlgorithm
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment