`

android手机的Mic对声音的感知

 
阅读更多

      这段时间做了个有关android手机利用mic捕获外界环境音量的小东东,多方查询,各种研究,现在把这些东西跟童鞋们分享一下,如有不足或者差错,还望大牛们多给意见。

        android提供可以实现录音功能的有AudioRecord和MediaRecorder,其中AudioRecord是读取Mic的音频流,可以边录音边分析流的数据;而MediaRecorder则能够直接把Mic的数据存到文件,并且能够进行编码(如AMR,MP3等)。

        首先,要将你的应用加入权限(无论你是使用AudioRecord还是MediaRecorder):

                 <uses-permission android:name="android.permission.RECORD_AUDIO" />

        然后,分开介绍两者的用法。

        《!--AudioRecord--》

        1、新建录音采样类,实现接口:

             public class MicSensor implements AudioRecord.OnRecordPositionUpdateListener

        2、关于AudioRecord的初始化:

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

             audioSource:              录音源(例如:MediaRecorder.AudioSource.MIC    指定Mic为录音源)

             sampleRateInHz:        默认的采样频率,单位为Hz。(常用的如44100Hz、22050Hz、16000Hz、11025Hz、8000Hz,有人说44100Hz是目前保证在所有厂商的android手机上都能使用的采样频率,但是个人在三星i9000上使用却不然,经测试8000Hz似乎更为靠谱)  

            channelConfig:           描述音频通道设置。(在此我使用了AudioFormat.CHANNEL_CONFIGURATION_MONO)

            audioFormat:              音频数据支持格式。(这个好像跟声道有关,16bit的脉码调制录音应该是所谓的双声道,而8bit脉码调制录音是单声道。AudioFormat.ENCODING_PCM_16BIT、AudioFormat.ENCODING_PCM_8BIT

           bufferSizeInBytes:        在录制过程中,音频数据写入缓冲区的总数(字节)。 从缓冲区读取的新音频数据总会小于此值。 getMinBufferSize(int, int, int)返回AudioRecord 实例创建成功后的最小缓冲区。 设置的值比getMinBufferSize()还小则会导致初始化失败。

       3、初始化成功后则可启动录音    audioRecord.startRecording()

       4、编写线程类将录音数据读入缓冲区,进行分析

             short[] buffer = new short[bufferSize];              //short类型对应16bit音频数据格式,byte类型对应于8bit
             audioRecord.read(buffer, 0, bufferSize);            //返回值是个int类型的数据长度值

      5、在此需要对buffer中的数据进行一些说明:

           这样读取的数据是在时域下的数据,直接用于计算没有任何实际意义。需要将时域下的数据转化为频域下的数据,才能诉诸于计算。

           频域(frequency domain)是指在对函数或信号进行分析时,分析其和频率有关部份,而不是和时间有关的部份。

           函数或信号可以透过一对数学的运算子在时域及频域之间转换。例如傅里叶变换可以将一个时域信号转换成在不同频率下对应的振幅及相位,其频谱就是时域信号在频域下的表现,而反傅里叶变换可以将频谱再转换回时域的信号。

           信号在时域下的图形可以显示信号如何随着时间变化,而信号在频域下的图形(一般称为频谱)可以显示信号分布在哪些频率及其比例。频域的表示法除了有各个频率下的大小外,也会有各个频率的相位,利用大小及相位的资讯可以将各频率的弦波给予不同的大小及相位,相加以后可以还原成原始的信号。

           经傅立叶变化后得到的复数数组是个二维数组,实部和虚部的平方和取对数后乘以10就大致等于我们通常表示音量的分贝了。

       《!--MediaRecorder--》

         相对于AudioRecord,MediaRecorder提供了更为简单的api。

[java] view plaincopy
 
  1.               mediaRecorder = new MediaRecorder();  
  2. mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
  3. mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
  4. mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
  5. mediaRecorder.setOutputFile("/dev/null");    

         设置好mediaRecorder的各个属性,然后通过线程调用方法  mediaRecorder.getMaxAmplitude();

            得到的是瞬时的最大振幅,直接取对数然后乘以10就可以表征分贝了。

            最后需要说明一下,android手机厂商定制的硬件不尽相同,所以mic获取的值也只能“表征”,而不能拿过来当真正的依据。它们虽是智能手机,但也还是手机,机器人不是人!呵呵。。。

            对了,每个手机mic在声信号和电信号进行转换时都有做过电容保护,为了其不因外界环境的过于嘈杂而易受到损坏。所以超声波和次声波,我们人不容易接受的声音,手机也不会入耳的。

             

分享到:
评论

相关推荐

    android系统测试硬件的应用

    开发者和测试人员可以通过这些工具对硬件进行全面而深入的评估,确保Android设备的硬件兼容性和可靠性。 总之,Android系统测试硬件的应用是保证设备质量和用户满意度的重要步骤。通过细致入微的测试,我们可以发现...

    android获取音量分贝值

    首先,我们需要理解音量分贝(dB)是一个表示声音强度的单位,它基于人耳对声音感知的对数尺度。在Android系统中,音量通常被分为多个级别,如媒体音量、铃声音量等,但这些级别的值并不直接对应分贝。要获取实际的...

    Android下声纹认证

    在Android平台上,声纹认证是一种基于用户独特声音特征的身份验证技术。它利用音频处理和机器学习算法来识别和验证特定个体的声音,为用户提供安全、便捷的解锁或验证方式。在这个项目中,我们主要关注如何在Android...

    android吹一吹功能的实现

    在Android平台上,"吹一吹"功能是一种新颖的交互方式,它通过感应用户对设备的吹气动作来触发特定的功能或活动。这种功能通常依赖于设备的加速度计、陀螺仪以及麦克风等传感器来检测用户的吹气行为。下面我们将深入...

    SoundMeter android声压分贝测试

    在Android平台上,有一款名为“SoundMeter”的应用,它能实时监测并显示麦克风(MIC)接收到的声压分贝值,为用户提供精准的声音测量服务。本文将深入探讨这款应用的工作原理、功能特点以及与声压和分贝相关的基础...

    android录音压缩

    例如,可以设置音频源为`MediaRecorder.AudioSource.MIC`来捕获麦克风的声音,设置编码格式为`MediaRecorder.OutputFormat.THREE_GPP`或`MediaRecorder.OutputFormat.MPEG_4`,而采样率和位深度则影响声音的质量和...

    Android应用源码之RecordSound-IT计算机-毕业设计.zip

    首先,RecordSound项目的核心是利用Android系统的MediaRecorder类来实现声音录制。MediaRecorder是Android提供的一种用于录制音频和视频的API,它可以处理音频源、编码、输出格式等关键环节。在源码中,我们通常会...

    Android应用源码之录音机软件.zip

    6. **通知与服务**:如果录音需要在后台持续进行,源码可能还包含使用`Service`的实现,以及使用`Notification`保持用户对录音状态的感知。 7. **音频播放**:除了录制,源码可能还包括播放功能,这会用到`...

    android笔记

    在Android开发中,传感器是设备与用户交互的重要方式,它们能够感知到设备的各种物理运动和环境变化。在本文中,我们将深入探讨如何利用传感器来实现录音功能,特别是使用加速度传感器来检测设备的摇动,并根据摇动...

    Android源码——测试周围环境分贝的功能源码_new_53.7z

    开发者需要将这些数据转换成人类可感知的声音级别,这通常涉及对音频信号进行快速傅里叶变换(FFT),然后计算功率谱密度,最后将结果转换为分贝。 6. **用户界面**: 应用的用户界面需要显示当前的分贝值。这可能...

    Yarlung物联网终端操作系统解决方案介绍1723.pptx

    物联网的需求催生了对统一操作系统的渴求,尤其是在感知层,各种不同的传感器设备和运行环境需要一个专门的解决方案来保证信息的高效通信。此外,物联网应用不仅需要简单的数据采集,还需要处理更复杂的任务,支持...

    百度商用服务机器人用户手册

    完成环境感知能力、自主避障能力、智能交互能力及知识库四大部分的升级迭代,使新的机器人实现质的提升,从目前国内领先的水平,达到国际领先的目标。 二、主要功能及特点 百度 AI-Robot1s 型智能商用服务机器人...

    TWS耳机产品发展趋势预测分析-降噪、音质及智能化为三大发展方向.docx

    尽管LDAC技术在Android 8.0中得到了支持,但由于接收端设备的普及还需要时间,aptX HD因其广泛的应用基础和高通在芯片领域的优势,可能具有更广阔的市场前景。随着技术的成熟,更高品质的TWS耳机将陆续面世。 3. **...

    ESP8266模块1

    * 支持CCMP(CBC-MAC、计数器模式)、TKIP(MIC、RC4)、WAPI(SMS4)、WEP(RC4)、CRC的硬件加速 * P2P发现, P2P GO模式/GC模式和P2P电源管理 * WPA/PA2 PSK和WPS * 802.11i安全特征:预认证和TSN * 支持802.11n(2.4 GHz...

    智慧课堂项目参数 (3).docx

    - **其他功能:** 支持wIDS及wIPS,智能无线业务感知(wIAA),空间流MIMO≥2条,802.11ac模式下最高带宽≥866Mbps,目标UDP吞吐量≥600Mbps,并发VoIP客户端≥500。 - **接口配置:** 1*HDMI、1*VGA、1* MIC-IN & ...

    智慧课堂项目参数 (2).docx

    11. **接口要求**:1个HDMI接口、1个VGA接口、1个MIC-IN&AUDIO OUT接口、2个USB 2.0接口、2个USB 3.0接口、1个RJ45(内置千兆网卡)。丰富的接口选项使得设备能够更好地与外部设备连接。 12. **外观尺寸**:不超过40...

Global site tag (gtag.js) - Google Analytics