AudioRecord

2023-05-16

数字音频

数字音频通常分为三步:采样、量化、编码

采样:就是将获取的信号给数字化,其中有个概念就是采样频率,而人耳能听到的频率范围只有20Hz~20kHz,所以一般设置的都是44.1kHz

量化:就是如何去表达采样的数据,常用使用二进制来表示声音信号的幅度

编码:如何去保存采样和量化过后的数据,这就出现了很多格式,其中最基础的格式就是PCM(脉冲编码调制),就是裸数据格式完全没有压缩,PCM格式中有几个属性:量化格式采样率声道数

量化格式:即使用多少比特的二进制去进行量化,例如我们使用16比特的二进制信号来进行量化,16比特的二进制范围是-32768到32767,范围大小为65536,所以声音分层就比较多,但是对应的是数据大小会增大

采样率:即前面采样中所说的采样频率

声道数:即单声道还是双声道以及更多声道

比特率:

每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,传送数据速度越快。

采样率x采样大小x声道数
每秒钟采样的大小=16bit(位宽) * 2(双通道) * 44100(每次采样的次数hz) = 1411200b=1411.2kbps

Android中的音频采集——AudioRecord的使用

在android中我们使用AudioRecord来进行音频采集,采样量化编码全套服务最后输出PCM数据

权限

首先要申请android.permission.RECORD_AUDIO权限

AudioRecord的初始化

 audioSize = AudioRecord.getMinBufferSize(44100,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT);
        audioRecord = new AudioRecord(
                MediaRecorder.AudioSource.MIC,
                44100,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT,
                audioSize);

我们可以看见初始化AudioRecord的几个属性

streamType 音频来源,例如麦克风MediaRecorder.AudioSource.MIC

sampleRateInHz 采样频率

channelConfig 声道数

AudioFormat.CHANNEL_IN_MONO 单声道,一个声道进行采样
AudioFormat.CHANNEL_IN_STEREO 双声道,两个声道进行采样

audioFormat:量化格式

  • 音频采样精度

指定采样的数据的格式和每次采样的大小。

数据返回格式为 PCM 格式
每次采样的位宽为 16bit

一般都采用这个 AudioFormat.ENCODING_PCM_16BIT(官方文档表示,该采样精度保证所有设备都支持)

bufferSizeInBytes:通过 getMinBufferSize()方法可以获得,根据我们采样录制的过程中的参数来确定,每次从硬件读取数据所需要的缓冲区的大小。

getMinBufferSize()

返回成功创建AudioRecord对象所需的最小缓冲区大小(以字节为单位)。没有实际意义。

我们可以发现初始化所需要的属性基本就是PCM的属性

AudioRecord的使用

初始化完之后,AudioRecord使用就很简单了

 while (isRecording) {
                        int readResult = audioRecord.read(bytes, 0, audioSize);
                        for (int i = 0; i < readResult; i++) {
                            outputStream.write(bytes[i]);
                        }
                    }

我们用关键字来控制无限循环,当停止录制的时候就关键字就控制while循环停止,然后在while循环中我们使用read方法,read方法会把数据传入byte数组中并返回数组大小,我们用for循环将byte数组中的数据用文件输出流输出到文件中,这就完成了PCM数据的采集,最后记住关闭audioRecord就可以了

