首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法确定Android手机的哪个麦克风被用来录音?

有没有办法确定Android手机的哪个麦克风被用来录音?
EN

Stack Overflow用户
提问于 2022-10-20 07:08:40
回答 1查看 50关注 0票数 2

我一直在处理一个VoIP应用程序(通常是在扬声器模式下操作)。我面临的问题是,在不同型号的智能手机上,录音的行为是完全不同的。

让我再加上一张图片,然后解释一下:

大多数android智能手机都有两个麦克风。一个在top,一个在底部。当我开始捕捉音频时,有些手机从顶部麦克风捕捉音频,而另一些则从底部麦克风捕捉音频。还有一些手机是,可以从两个麦克风、上捕捉音频。

我所面临的问题是当我把手机放在桌子上,屏幕边朝上的时候,音频质量和声音的衰减。一些手机从底层麦克风捕捉,这提供了良好的质量,而另一些从顶部麦克风捕获,这会引起问题。

希望你们能理解这个场景。下面是我需要你帮助的事情

  1. 如何确定哪个麦克风用于音频捕获?我已将设置设置如下:

  1. I 已经尝试将不同的信道(L/R)、计算均方根,以确定哪个信道是响亮的,并将其映射到特定的麦克风。然而,不幸的是,这是行不通的,因为能源是相同的在两个媒体的。它推断,当我们选择立体声频道时,它从一个麦克风中捕获数据,然后以立体声形式(L,R)存储在PCM_16Bit中。
  2. I尝试使用
  3. ,但麦克风方向(麦克风用于音频捕获)仍然不可修复或无法检测。

我试过在相同的设备上使用Whatsapp,它能很好地捕捉音频,但在我的情况下没有发生。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 11:55:53

因此,在对Stackoverflow进行研究并得到一些有价值的答案之后,我们发现了一些有价值的答案。我终于成功地设置了所需的麦克风来捕获输入音频。这个问题How to select physical microphone and audio recording path in Android帮助我获得了想要的信息。

我运行以下代码:

代码语言:javascript
运行
复制
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
        }
    }

那么这个代码是做什么的呢?

此代码获取当前连接到android手机上的所有输入音频设备。返回的列表包括内置设备和外部设备,如麦克风。现在重要的是AudioDeviceInfo address属性。这个属性告诉我们输入设备的物理位置。

对于麦克风,有两个主地址。

  1. Bottom
  2. Back (通常是顶部的麦克风)

那么,在得到这些信息之后,接下来怎么办?

下一步是将此麦克风设置为捕获音频的首选设备。麦克风的设置很容易做到以下几点:

代码语言:javascript
运行
复制
audioRecord.setPreferredDevice(audioInfo);

要进行交叉验证,您可以使用Google上的OboeTester应用程序,该应用程序允许您选择任何源来捕获音频。

因此,通过这种方式,我解决了从想要的麦克风中获取音频的问题。

此外,请注意,这是不同的制造商的设备制造商。即使在选择了bottom麦克风之后,一些设备仍然使用这两种麦克风来捕获音频。但这并不影响我,因为我的主要目的是从底部的麦克风捕捉音频是解决的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74135716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档