Add AudioFormat.getBytesPerSample and use it

Change-Id: I90a40987ea99006af4a6e31136078c04976eb54d
This commit is contained in:
Glenn Kasten
2014-01-09 12:24:48 -08:00
parent 29e594c520
commit 34a37bdebb
6 changed files with 23 additions and 18 deletions

View File

@ -83,7 +83,7 @@ class BlockingAudioTrack {
mVolume = volume;
mPan = pan;
mBytesPerFrame = getBytesPerFrame(mAudioFormat) * mChannelCount;
mBytesPerFrame = AudioFormat.getBytesPerSample(mAudioFormat) * mChannelCount;
mIsShortUtterance = false;
mAudioBufferSize = 0;
mBytesWritten = 0;
@ -229,17 +229,6 @@ class BlockingAudioTrack {
return audioTrack;
}
private static int getBytesPerFrame(int audioFormat) {
if (audioFormat == AudioFormat.ENCODING_PCM_8BIT) {
return 1;
} else if (audioFormat == AudioFormat.ENCODING_PCM_16BIT) {
return 2;
}
return -1;
}
private void blockUntilDone(AudioTrack audioTrack) {
if (mBytesWritten <= 0) {
return;

View File

@ -278,8 +278,7 @@ class FileSynthesisCallback extends AbstractSynthesisCallback {
private ByteBuffer makeWavHeader(int sampleRateInHz, int audioFormat, int channelCount,
int dataLength) {
// TODO: is AudioFormat.ENCODING_DEFAULT always the same as ENCODING_PCM_16BIT?
int sampleSizeInBytes = (audioFormat == AudioFormat.ENCODING_PCM_8BIT ? 1 : 2);
int sampleSizeInBytes = AudioFormat.getBytesPerSample(audioFormat);
int byteRate = sampleRateInHz * sampleSizeInBytes * channelCount;
short blockAlign = (short) (sampleSizeInBytes * channelCount);
short bitsPerSample = (short) (sampleSizeInBytes * 8);

View File

@ -139,4 +139,19 @@ public class AudioFormat {
public static final int CHANNEL_IN_FRONT_BACK = CHANNEL_IN_FRONT | CHANNEL_IN_BACK;
// CHANNEL_IN_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_IN_ALL
/** @hide */
public static int getBytesPerSample(int audioFormat)
{
switch (audioFormat) {
case ENCODING_PCM_8BIT:
return 1;
case ENCODING_PCM_16BIT:
case ENCODING_DEFAULT:
return 2;
case ENCODING_INVALID:
default:
throw new IllegalArgumentException("Bad audio format " + audioFormat);
}
}
}

View File

@ -319,7 +319,7 @@ public class AudioRecord
// NB: this section is only valid with PCM data.
// To update when supporting compressed formats
int frameSizeInBytes = mChannelCount
* (mAudioFormat == AudioFormat.ENCODING_PCM_8BIT ? 1 : 2);
* (AudioFormat.getBytesPerSample(mAudioFormat));
if ((audioBufferSize % frameSizeInBytes != 0) || (audioBufferSize < 1)) {
throw new IllegalArgumentException("Invalid audio buffer size.");
}

View File

@ -518,7 +518,7 @@ public class AudioTrack
// NB: this section is only valid with PCM data.
// To update when supporting compressed formats
int frameSizeInBytes = mChannelCount
* (mAudioFormat == AudioFormat.ENCODING_PCM_8BIT ? 1 : 2);
* (AudioFormat.getBytesPerSample(mAudioFormat));
if ((audioBufferSize % frameSizeInBytes != 0) || (audioBufferSize < 1)) {
throw new IllegalArgumentException("Invalid audio buffer size.");
}

View File

@ -169,9 +169,11 @@ public class JetPlayer
native_setup(new WeakReference<JetPlayer>(this),
JetPlayer.getMaxTracks(),
// bytes to frame conversion: sample format is ENCODING_PCM_16BIT, 2 channels
// bytes to frame conversion:
// 1200 == minimum buffer size in frames on generation 1 hardware
Math.max(1200, buffSizeInBytes / 4));
Math.max(1200, buffSizeInBytes /
(AudioFormat.getBytesPerSample(AudioFormat.ENCODING_PCM_16BIT) *
2 /*channels*/)));
}
}