以上就是在android中音频的采集

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AudioRecord 的相关文章

  • AudioRecord

    数字音频 数字音频通常分为三步 xff1a 采样 量化 编码 采样 xff1a 就是将获取的信号给数字化 xff0c 其中有个概念就是采样频率 xff0c 而人耳能听到的频率范围只有20Hz 20kHz xff0c 所以一般设置的都是44
  • 音频数据采集-AudioRecord

    一 AudioRecord 和 MediaRecorder Android 提供了两个 API 用于录音 xff0c AudioRecord 和 MediaRecorder AudioRecord 能够获取原始的 PCM 数据 xff0c
  • 基于Camera、AudioRecord 、MediaCodec 和 MediaMuxer 录制 MP4

    一 前言 在 AAC 音频编码保存和解码播放和Camera 视频采集 xff0c H264 编码保存 两篇文章中介绍了如何通过 AudioRecord 和 MediaCodec 录制 AAC 音频以及如何通过 Camera 和 MediaC
  • Android中音频元数据的采集,及RTMP推流

    在用手机做直播推流时 不管是录屏直播 还是摄像头直播 都要用到音频的元数据 在Android中 可以借助AudioRecord来采集音频数据 然后通过faac编码库 加入用的音频编码器是faac 将编码后的数据交给RTMP去封包后发送给服务
  • 当其他应用程序在 Android 中使用麦克风时,无法访问麦克风

    我使用以下 URL 中的代码通过 AudioRecord 从麦克风获取声音数据 http www dreamincode net forums topic 303235 visualizing sound from the micropho
  • 音频记录:缓冲区溢出?

    我遇到缓冲区溢出RECORDING与我的应用程序 录音是在Service 我不明白为什么我会收到这条消息AudioFlinger 下面我实例化AudioRecord对象并设置它的回调 bufferSize AudioRecord getMi
  • Android AudioRecord 初始化失败

    我在使用 Android 版 AudioRecord 时遇到问题 我已经在网上阅读了尽可能多的内容 但我似乎无法获得良好的初始化 我尝试过 Android 2 2 模拟器 1 5 模拟器和我的手机 运行 Froyo 的 HTC Incred
  • Android:使用audiorecord类录制音频快进播放

    我正在尝试录制音频并存储到 SD 卡中并发送到服务器 当我尝试播放录制的语音时 它会播放 但不是我录制的那样 如果我录制语音 10 分钟 它将播放 4 分钟 即有人按下快进按钮 并发出一些嘈杂的声音 我没有明白我要去哪里错了 谁能告诉我如何
  • Android AudioRecord 初始化延迟

    这是我正在处理的相关代码的示例 AudioRecord recorder setupAudio recorder startRecording 设置音频方法 public AudioRecord setupAudio AudioRecord
  • Android音频FFT显示基频

    我已经在一个 Android 项目上工作了一段时间 该项目显示输入信号的基频 充当调谐器 我已经成功实现了 AudioRecord 类并正在从中获取数据 但是 我很难对此数据执行 FFT 来获取输入信号的基频 我一直在看帖子here 并且正
  • 立即音频输入和输出 Android

    在我的 Android 应用程序中 我想从智能手机的麦克风中获取一些音频并立即播放 就像麦克风一样 没有延迟 我目前正在考虑使用AudioRecord and AudioTrack课程 根据我读过的内容 但我不太确定如何继续 我查看了 St
  • 在 Android 上使用 AudioRecord 录制可以加快音频速度吗?

    我正在使用 AudioRecord 录制原始音频以进行处理 音频记录完全没有任何噪音 但是当播放生成的原始 PCM 数据时 它的播放速度就好像被加快了很多 最多大约两倍 我正在 Audacity 中查看和播放 PCM 数据 我正在使用实际手
  • 更改 Android 录音默认输入源

    我目前正在编写一个需要录制和实时处理音频数据的应用程序 为此 我使用 AudioRecord 类 这一切都很好 除了我的主要测试设备 Galaxy Nexus 上录制音频的默认设置是从后置扬声器录制 我假设大多数手机的默认录音源是背面或底部
  • PCM -> AAC(编码器) -> PCM(解码器)实时且正确优化

    我正在尝试实施 AudioRecord MIC gt PCM gt AAC Encoder AAC gt PCM Decode gt AudioTrack SPEAKER with MediaCodec在 Android 4 1 API16
  • AudioFlinger 无法创建记录轨道,状态:-1 ,需要 ifx 的帮助

    public class AudioRecorderActivity extends Activity private static final int RECORDER SAMPLERATE 8000 private static fin
  • android, AudioRecord.read() --> 缓冲区溢出,如何处理缓冲区?

    对于我的教授的一个大学项目 希望我编写一个 Android 应用程序 这将是我的第一个应用程序 我有一些 Java 经验 但我对 Android 编程很陌生 所以请温柔地对待我 首先 我创建一个 Activity 其中只有两个按钮 一个用于
  • Android - 如何在录音时添加增益控制

    我为录音机应用程序工作 想添加增益控制 但我不知道该怎么做 我可以访问音频缓冲区 但我不知道如何使声音更大或更慢 我看到另一个应用程序有一个搜索栏 用于从特定范围内选择分贝 aRecorder read buffer 0 buffer le
  • 如何在 Android 中录制音频时调整麦克风灵敏度

    我正在开发一个录音应用程序 其中 我有一个 Seekbar 来更改输入语音增益 我找不到任何方法来调整输入语音增益 我正在使用AudioRecord类来录制语音 recorder new AudioRecord MediaRecorder
  • 当通过音频采样的数据数量超过 AudioRecord 构造函数中设置的“bufferSizeInBytes”时会发生什么?

    public AudioRecord int audioSource int sampleRateInHz int channelConfig int audioFormat int bufferSizeInBytes 这是公共构造函数Au
  • Android:需要记录麦克风输入

    有没有办法在实时播放 预览过程中记录 Android 中的麦克风输入 我尝试使用AudioRecord and AudioTrack这样做 但问题是我的设备无法播放录制的音频文件 实际上 任何Android播放器应用程序都无法播放录制的音频

