android开发获取手机麦克风设备信息

这篇具有很好参考价值的文章主要介绍了android开发获取手机麦克风设备信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前为了测试蓝牙耳机的麦克,想从蓝牙耳机的麦克录音。尝试发现三星、小米自带的录音机并不能从蓝牙录音。看了网上一篇文章,提供了一个特定的录音APP,才支持开启蓝牙录音功能。

非常令人疑惑。想到现在的手机,有不只一个麦克风,是否能开发一个可选择录音源的录音APP呢?

看了这篇文章Android音频API介绍「转载」-CSDN博客,介绍了几种音频开发模式。

问了ChatGPT指定麦克风录音的方法

// 指定所需的音频输入设备
int audioSource = MediaRecorder.AudioSource.MIC; // 默认的内置麦克风
String desiredDeviceName = "Your_Desired_Device_Name"; // 设备名称

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] inputDevices = audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);

// 遍历可用的音频输入设备,查找指定的设备
for (AudioDeviceInfo device : inputDevices) {
    if (device.getType() == AudioDeviceInfo.TYPE_USB_DEVICE && device.getProductName().equals(desiredDeviceName)) {
        // 找到了指定的设备
        audioSource = device.getId();
        break;
    }
}

// 使用指定的音频输入设备创建AudioRecord实例
int sampleRate = 44100; // 采样率,可以根据需要进行调整
int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 单声道,可以根据需要进行调整
int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 16位PCM,可以根据需要进行调整

int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
AudioRecord audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize);

// 现在您可以使用audioRecord对象来录制音频

其实这段代码,并不可用。其中AudioRecord的原型是这样的

public AudioRecord (int audioSource, 
                int sampleRateInHz, 
                int channelConfig, 
                int audioFormat, 
                int bufferSizeInBytes)

从API手册上查到的audioSource,仅支持如下几项:

Constants

int CAMCORDER

Microphone audio source tuned for video recording, with the same orientation as the camera if available.

int DEFAULT

Default audio source *

int MIC

Microphone audio source

int REMOTE_SUBMIX

Audio source for a submix of audio streams to be presented remotely.

int UNPROCESSED

Microphone audio source tuned for unprocessed (raw) sound if available, behaves like DEFAULT otherwise.

int VOICE_CALL

Voice call uplink + downlink audio source

Capturing from VOICE_CALL source requires the Manifest.permission.CAPTURE_AUDIO_OUTPUT permission.

int VOICE_COMMUNICATION

Microphone audio source tuned for voice communications such as VoIP.

int VOICE_DOWNLINK

Voice call downlink (Rx) audio source.

int VOICE_PERFORMANCE

Source for capturing audio meant to be processed in real time and played back for live performance (e.g karaoke).

int VOICE_RECOGNITION

Microphone audio source tuned for voice recognition.

int VOICE_UPLINK

Voice call uplink (Tx) audio source.

ChatGPT有模有样的瞎编出来一种指定Microphone的方法,这就是它一向比较坑的地方。

也就是说,audioSource与实体设备无法关联,不能通过枚举的方法获得录音源,只能选择默认的几种。这种架构的设计,就是典型的隔离,用AudioRecord接口,不需要了解底层硬件(也无法设置和操作)。后面几篇文章会详细分析,介绍如何指定录音源设备录音。

虽然ChatGPT比较坑,但其中介绍了枚举录音源设备方法和代码,接下来先实现这些设备管理。下面代码是获取设备列表,生成名字后放入Recycler。

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

                    inputDevices = audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);

                    for (AudioDeviceInfo device : inputDevices) {
                        int type = device.getType();
                        // 这是麦克风
                        //if (type == AudioDeviceInfo.TYPE_BUILTIN_MIC || type == AudioDeviceInfo.TYPE_USB_DEVICE) {

                        String deviceInfo = "";
                        deviceInfo = "[" + device.getId() + "]" + DeviceTypeString.getDeviceTypeString(device.getType()) + "@";
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                            deviceInfo += device.getAddress().toString();
                        }
                        audioInfoList.add(deviceInfo);
                    }

                }

生成一个类型与String对应的Map,我手里的设备有如下几个种类:

        deviceTypeMap.put(AudioDeviceInfo.TYPE_WIRED_HEADPHONES, "有线耳机麦克风");
        deviceTypeMap.put(AudioDeviceInfo.TYPE_BLUETOOTH_SCO, "蓝牙麦克风");
        deviceTypeMap.put(AudioDeviceInfo.TYPE_TELEPHONY, "通话麦克风音频输入");
        deviceTypeMap.put(AudioDeviceInfo.TYPE_BUILTIN_MIC, "内置麦克风");
        deviceTypeMap.put(AudioDeviceInfo.TYPE_FM_TUNER, "FM收音机设备");
        deviceTypeMap.put(AudioDeviceInfo.TYPE_REMOTE_SUBMIX, "虚拟混音设备");

点击Recycler后,显示对应设备的详细信息:

    private void ShowMicrophoneDevice(int microphoneIndex){
        StringBuilder deviceInfo = new StringBuilder();
        AudioDeviceInfo inputDevice = inputDevices[microphoneIndex];
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            deviceInfo.append("产品名称:\t");
            deviceInfo.append(inputDevice.getProductName());

            deviceInfo.append("\n设备类型:\t");
            deviceInfo.append(DeviceTypeString.getDeviceTypeString(inputDevice.getType()));

            deviceInfo.append("\n设备ID:\t");
            deviceInfo.append(inputDevice.getId());

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                deviceInfo.append("\n设备位置:\t");
                deviceInfo.append(inputDevice.getAddress());
            }

            deviceInfo.append("\n支持采样率:\t");
            deviceInfo.append(getSampleRateInfo(inputDevice.getSampleRates()));

            deviceInfo.append("\n支持Channel数量:\t");
            deviceInfo.append(getChannelCountInfo(inputDevice.getChannelCounts()));

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                deviceInfo.append("\n支持metadata封装类型:\t");
                deviceInfo.append(getEncapsulationModeInfo(inputDevice.getEncapsulationModes()));
            }

            deviceInfo.append("\n支持Encoding类型:");
            deviceInfo.append(getEncodingInfo(inputDevice.getEncodings()));
        }
        textDeviceInfo.setText(deviceInfo);
    }

