From f364657c7c1503ea37c6e37a6ac58777c67ef6cb Mon Sep 17 00:00:00 2001 From: pedroSG94 Date: Fri, 10 Jul 2026 15:03:26 +0200 Subject: [PATCH] refactor microphonemanager --- .../input/audio/MicrophoneManager.java | 64 +++++++++++-------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java b/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java index a3b5739db..31b73d2f9 100644 --- a/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java +++ b/encoder/src/main/java/com/pedro/encoder/input/audio/MicrophoneManager.java @@ -108,7 +108,18 @@ public boolean createMicrophone(int audioSource, int sampleRate, boolean isStere this.sampleRate = sampleRate; channel = isStereo ? AudioFormat.CHANNEL_IN_STEREO : AudioFormat.CHANNEL_IN_MONO; getPcmBufferSize(sampleRate, channel); - audioRecord = new AudioRecord(audioSource, sampleRate, channel, audioFormat, AudioEncoder.inputSize * 5); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + audioRecord = new AudioRecord.Builder() + .setAudioFormat(new AudioFormat.Builder().setEncoding(audioFormat) + .setSampleRate(sampleRate) + .setChannelMask(channel) + .build()) + .setAudioSource(audioSource) + .setBufferSizeInBytes(AudioEncoder.inputSize * 5) + .build(); + } else { + audioRecord = new AudioRecord(audioSource, sampleRate, channel, audioFormat, AudioEncoder.inputSize * 5); + } audioPostProcessEffect = new AudioPostProcessEffect(audioRecord.getAudioSessionId()); if (echoCanceler) audioPostProcessEffect.enableEchoCanceler(); if (noiseSuppressor) audioPostProcessEffect.enableNoiseSuppressor(); @@ -119,7 +130,7 @@ public boolean createMicrophone(int audioSource, int sampleRate, boolean isStere Log.i(TAG, "Microphone created, " + sampleRate + "hz, " + chl); mode = Mode.MICROPHONE; created = true; - } catch (IllegalArgumentException e) { + } catch (Exception e) { Log.e(TAG, "create microphone error", e); } return created; @@ -140,32 +151,31 @@ public boolean createMicrophone(int audioSource, int sampleRate, boolean isStere public boolean createInternalMicrophone(AudioPlaybackCaptureConfiguration config, int sampleRate, boolean isStereo, boolean echoCanceler, boolean noiseSuppressor) { try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - this.sampleRate = sampleRate; - channel = isStereo ? AudioFormat.CHANNEL_IN_STEREO : AudioFormat.CHANNEL_IN_MONO; - getPcmBufferSize(sampleRate, channel); - audioRecordDevice = new AudioRecord.Builder() - .setAudioPlaybackCaptureConfig(config) - .setAudioFormat(new AudioFormat.Builder().setEncoding(audioFormat) - .setSampleRate(sampleRate) - .setChannelMask(channel) - .build()) - .setBufferSizeInBytes(AudioEncoder.inputSize * 5) - .build(); - audioPostProcessEffectDevice = new AudioPostProcessEffect(audioRecordDevice.getAudioSessionId()); - if (echoCanceler) audioPostProcessEffectDevice.enableEchoCanceler(); - if (noiseSuppressor) audioPostProcessEffectDevice.enableNoiseSuppressor(); - String chl = (isStereo) ? "Stereo" : "Mono"; - if (audioRecordDevice.getState() != AudioRecord.STATE_INITIALIZED) { - throw new IllegalArgumentException("Some parameters specified are not valid"); - } - Log.i(TAG, "Internal microphone created, " + sampleRate + "hz, " + chl); - mode = Mode.INTERNAL; - created = true; - } else { - return createMicrophone(sampleRate, isStereo, echoCanceler, noiseSuppressor); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q){ + throw new IllegalStateException("Internal microphone unsupported in this Android version"); } - } catch (IllegalArgumentException e) { + this.sampleRate = sampleRate; + channel = isStereo ? AudioFormat.CHANNEL_IN_STEREO : AudioFormat.CHANNEL_IN_MONO; + getPcmBufferSize(sampleRate, channel); + audioRecordDevice = new AudioRecord.Builder() + .setAudioPlaybackCaptureConfig(config) + .setAudioFormat(new AudioFormat.Builder().setEncoding(audioFormat) + .setSampleRate(sampleRate) + .setChannelMask(channel) + .build()) + .setBufferSizeInBytes(AudioEncoder.inputSize * 5) + .build(); + audioPostProcessEffectDevice = new AudioPostProcessEffect(audioRecordDevice.getAudioSessionId()); + if (echoCanceler) audioPostProcessEffectDevice.enableEchoCanceler(); + if (noiseSuppressor) audioPostProcessEffectDevice.enableNoiseSuppressor(); + String chl = (isStereo) ? "Stereo" : "Mono"; + if (audioRecordDevice.getState() != AudioRecord.STATE_INITIALIZED) { + throw new IllegalArgumentException("Some parameters specified are not valid"); + } + Log.i(TAG, "Internal microphone created, " + sampleRate + "hz, " + chl); + mode = Mode.INTERNAL; + created = true; + } catch (Exception e) { Log.e(TAG, "create microphone error", e); } return created;