随机推荐

  • ArrayList源码解析

    构造函数 Constructs an empty list with an initial capacity of ten 使用10个初始容量构造一个空的集合 public ArrayList super 用一个空的数组进行初始化 this
  • 2023年有效的rtsp,rtmp,hls流媒体测试地址整理汇总

    rtsp rtsp wowzaec2demo streamlock net vod mp4 BigBuckBunny 115k mov 已停用 rtsp wowzaec2demo streamlock net vod mp4 BigBuck
  • http请求

    HTTP请求报文 一个HTTP请求报文由请求行 xff08 request line xff09 请求头部 xff08 header xff09 空行和请求数据4个部分组成 1 请求行 请求行分为三个部分 xff1a 请求方法 请求地址和协
  • http响应报文

    HTTP响应报文主要由状态行 响应头部 空行以及响应数据组成 1 状态行 由3部分组成 xff0c 分别为 xff1a 协议版本 xff0c 状态码 xff0c 状态码描述 其中协议版本与请求报文一致 xff0c 状态码描述是对状态码的简单
  • centos7+jdk8+安装Elasticsearch6.0

    一 xff1a 为Elasticsearch准备用户 1 添加用户 Elasticsearch6 0需要使用非root用户启动 root 64 66 adduser ela root 64 66 passwd ela 2 授权用户 查看文件
  • Retrofit2 源码解析

    0 基本使用 1 Retrofit 将我们的 HTTP API 转换成一个 接口形式 所以我们第一步定义一个 interface public interface GitHubService 64 GET 34 user user repo
  • Android Studio插件的源文件位置——mac端

    有些时候安装插件后 xff0c 整个android studio都卡住了 xff0c 无法通过Android Studio gt preferences gt plugins来卸载 xff0c 这时候就需要找到安装位置 xff0c 进行删除
  • H.264编码基础知识详解

    一 编码基础概念 1 为什么要进行视频编码 xff1f 视频是由一帧帧图像组成 xff0c 就如常见的gif图片 xff0c 如果打开一张gif图片 xff0c 可以发现里面是由很多张图片组成 一般视频为了不让观众感觉到卡顿 xff0c 一
  • Android事件分发

    基本知识 什么是触摸事件 触摸事件 xff0c 是Android用来描述你的手对屏幕做的事情的最小单元 关键词有两个 xff1a 手势 xff08 你的手对屏幕做的事情 xff09 最小单元 所谓手势 xff0c 就是比如按下 移动 抬起
  • HashMap这一篇就够了

    介绍下 HashMap 的底层数据结构 现在用的都是 JDK 1 8 xff0c 底层是由 数组 43 链表 43 红黑树 组成 xff0c 如下图 xff0c 而在 JDK 1 8 之前是由 数组 43 链表 组成 为什么要改成 数组 4
  • Activity的结构分析

    1 结构介绍 大伙儿应该都知道 xff0c Activity的结构分为三层 xff0c 分别是 xff1a Activity Window和View xff0c 不同层承担着不同的责任 上面的图简单的描述了Activity整个结构的构建流程
  • LinkedBlockingQueue

    一 类签名 从类名可知 xff0c LinkedBlockingQueue是基于链表实现的阻塞队列 public class LinkedBlockingQueue lt E gt extends AbstractQueue lt E gt
  • UDP Socket

    UDP的Java支持 UDP协议提供的服务不同于TCP协议的端到端服务 xff0c 它是面向非连接的 xff0c 属不可靠协议 xff0c UDP套接字在使用前不需要进行连接 实际上 xff0c UDP协议只实现了两个功能 xff1a 1
  • volatile

    把代码块声明为 synchronized xff0c 有两个重要后果 xff0c 通常是指该代码具有 原子性 xff08 atomicity xff09 和 可见性 xff08 visibility xff09 原子性意味着个时刻 xff0
  • Android 相机预览方向和拍照方向

    我们知道手机 Camera 的图像数据都是来自于摄像头硬件的图像传感器 xff08 Image Sensor xff09 xff0c 这个 Sensor 被固定到手机之后是有一个默认的取景方向的 xff0c 这个方向如下图所示 xff0c
  • Python无参装饰器

    一 什么是装饰器 定义一个函数 xff0c 该函数可为其他函数添加额外的功能 二 何时用装饰器 需要在不修改被装饰对象源代码及其调用方式时 xff0c 为被装饰对象添加额外的功能 三 如何写一个装饰器 现在我们有如下一个函数help xff
  • typedef的用法

    typedef中声明的类型在变量名的位置出现 什么意思呢 xff0c 我们回头来看 我们是怎么声明int类型变量的 xff1f int Typename 像上面这样 xff0c 对不对 xff1f 那么用typedef之后呢 xff1f 把
  • Activity启动流程(一)

    Launcher进程请求AMSAMS发送创建应用进程请求Zygote进程接受请求并孵化应用进程应用进程启动ActivityThread 一 Launcher进程请求AMS 上面我们提到根Activity的启动流程其实就是桌面上点击一个应用图
  • Activity启动流程(二)

    应用进程绑定到AMSAMS发送启动Activity的请求ActivityThread的Handler处理启动Activity的请求 一 应用进程绑定到AMS 1 时序图 2 详细过程 在前面一篇我们知道当Zygote进程孵化出应用进程后会执
  • AudioRecord

    数字音频 数字音频通常分为三步 xff1a 采样 量化 编码 采样 xff1a 就是将获取的信号给数字化 xff0c 其中有个概念就是采样频率 xff0c 而人耳能听到的频率范围只有20Hz 20kHz xff0c 所以一般设置的都是44