首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不录音的情况下采样Android上的麦克风,以获得实时振幅/电平?

在不录音的情况下采样Android上的麦克风以获得实时振幅/电平,可以通过使用AudioRecord类来实现。AudioRecord类允许应用程序直接从麦克风输入流中读取音频数据,而不需要保存到文件。

以下是实现这一功能的基础概念和步骤:

基础概念

  1. AudioRecord类:这是Android提供的一个用于音频采集的类,可以从麦克风获取音频数据。
  2. 采样率(Sample Rate):音频每秒采样的次数,单位是Hz。
  3. 通道数(Channel Configuration):单声道(MONO)或立体声(STEREO)。
  4. 音频格式(Audio Format):如PCM_16BIT表示16位PCM编码。
  5. 缓冲区大小(Buffer Size):用于存储音频数据的缓冲区大小。

实现步骤

  1. 初始化AudioRecord
    • 确定采样率、通道数、音频格式和缓冲区大小。
    • 使用AudioRecord.getMinBufferSize方法获取最小缓冲区大小。
    • 创建AudioRecord实例。
  • 开始录音
    • 调用AudioRecord.startRecording方法开始录音。
  • 读取音频数据
    • 使用AudioRecord.read方法从麦克风读取音频数据。
    • 计算振幅/电平。
  • 停止录音
    • 调用AudioRecord.stop方法停止录音。
    • 释放AudioRecord资源。

示例代码

代码语言:txt
复制
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;

public class MicrophoneSampler {
    private static final int SAMPLE_RATE = 44100;
    private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
    private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
    private static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);

    private AudioRecord audioRecord;

    public MicrophoneSampler() {
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT, BUFFER_SIZE);
    }

    public void startSampling() {
        audioRecord.startRecording();
        short[] buffer = new short[BUFFER_SIZE];
        while (true) {
            int read = audioRecord.read(buffer, 0, BUFFER_SIZE);
            if (read > 0) {
                // 计算振幅/电平
                double amplitude = calculateAmplitude(buffer, read);
                System.out.println("Amplitude: " + amplitude);
            }
        }
    }

    private double calculateAmplitude(short[] buffer, int size) {
        long sum = 0;
        for (int i = 0; i < size; i++) {
            sum += Math.abs(buffer[i]);
        }
        return (double) sum / size;
    }

    public void stopSampling() {
        if (audioRecord != null) {
            audioRecord.stop();
            audioRecord.release();
            audioRecord = null;
        }
    }

    public static void main(String[] args) {
        MicrophoneSampler sampler = new MicrophoneSampler();
        sampler.startSampling();
    }
}

应用场景

  • 实时音频处理:如音频可视化、实时音频效果处理等。
  • 语音识别:在不保存录音文件的情况下,实时处理语音数据。
  • 噪声检测:实时监测环境噪声水平。

可能遇到的问题及解决方法

  1. 权限问题:确保在AndroidManifest.xml中声明了麦克风权限,并在运行时请求用户授权。
  2. 权限问题:确保在AndroidManifest.xml中声明了麦克风权限,并在运行时请求用户授权。
  3. 权限问题:确保在AndroidManifest.xml中声明了麦克风权限,并在运行时请求用户授权。
  4. 缓冲区大小问题:确保选择的缓冲区大小是有效的,可以通过AudioRecord.getMinBufferSize方法获取最小缓冲区大小。
  5. 性能问题:在高采样率或大缓冲区情况下,可能会遇到性能问题。可以通过调整采样率和缓冲区大小来优化性能。

参考链接

通过以上步骤和示例代码,你可以在Android设备上实现不录音的情况下采样麦克风,并获得实时振幅/电平。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

数字音频基础知识

