使用 Android 的 MediaRecorder 和蓝牙麦克风

问题描述 投票:0回答:1

问题

我无法让 Android 的 MediaRecorder 从连接的蓝牙麦克风录制音频。相反,录音使用设备的内置麦克风

问题

有没有人找到一种可靠的方法让 Android 的 MediaRecorder 录制来自连接的蓝牙麦克风的音频输入?

研究

早期的答案建议使用现已弃用的 startBluetoothSco()。如果没有 startBluetoothSco(),似乎无法“鼓励”Android 在设备麦克风上使用连接的蓝牙麦克风。

以下代码成功录制音频,但仅从设备麦克风录制,而不是从蓝牙麦克风录制

mediaRecorder = MediaRecorder(this).apply {
    setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION) // or .MIC
    setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP) // or MPEG_4
    setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
    setAudioChannels(1) // Mono
    setAudioSamplingRate(16000)
    setOutputFile(audioOutputFile)

    // use 
    prepare()
    start()

早期经验

当 startBluetoothSco() 在我的文本转语音应用程序中被弃用时,我只是将 startBluetoothSco() 替换为合适的音频模式 (AudioManager.STREAM_MUSIC),然后 Android 将音频路由到扬声器。

下面是我用来尝试类似技巧的代码。它列出了已连接的蓝牙设备,如果它们看起来是所需的麦克风,请更改音频模式:

val bluetoothA2DPConnectedDevices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).filter { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP }
bluetoothA2DPConnectedDevices.forEach { bluetoothDevice ->
    audioManager.mode = AudioManager.MODE_IN_CALL // if find a suitable Bluetooth device try changing audio mode
}

我尝试了多种 AudioManager 模式,但没有一个能够使用外部麦克风进行录音

任何人都可以建议我还可以尝试什么吗?

android-bluetooth android-mediarecorder android-audiorecord
1个回答
0
投票

我找到的解决方案在创建 mediaRecorder = MediaRecorder(this).apply {}

之前使用 setCommunicationsDevice()

搜索并选择任何合适的蓝牙连接的外部麦克风

val availableCommunicationsDevices = audioManager.availableCommunicationDevices
availableCommunicationsDevices.forEach { device ->
    if (device.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) {
            audioManager.setCommunicationDevice(device)
    }
}

然后使用原始问题中显示的代码来设置 MediaRecorder

注意: 虽然 MediaRecorder 有一个方法 setPreferredDevice() 我无法让 MediaRecorder 使用该设备。

© www.soinside.com 2019 - 2024. All rights reserved.