我使用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();
谢谢
答案 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;
}
}