最终的效果如下,三星S7手机只有两个设备,我理解物理设备应该是有上下各有一个。通话设备应该是虚拟设备。

android audiorecord 指定麦克风,智能手机,android,音频

小米手机默认有5个设备,插入有线耳机和蓝牙耳机后,也可以列出增加的录音源设备:

android audiorecord 指定麦克风,智能手机,android,音频文章来源地址https://www.toymoban.com/news/detail-852758.html

到了这里,关于android开发获取手机麦克风设备信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android请求麦克风权限+系统权限页面回调

    目录 一、效果展示 二、代码实现 1、设置权限 2、UI 3、代码逻辑 之前写的基于原生api太复杂了,现基于PermissionX重新实现。 Android基于PermissionX请求mic权限 在manifest文件中配置RECORD_AUDIO权限 简单的button按钮,点击触发动态申请权限逻辑

    2024年02月11日
    浏览(55)
  • vue前端获取/切换麦克风,播放采集音频和采集音量大小

    使用时确保你有如下依赖且版本为Vue2,终端里面运行 重要代码:audio: { deviceId: this.form.chooseMicDeviceId },将上面选的麦克风放到getUserMedia中,即可启用用户自己选择的麦克风 在sendData中可以把数据流传给后端,可以播放/下载采集到的数据流,也可以将数据流转换成file传给后端

    2024年02月08日
    浏览(46)
  • Android麦克风数据采集格式和常见的编码格式

    在 Android 平台上,PCM(脉冲编码调制)数据是一种常用的音频数据表示格式。PCM 是一种无损音频编码,可以捕捉和存储原始音频信号的波形。在 Android 系统中,开发人员可以使用 PCM 数据处理音频信号,以实现音频播放、录音、实时语音通信等功能。 在处理 PCM 数据时,And

    2023年04月08日
    浏览(53)
  • 解决win10测试麦克风显示有声音,但是实际使用teams还有其他录音设备时没有声音

    在声音设置和麦克风测试里面都是有输入有声音的状态,但是在Teams通话时没有声音。 其他方法都试过了都没有用,可以试试下面的设置: 1.麦克风属性 2.高级,取消勾选独占

    2024年02月12日
    浏览(111)
  • Android WebView加载h5打开麦克风与摄像头的权限问题

    Android webview h5 麦克风权限,摄像头(相机)权限实现与填坑。 app 必须先具备如下权限(本文只讨论录音与相机) AndroidManifest中添加: 注意:前面两项需要app动态申请 懒人快速做法(可直接copy代码) 默许授权(不再确认) 当h5向app申请的时候,重写 WebChromeClient 的onPermis

    2024年02月11日
    浏览(63)
  • 微信小程序开发中的麦克风录音和音频上传

    微信小程序开发中,麦克风录音和音频上传非常常见。下面将详细介绍如何使用微信小程序开发工具进行麦克风录音和音频上传。 一、麦克风录音 首先在wxml文件中添加一个录音按钮,用于触发录音操作:   然后在js文件中定义startRecord事件,用于开始录音:

    2024年02月04日
    浏览(48)
  • Android 使用外置USB麦克风MIC录音遇到问题并解决(含录音播放源码)

    使用RK3399的开发板,跑Android8.1系统 一开始插上外置的USB麦克风的时候,无法使用 查看USB麦克风拔插过程的debug打印日志 插入USB麦克风后,adb 查询当前声卡信息 cat cards 通过分析发现,USB麦克风设备没有枚举出来,节点都没挂载上去 这时候就怀疑是硬件问题, USB麦克风设备

    2024年02月09日
    浏览(84)
  • 音频——数字麦克风和模拟麦克风(DMIC/AMIC)

    麦克风 (microphone):是将声音信号转换为电信号的能量转换器件,也就是用来采集你说话的声音 扬声器 (speaker):是一种把电信号转变为声信号的换能器件,就是把对方说话产生的电信号转换成声音播放出来。 简单来说,麦克风的功能是采集声音,扬声器的功能是播放声音。

    2024年02月10日
    浏览(77)
  • 如何在云电脑串流中实现声音输入输出—虚拟声卡(虚拟扬声器和虚拟麦克风)开发

    虚拟声卡(虚拟扬声器和虚拟麦克风)技术原理简介 近些年云计算的发展可谓是势不可挡,无论是办公还是娱乐等行业都开始使用云计算来逐步替代直接使用本地物理硬件的技术,例如: 服务器部署。相比之前,现在部署一个服务器都非常简单;我们只需要在阿里云,华为

    2024年02月04日
    浏览(59)
  • 电脑麦克风没声音?

    这3招就可以解决! 在我们使用电脑录制视频时,有时会遇到一个令人头疼的问题:麦克风没有声音。那么,为什么会出现这种情况呢?更重要的是,我们应该如何解决这个问题呢?本文将介绍3种方法,帮助您解决麦克风没有声音的难题! 方法一:通过声音设置来调整麦克风

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包