Android强制AudioRecord使用耳机麦克风

时间:2016-12-01 17:11:39

标签: android microphone audiorecord

我使用AudioRecord录制音乐,但是当我录制它时使用手机麦克风。 我怎么能强迫他使用耳机的频道?

我使用此代码:

  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();

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用AudioManager.isWiredHeadsetOn()检查耳机是否已插入。如果上述值为false,则不执行任何操作或任何您想要执行的操作。您还需要先获得许可:MODIFY_AUDIO_SETTINGS

希望这会有所帮助。 :)

答案 1 :(得分:0)

我反过来遇到了这个问题(试图强制使用手机的麦克风而不是耳机麦克风)。您可以通过扫描AudioManager中的AudioDeviceInfo数组来选择麦克风。以下是我认为你的样子(如果TYPE_LINE_ANALOG不起作用,请查看the AudioDeviceInfo page以获取更多可能性或调试出现的设备):

    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;
        }
    }