Index: webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java |
diff --git a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java |
index 66c1483851ba38ec9da98c64e54cb136a4c3b04e..729ff37622834875197e3c7ac950c2a32eb75862 100644 |
--- a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java |
+++ b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java |
@@ -215,8 +215,16 @@ public class WebRtcAudioRecord { |
int bufferSizeInBytes = Math.max(BUFFER_SIZE_FACTOR * minBufferSize, byteBuffer.capacity()); |
Logging.d(TAG, "bufferSizeInBytes: " + bufferSizeInBytes); |
try { |
- audioRecord = new AudioRecord(AudioSource.VOICE_COMMUNICATION, sampleRate, channelConfig, |
- AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); |
+ if (WebRtcAudioUtils.runningOnMarshmallowOrHigher()) { |
+ // Use AudioRecord.Builder to create the AudioRecord instance if we are on API level 23 or |
+ // higher. |
+ audioRecord = createAudioRecordOnMarshmallowOrHigher( |
+ sampleRate, channelConfig, bufferSizeInBytes); |
+ } else { |
+ // Use default constructor for API levels below 23. |
+ audioRecord = new AudioRecord(AudioSource.VOICE_COMMUNICATION, sampleRate, |
+ channelConfig, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); |
+ } |
} catch (IllegalArgumentException e) { |
reportWebRtcAudioRecordInitError("AudioRecord ctor error: " + e.getMessage()); |
releaseAudioResources(); |
@@ -305,6 +313,22 @@ public class WebRtcAudioRecord { |
} |
} |
+ // Creates an AudioRecord instance using AudioRecord.Builder which was added in API level 23. |
+ @TargetApi(23) |
+ private AudioRecord createAudioRecordOnMarshmallowOrHigher( |
+ int sampleRateInHz, int channelConfig, int bufferSizeInBytes) { |
+ Logging.d(TAG, "createAudioRecordOnMarshmallowOrHigher"); |
+ return new AudioRecord.Builder() |
+ .setAudioSource(AudioSource.VOICE_COMMUNICATION) |
+ .setAudioFormat(new AudioFormat.Builder() |
+ .setEncoding(AudioFormat.ENCODING_PCM_16BIT) |
+ .setSampleRate(sampleRateInHz) |
+ .setChannelMask(channelConfig) |
+ .build()) |
+ .setBufferSizeInBytes(bufferSizeInBytes) |
+ .build(); |
+ } |
+ |
// Helper method which throws an exception when an assertion has failed. |
private static void assertTrue(boolean condition) { |
if (!condition) { |