Daffa
Daffa

Reputation: 119

Android force AudioRecord to use headphone mic

I use AudioRecord to record music but when I record it uses the phone mic. how can I force him to use the channel of the Headphone?

I use this code:

  int minSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        AudioRecord ar = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, minSize);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            recorder[0] = false;
        }
    }, timeInSecondsToRecord * 1000);

    short[] buffer = new short[minSize];
    ar.startRecording();
        Log.d("Started","Reording");
    while (recorder[0]) {
        ar.read(buffer, 0, minSize);
        for (short s : buffer) {
            if (s>1000)
            System.out.println("signalVal=" + s);
        }
    }
        Log.d("Finished","Reording");
    ar.stop();

Thank you

Upvotes: 2

Views: 2896

Answers (2)

Erik Peterson
Erik Peterson

Reputation: 1

I had this problem in reverse (trying to force use of the phone's mic instead of the headphone mic). You can choose a mic by scanning the AudioDeviceInfo array in AudioManager. Here's what I think it would look like for you (if TYPE_LINE_ANALOG doesn't work, check out the AudioDeviceInfo page for more possibilities or debug what devices come up):

    AudioRecord audioRecord =
            new AudioRecord(...);
    // Force use of the line in mic
    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    for ( AudioDeviceInfo device : audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)) {
        if ( device.getType() == AudioDeviceInfo.TYPE_LINE_ANALOG) {
            audioRecord.setPreferredDevice(device);
            break;
        }
    }

Upvotes: 0

user7237624
user7237624

Reputation:

You can use AudioManager.isWiredHeadsetOn() for checking if the headset are plugged in or not. If the above value is false dont perform any action or whatever you want to do. And also you need permission first: MODIFY_AUDIO_SETTINGS

Hope this helps. :)

Upvotes: 1

Related Questions