当这些电压变化通过麦克风电线传输时,可以在磁带上记录成磁场强度变化或在黑胶唱片记录成沟槽大小变化。扬声器工作方式与麦克风相反,即通过音频录音和振动中电压信号重新产生压力波。...低采样率会限制可录制频率范围,这可导致录音表现原始声音效果不佳。 ? 两个采样率 A. 使原始声波扭曲采样率。 B. 完全重现原始声波采样率。...---- dBFS 为单位测量振幅 在数字音频中,幅度满量程分贝数或 dBFS 为单位测量。最大可能振幅为 0 dBFS;所有低于该值振幅均表示为负数。...注意: 给定 dBFS 值直接对应于声学 dB 为单位测量原始声音压力级别。...---- 音频文件内容和大小 硬盘中音频文件( WAV 文件),包含一个表示采样率和位深度小标头,然后是一长列数字,每个采样一个数字。这些文件可能非常大。

1.5K41

Audio CODEC 基本知识及应用

有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟,一般是采样频率256 倍。数据传输时 MSB或 LSB 均可在前。数据字长度固定,可以高达28 位。...在数字领域,Pre-emphasis 主要用意在于降低量化失真,因为一般音乐讯号高频段往往振幅比较小,而且越高频率振幅越小,所以从PCM 取样原理中我们可以发现这些小振幅会被分配到较少数bits...常见声卡都支持44.1kHz 和48kHz 信号输入,而这2 种采样率不是整数倍关系,如果同时支持这2 种采样率输出的话,声卡需要2 颗晶振。...前者是为了把各种不同取样率音源转换为统一采样率,方便接受各种不同音源CD,DAT,DVD 等等;而后者是以拉开谱线簇之间频率间隔,减少混叠噪声和简化后续低通滤波器为目的。...录音时候音源可能会时远时近,声音可能会时大时小。预先设定一个目标电平(target lever),我们希望录音电平总是等于目标电平

