39 Log.v(
TAG,
"Opening " + (isCapture ?
"capture" :
"playback") +
", requested " + desiredFrames +
" frames of " + desiredChannels +
" channel " +
getAudioFormatString(audioFormat) +
" audio at " + sampleRate +
" Hz");
42 if (Build.VERSION.SDK_INT < 21) {
43 if (desiredChannels > 2) {
46 if (sampleRate < 8000) {
48 }
else if (sampleRate > 48000) {
53 if (audioFormat == AudioFormat.ENCODING_PCM_FLOAT) {
54 int minSDKVersion = (isCapture ? 23 : 21);
55 if (Build.VERSION.SDK_INT < minSDKVersion) {
56 audioFormat = AudioFormat.ENCODING_PCM_16BIT;
61 case AudioFormat.ENCODING_PCM_8BIT:
64 case AudioFormat.ENCODING_PCM_16BIT:
67 case AudioFormat.ENCODING_PCM_FLOAT:
71 Log.v(
TAG,
"Requested format " + audioFormat +
", getting ENCODING_PCM_16BIT");
72 audioFormat = AudioFormat.ENCODING_PCM_16BIT;
78 switch (desiredChannels) {
80 channelConfig = AudioFormat.CHANNEL_IN_MONO;
83 channelConfig = AudioFormat.CHANNEL_IN_STEREO;
86 Log.v(
TAG,
"Requested " + desiredChannels +
" channels, getting stereo");
88 channelConfig = AudioFormat.CHANNEL_IN_STEREO;
92 switch (desiredChannels) {
94 channelConfig = AudioFormat.CHANNEL_OUT_MONO;
97 channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
100 channelConfig = AudioFormat.CHANNEL_OUT_STEREO | AudioFormat.CHANNEL_OUT_FRONT_CENTER;
103 channelConfig = AudioFormat.CHANNEL_OUT_QUAD;
106 channelConfig = AudioFormat.CHANNEL_OUT_QUAD | AudioFormat.CHANNEL_OUT_FRONT_CENTER;
109 channelConfig = AudioFormat.CHANNEL_OUT_5POINT1;
112 channelConfig = AudioFormat.CHANNEL_OUT_5POINT1 | AudioFormat.CHANNEL_OUT_BACK_CENTER;
115 if (Build.VERSION.SDK_INT >= 23) {
116 channelConfig = AudioFormat.CHANNEL_OUT_7POINT1_SURROUND;
118 Log.v(
TAG,
"Requested " + desiredChannels +
" channels, getting 5.1 surround");
120 channelConfig = AudioFormat.CHANNEL_OUT_5POINT1;
124 Log.v(
TAG,
"Requested " + desiredChannels +
" channels, getting stereo");
126 channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
168 frameSize = (sampleSize * desiredChannels);
175 minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
177 minBufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);
179 desiredFrames = Math.max(desiredFrames, (minBufferSize + frameSize - 1) / frameSize);
181 int[] results =
new int[4];
185 mAudioRecord =
new AudioRecord(MediaRecorder.AudioSource.DEFAULT, sampleRate,
186 channelConfig, audioFormat, desiredFrames * frameSize);
189 if (
mAudioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
190 Log.e(
TAG,
"Failed during initialization of AudioRecord");
202 results[3] = desiredFrames;
206 mAudioTrack =
new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
211 if (
mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
214 Log.e(
TAG,
"Failed during initialization of Audio Track");
226 results[3] = desiredFrames;
229 Log.v(
TAG,
"Opening " + (isCapture ?
"capture" :
"playback") +
", got " + results[3] +
" frames of " + results[2] +
" channel " +
getAudioFormatString(results[1]) +
" audio at " + results[0] +
" Hz");
static AudioRecord mAudioRecord
static AudioTrack mAudioTrack
static String getAudioFormatString(int audioFormat)