安卓手机录音时如何确定使用的是哪个麦克风?

3


enter image description here

大多数安卓智能手机都有两个麦克风。一个在顶部,一个在底部。当我开始录制音频时,一些手机从顶部麦克风捕获音频,而另一些则从底部麦克风捕获音频。然后还有一些手机是从两个麦克风中捕获音频。
我面临的问题是音频质量和声音衰减的问题,当我把手机放在桌子上,屏幕朝上时,有些手机会从底部麦克风捕获音频,提供良好的质量,而其他手机则从顶部麦克风捕获音频,这会导致问题。

希望您们已经理解了情况。现在我需要您们的帮助,以下是我需要您的帮助的事项:
如何确定用于音频捕获的麦克风?我已经按照以下设置进行了设置:
enter image description here。我已经尝试将不同的通道(L/R)分离,并计算RMS以确定哪个通道声音较大并将其映射到特定的麦克风。但令人遗憾的是,这并没有起作用,因为两个媒体的能量相同。这表明在立体声中选择一个通道时,它会从一个麦克风捕获数据,然后以PCM_16Bit的立体声形式(L、R)存储数据。我尝试使用CHANNEL_IN_MONO,但麦克风方向(用于音频捕获的麦克风)仍然无法固定或检测。

我已经在同一设备上尝试使用Whatsapp,并且它可以完美地捕获音频,但在我的情况下却无法实现。谢谢。
1个回答

2

经过研究并从Stackoverflow获得了一些有价值的答案后,我终于成功地设置了所需的麦克风以捕获输入音频。 这个问题如何在Android中选择物理麦克风和音频录制路径帮助我获得了所需的信息。
我运行了这段代码:

val audioDeviceInfo = audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)
    var audioInfo :AudioDeviceInfo? = null
    for (dev in audioDeviceInfo) {
        if(dev.address == "bottom"){
            Log.d("TAGAudioInfo", dev.id.toString())
            audioInfo = dev
        }
    }

那么这段代码是做什么的?
这段代码获取当前连接到您的安卓手机的所有输入音频设备。返回的列表包括内置和外部设备,例如麦克风。现在重要的是 AudioDeviceInfo address 属性。该属性告诉我们输入设备的物理位置。
对于麦克风,有两个主要地址。

  1. 底部
  2. 背面(通常是顶部的麦克风)

那么在获取了这些信息之后下一步该怎么做呢?
下一步是将此麦克风设置为首选设备以捕获音频。设置麦克风很容易,只需按照以下步骤操作:

audioRecord.setPreferredDevice(audioInfo);

为了进行交叉验证,您可以使用Google Play商店上提供的OboeTester应用程序,该应用程序允许您选择任何源来捕获音频。
因此,通过这种方式,我解决了从所需麦克风捕获音频的问题。
此外,请注意,这因设备制造商而异。即使选择了底部麦克风,某些设备仍然会使用两个麦克风来捕获音频。但是这不会影响我,因为我从底部麦克风捕获音频的主要目的已经解决。


嗨,我知道這跟你的問題或回答無關,但我正在嘗試從不同設備錄製和播放音頻。 但它總是從AudioTracks首選設備捕獲。 你對此有任何想法嗎?Q:https://stackoverflow.com/questions/76726288/android-record-and-playback-audio-from-different-devices - ajw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接