2.4K11
  • webAudio 开发 H5 版《 八分音符酱 》

    /index.html 玩法 连接耳机后,最好在微信或手Q打开这个页面(系统需android5.0+),同意获取麦克风权限。...然后对着麦克风大声说几句话,“啊……”,然后游戏里面的doge就会开始走了,声音大到一定程度,doge就会跳起来,掉坑则输。...录音音频返耳 音频返耳指的是在录音过程中,麦接收音频在耳机实时反馈。...利用webAudioApiAnalyser接口可以获取到音频经过傅里叶变换后数据,这些数据包含了音频振幅等信息。如果要实时获取音频振幅大小,需要在 onaudioprocess 中获取数据。...由于麦克风获取到音频噪音成分有点大,此处作一个加权处理,平均后值作为目标振幅值。最后根据处理后音频振幅进行游戏行走和跳跃。

    3K10

    语音项目——Android录音学习

    一、引言 小编所在语音SDK项目,提供是AI服务,录音是基础,识别是品质。录音方式选择,录音参数设置,录音策略制定(解决首字吞字问题),录音架构选择,对识别都有着重要影响。...二、Android两种录音方式 1、音频采集简介 Android提供了两个API用于录音实现:MediaRecorder 和AudioRecord。 (1)....2、优、缺点 录音方式 优点 缺点 AudioRecord(基于字节流录音) 可实现语音实时处理,边录边播,对音频实时处理,AudioTrack更接近底层。...声音数据从音频硬件中被读出,数据大小超过整个录音数据大小(可以分多次读出),即每次读取初始化 buffer 容量数据。...sampleRateInHz:音频采样率,越高质量越好。 常用频率为44100Hz,可以在所有的设备完美运行,还有其他频率包括22050,16000,11025只能在某些设备正常运行。

    3.2K10

    影视后期丨Adobe Audition安装教程-AU软件全版本下载地址 +干货分享

    )实际峰值幅度:音频最大峰值上限最大采样值:最高振幅样本最小采样值:最低振幅样本可能剪切样本:可能超过 0dBFS 样本数(也称“削波”,可通过“菜单栏-效果-诊断-爆音降噪器”进行修复)RMS...:将自己添加效果组保存为预设效果器插槽:添加效果插槽(点击右侧小三角即可添加)输入/输出:添加效果前电平/添加效果后电平混合:干湿混合功能(添加效果前与添加效果后混合程度)预渲染音轨:避免实时播放占...快速反应、大比例(>10:1)压缩, “钳位”输出电平,保护后级苏州和喇叭。...:确定输入信号记录变化振幅电平所需时间释放时间:记录另一次振幅变化之前保持当前振幅电平时间峰值/RMS模式:振幅峰值电平;根据均方根公式确定电平增益处理器:根据检测到振幅放大或减弱信号输出增益...特性:镶边中每个语音特性初始延迟时间:设置在原始信号之后开始镶边点(毫秒为单位)最终延迟时间:设置在原始信号之后结束镶边点立体声相位:设置左右声道延迟反馈:反馈回镶边中镶边信号百分比(没有反馈

    2.9K20

    Android多媒体之认识声音、录音与播放(PCM)

    经过麦克风采集,将声波信号转换为电信号, 电信号波形是和原来声波波形一样。只是换种物理量来表示和传递。(电信号模拟振动信号)。...断 1-通) ---- 2.采样一些参数 采样大小:振幅最大值。...一个采样存储空间,常用16bit (0-65535)振幅 采样率 :采样频率 8K、16K、32k、(AAC)44.1K、48K(1s在模拟信号采集48K次) 20Hz 频率即1s振动20次,使用...:采样率*采样大小*声道数b/s :44100*16*2=1411200b/s=1378.125Kb/s= 172.265625KB/s 即每秒钟172.265625KB ---- 3.字节(Byte...(振幅)才能被听到 最简单响度-频率关系图如下(图是我用ps修,如果有误,欢迎指正): 可见在3KHz~5KHz阀值较小,也就是更容易听到 ?

    3.5K30

    Android实现频域均衡器

    DecibelDetector类会异步处理麦克风声音数据频率是80ms/次,使用android系统AudioRecord类实现。...这里BUFFER_SIZE是每次采样获得时域数据长度。 采样频率32kHz、单声道、16位PCM编码方式得到一个BUFFER_SIZE长度short数组,即一次采样得到声音时域数据。...振幅总量。...``` 注意: 1)这里数组下标意义源于这段声音本身属性:采样率,声道等.如果采样频率大,在N不变情况下数组下标的频率间隔越大。...四、总结 本篇文章主要介绍了将录音从时域数据转化成频域数据方法,所有代码和具体实现都是基于Android,其中FFT代码源于互联网,FFT讲解部分多半源于K.R.Rao《快速傅里叶变换:算法与应用

    1.8K20

    Android 音频】“声音”从何而来

    二、录音方式 1、系统内录 直接上 Google 官方文档,大意就通过该接口可以进行实时字幕和游戏内录音。...这里不准备深入,因为硬性要求 Android Q 及以上系统版本(文末有 AudioPlaybackCapture 使用实例可以参考): 2、麦克风录制 麦克风录制要特别注意两个情况: 同时只能有一个实例存在...2.1、基本概念 Android 系统提供录制麦克风方式就两种:MediaRecorder 和 AudioRecord: MediaRecorder:简易模式,调用简单,只有开始、结束,录音之后文件也是指定编码格式...AudioRecord:原始模式,可以暂停、继续,可以实时获取到 PCM 数据然后进行音视频混合,也是录屏软件经常使用接口。 2.2、麦克风内录另类实现 ?...Android 源码中进行编译工程才可以获取系统签名权限 会截走扬声器和耳机声音,也就是说在录音时本地无法播放声音 3、Hook 内录 通过以下 Android 音频系统架构图可以看出,Android

    2.2K40

    音频数字化简单原理「建议收藏」

    两个概念: 1、分贝(dB):声波振幅度量单位,非绝对、非线性、对数式度量方式。人耳所能听到最静声音为1dB,那么会造成人耳听觉损伤最大声音为100dB。人们正常语音交谈大约为20dB。...如果我们用传统类比方式记录以上信号,例如使用录音带 表面的磁场强度来表达振幅大小,我们在复制资料时,无论电路设计多么严谨,总是无 法避免杂讯介入。...这些杂讯会变成复制后资料一部份,造成失真,且复制越多次信 噪比 ( 信号大小与噪音大小比值 ) 会越来越低,资料细节也越来越少。如果多次 复制过录音带,对以上经验应该陌生。...在数字化世界里,这串数字转换为二进制 ,电压高低来判读1与0,还可以加上各种检查码,使得出错机率很低,因此在一般 情况下无论复制多少次,资料内容都是相同,达到不失真的目的。...除了上述因素外,数字化音频质量还受其它一些因素(扬声器质量,麦克风优劣,计 算机声卡A/D与D/A(模/数、数/模)转换芯片品质,各个设备连接线屏蔽效果好坏等) 影响。

    2.2K20

    PWM实现语音播放原理

    麦克风可以将传入声音转换为代表声音模拟电信号,这些电信号通过扬声器将模拟电信号转换成原始声音。 那么该如何记录这些模拟信号呢?很早时候,人们就想出了将模拟信号存储为唱片凹槽。...于是在进行DAC输出时候,我们也可同样采用16位宽DAC进行采样,然后44kHz频率将声音信号转化出来,这对于MCU上去操作DAC并非难事,只需要启用一个16位宽DAC和一个定时器即可,定时器用于控制声音输出频率...,采样率位44.1KHz,则按照该时钟频率输出即可。...有着如下公式说明: SNR(dB)=(Bit Depth)*6.02dB + 1.76dB) 也就是说,如果要获得更好声音效果,可以有两种办法,第一种是降低PWM频率,也就是一章节解释那样,...使用PWM直接给无源蜂鸣器供电,当高电平时,无源蜂鸣器响,低电平响。

    3.7K12

    实时Android语音对讲系统架构

    和AudioTracker是Android中获取实时音频数据接口。...sampleRateInHz表示采样频率。音频采集过程要经过抽样、量化和编码三步。抽样需要关注抽样率。声音是机械波,其特征主要包括频率和振幅(即音调和音量),频率对应时间轴线,振幅对应电平轴线。...采样是指间隔固定时间对波形进行一次记录,采样率就是在1秒内采集样本次数。量化过程就是用数字表示振幅过程。编码是一个减少信息量过程,任何数字音频编码方案都是有损。...) sampleRateInHz, channelConfig, audioFormat三个参数与上面的含义完全一样,代表录音采样率、通道以及数据输出格式。...发出这个请求客户端并不知道链哪一个对象最终处理这个请求,这使得系统可以在不影响客户端情况下动态地重新组织和分配责任。

    5K40

    音视频面试题集锦 2023.09

    1)时域 定义: 横轴时间,纵轴振幅(反应时间能量),表示所有频率叠加正弦波振幅总大小随时间变化规律,复合波形进行傅里叶变换,可拆解还原成每个频率单一正弦波构成 在音频中作用: 检测音乐整体音量大小...检测混音时动态和响度问题 辅助调节压缩器和限制器 2)频域 定义: 横轴频率,纵轴振幅,表示一个静态时间点各个频率正弦波振幅分布情况 在音频中作用: 检测音乐细节在各频段分布 辅助调节滤波器和均衡器...5、拍短视频想把同时播放音乐录制下来一般要经过怎样处理流程? 有一种方案是把麦克风采集声音中外放音乐声进行回声消除,然后再添加上音乐原始音轨。一般在 iOS 设备可以考虑这种方案。...但是在 Android 设备我们通常这样做,原因有下面几点: 对音乐进行回声消除同时也会对麦克风采集到其他声音有抑制效果,导致最后整体声音效果不好; 手机播放音乐到麦克风采集到声音之间有一定延时...,不同 Android 设备延时差异较大,这个延时估算不准确会影响回声消除效果。

    59220

    声源定位「建议收藏」

    带通放大器高通滤波器被选择为与初始高通滤波器截止值大致匹配。至于运算放大器低通滤波器,选择该滤波器截止频率约为725Hz。选择这些较低频率选择是因为我们能够用原始方法获得原始采样率。...4.7 尝试了另一种方法 我们尝试第一种声音定位计算方法是连续计算每个麦克风通道与预先录制录音互相关。因此,由于实时计算需求非常紧张,采样率受到很大限制。...我们达到最高采样速率在微处理器运行时为60 MHz,它太低,无法合理分辨麦克风通道之间时序延迟。从这种方法获得结果不能识别出符合理论直觉一致相关性。...两条迹线显示来自其中一个麦克风记录信号,下迹线显示来自两个麦克风通道互相关结果。互相关迹线使用高电平信号来显示数据何时开始和结束。这使我们能够看到互相关起点和终点以及峰值位置。...这只会使麦克风电路在输入信号中产生一些希望相移。更糟糕是,由于相移差可能与频率有关,并且测试信号是频率线性扫描,这意味着采样和互相关结果将取决于用户在频率扫描中在正确时间按下按钮能力。

    1.8K10

    音频开发入门基础知识

    那么到底振动如何引起声音,又怎样能被我们听到呢? 从技术上来说,声音是物理能量(拍手)到空气压力扰动转换。空气压力中这种改变通过空气一连串振动(声波)形式传播。...它以赫兹 (Hz) 为单位进行测量,表示每秒记录音频信号样本频率。 样本是对特定时间点音频信号响度度量。采样率是音频信号质量重要因素,因为它直接影响信号带宽。...由于声波是连续波,因此具有无数可能振幅值,因此我们需要将其振幅值建立为数字位,准确地再现它们。...它拥有 5.1 环绕声所有功能,但包括一个额外后环绕声道,位于您座位区后面,获得更身临其境声音。 7.1。...其次,我们探讨了耳朵如何听到声音,以及人耳能够听到频率范围。然后,从工程角度出发,介绍了音频是如何播放和录音,包括麦克风采集声音、模数转换、数字信号处理等。

    41410

    Android 两种录音方式

    Android 录音 录音简介 Android提供了两个API用于录音实现:MediaRecorder 和AudioRecord。...MediaRecorder已经集成了录音、编码、压缩等,并支持少量录音音频格式,但是这也是他缺点,支持格式过少并且无法实时处理音频数据。...声音数据从音频硬件中被读出,数据大小超过整个录音数据大小(可以分多次读出),即每次读取初始化 buffer 容量数据。...采样率:一秒钟对声音数据采样次数,采样率越高,音质越好。 音频通道:单声道,双声道等, 音频格式:一般选用PCM格式,即原始音频样本。...MediaRecorder 使用起来会麻烦一些,但优点也是显而易见,AudioRecorder 录音时直接操纵硬件获取音频流数据,该过程是实时处理,可以用代码实现各种音频封装,同时也可实现暂停功能

    7.2K31

    Android实现录音功能实现实例(MediaRecorder)

    本文介绍了Android实现录音实例代码(MediaRecorder),分享给大家,具体如下: Android提供了两个API用于录音实现:MediaRecorder 和 AudioRecord,各有优劣...:无法实时处理音频;输出音频格式不是很多,例如没有输出mp3格式文件 2、AudioRecord 主要是实现边录边播(AudioRecord+AudioTrack)以及对音频实时处理(会说话汤姆猫...、语音) 优点:语音实时处理,可以用代码实现各种音频封装 缺点:输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放,所以必须先写代码实现数据编码以及压缩 先说 MediaRecorder...:AAC/AMR_NB/AMR_MB/Default 声音(波形)采样 */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC.../AMR_MB/Default 声音(波形)采样 */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); fileName

    6.3K51

    声音表示(3):作为音视频开发,你真的了解声音吗?丨音视频基础

    之后再经过放大电路处理,就可以实施后面的采样、量化处理了。 上面探讨了声音三要素数学描述,这是声音数字化基础。 声音由波形组成,包含了不同频率、振幅叠加。...为了在数字媒体内表示这些波形,需要对波形进行采样,其采样率需要满足可以表示声音最高频率;同时还需要存储足够位深,表示声音样本中波形适当振幅。...声音数字化过程是将模拟信号(连续时间信号)转化为数字信号(离散时间信号)过程,包括 3 个步骤: 采样一定采样率在时域内获取离散信号。 量化:每个采样点幅度数字化表示。...从发声角度来看,人类发出声音信号频率绝大部分在 5k Hz 以内,因此 10k Hz 频率来采样就足够了。...Hz:商用 PCM 录音机所用采样率; 48,000 Hz:miniDV、数字电视、DVD、DAT、电影和专业音频所用数字声音所用采样率; 50,000 Hz:商用数字录音机所用采样率; 96,000

    1.1K10

    Audition工具在录音测试中应用

    查看音频格式 用途 搜狗录音笔支持多种录音场景设置,每种场景之间 MIC阵列/算法及采样率、位深度有所不同,在测试不同场景下音频格式时,可以使用audition直接查看音频参数,十分方便。...解释 audition可查看有用参数有 时长、采样率、声道、位深度、原格式、媒体类型、帧速率(媒体类型为视频时显示)。 ? 2....低频段频率过弱,音色将会变得单薄、苍白; 低频段频率过强,音色音色会变混浊不清。 2....按下鼠标左键横向滑动,选中一段区域(背景噪声区域或讲话区域),窗口——振幅统计——扫描选区——查看感知响度,此处为-37.95dB ?...up主们为在众多创作者中脱颖而出,除了提高内容质量外,工具也是越来越专业,为保证嘈杂环境/外场录制音质音量,他们往往会在拍摄设备外接一个麦克风,根据不同录制场景,对麦克风需求也不尽相同 ,比如近距离录音

    3K10

    机器学习原来如此有趣:如何用深度学习进行语音识别

    大数据 每个数字代表声波在一秒钟16000分之一处振幅。 数字采样小助手 因为声波采样只是间歇性读取,你可能认为它只是对原始声波进行粗略近似估计。...我提这一点,是因为几乎每个人都会犯这个错误,并误认为使用更高采样率总是会获得更好音频质量。其实并不是。...这在某些情况下是真实,但对于语音识别并不成立。语音识别是一个困难问题。你得克服几乎无穷无尽挑战:劣质麦克风、背景噪音、混响和回声、口音差异等等。...或 Alexa 等平台上运行语音识别系统,你将需要大量训练数据 。如果你数百人为你录制的话,它需要训练数据比你自己能够获得数据要多得多。... Android 手机,请点击这里收听你自己对它说过每一句话: ? 大数据 你可以通过 Alexa 在 Amazon 找到相同东西。

    1.2K120

    音频基础知识 - PCM 浅析

    模拟音频:用连续电流或电压表示音频信号,在时间和振幅是连续。过去记录声音都是模拟音频,比如:机械录音留声机、机械唱片为代表)、磁性录音磁带录音为代表)等模拟录音方式。...计算机不能直接处理连续模拟信号,所以需要进行A/D转换,一定频率对模拟信号进行采样(就是获取一定时间间隔波形振幅值,采样后模拟出波形与原始波形之间误差称为采样噪音),然后再进行量化和存储,就得到了数字音频...数字音频:通过采样和量化获得离散、数字化音频信号,即:计算机可以处理二进制音频数据。 相反,当通过扬声器播放声音时,计算机内部数字信号通过D/A转换,还原成了强弱不同电压信号。...采样频率越高,声音质量越好,但同时占用带宽越大。一般情况下,22KHz相当于普通FM音质,44KHz相当于CD音质,目前常用采样频率都不超过48KHz。...当成最小采样值1处理就可以了。所以如果采样位数是16 bit,那么无符号情况下,最大分贝是: ? 有符号情况下,最大分贝是: ?

    3.9K21
    领券