当前位置: 首页 > news >正文

安卓录音方法

核心类名

主要方法(录音相关)

场景

android.media.

AudioRecord

mAudioRecord = new AudioRecord.Builder().setAudioFormat(format).setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION).setBufferSizeInBytes(minBufferSize * 2).build();

- startRecording()
- stop()
- read(byte[] audioData, int offsetInBytes, int sizeInBytes)
- release()

1. 实时语音处理场景(如语音识别、语音唤醒、实时降噪)
2. 需要获取原始 PCM 数据进行自定义处理(如音效算法、音频分析)
3. 构建多轨录音或复杂音频合成(需手动处理数据拼接)
4. 对录音数据有特殊格式要求(非标准编码格式)

检查录音权限占用状态,通过尝试初始化判断资源是否可用

1. 初始化前检查AudioRecord.getMinBufferSize()返回值是否有效
2. 尝试创建AudioRecord实例,若状态为STATE_INITIALIZED则表示可用
3. 失败时延迟重试或提示用户 "麦克风被占用"

android.media.

MediaRecorder

mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);

- setAudioSource(int audioSource)
- prepare()
- start()
- stop()
- release()

1. 简单录音场景(如语音备忘录、语音留言)
2. 直接直接保存为常见音频格式(MP3、AAC 等)
3. 需快速实现录音功能(无需关注编码细节)
4. 结合视频录制(作为音视频同步录制的音频源)

依赖系统自动资源管理,通过异常捕获判断冲突

1. 在prepare()start()时捕获IOException,通常表示设备被占用
2. 失败后提示用户关闭其他录音应用并重试

AAudio

AudioStreamBuilder

- setDirection(int direction)
- build()

1. 低延迟录音场景(如乐器演奏录音、实时音频效果器)
2. 专业音频应用(如音乐制作 APP、音频工作站)
3. 需要与音频输出(播放)同步的场景(如实时监听录音)
4. 对系统资源占用敏感的高性能录音需求

明确指定共享模式,通过返回码判断冲突,支持更精细的冲突处理

1. 构建流时设置setSharingMode(SHARING_MODE_SHARED)(默认独占模式易冲突)
2. 检查open()返回码,若为RESULT_ERROR_INVALID_STATERESULT_ERROR_BUSY则表示冲突
3. 可注册AudioManager监听,当其他应用释放资源后重试

AudioStream

- open()
- start()
- read(ByteBuffer buffer, int capacity)
- stop()
- close()

Oboe开发者应考虑使用开源 Oboe 库,这个库可在 GitHub 上获得。Oboe 是一个 C++ 封装容器,提供与 AAudio 非常相似的 API。该封装容器在 AAudio 可用时对其进行调用,并在 AAudio 不可用时回退到 OpenSL ES

MediaCodec

MIME_TYPE = "audio/mp4a-latm";

mEncoder = MediaCodec.createEncoderByType(MIME_TYPE); mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mEncoder.start();

- configure(MediaFormat format, Surface surface, MediaCrypto crypto, int flags)
- start()
- queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)
- stop()
- release()

1. 自定义音频编码场景(如指定特殊比特率、采样率的 AAC 编码)
2. 音视频混合编码(与视频编码器协同工作)
3. 需硬件加速编码以节省 CPU 资源的场景
4. 网络实时传输场景(编码为低带宽格式)

完全依赖系统处理冲突,应用层无控制能力

1. 与AudioRecord配合使用,先确保AudioRecord初始化成功
2. 若编码过程中突然无数据输入,检查上游录音源是否被抢占

http://www.lryc.cn/news/616051.html

相关文章:

  • Java 后端性能优化实战:从 SQL 到 JVM 调优
  • 深入解析React Diff 算法
  • Word XML 批注范围克隆处理器
  • React:useEffect 与副作用
  • MyBatis的xml中字符串类型判空与非字符串类型判空处理方式
  • 秋招春招实习百度笔试百度管培生笔试题库百度非技术岗笔试|笔试解析和攻略|题库分享
  • wordpress语言包制作工具
  • python正则表达式里面有特殊符号如何处理
  • 亚麻云之静态资源管家——S3存储服务实战
  • Day41--动态规划--121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II,123. 买卖股票的最佳时机 III
  • LeetCode 组合总数
  • AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
  • Python 2025:最新技术趋势与展望
  • Text2SQL 自助式数据报表开发(Chat BI)
  • 解决 .NET Core 6.0 + PostgreSQL 网站首次连接缓慢问题
  • 嵌入式软件分层架构的设计原理与实践验证(有限状态机理解及结构体封装理解)
  • spring-ai整合PGVector实现RAG
  • WinForm之TreeView控件
  • Baumer高防护相机如何通过YoloV8深度学习模型实现道路坑洼的检测识别(C#代码UI界面版)
  • [激光原理与应用-223]:机械 - 机加厂加工机械需要2D还是3D图?
  • jvm有哪些垃圾回收器,实际中如何选择?
  • 本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕校对增强版
  • Code Exercising Day 10 of “Code Ideas Record“:StackQueue part02
  • 低版本 IntelliJ IDEA 使用高版本 JDK 语言特性的问题
  • IDEA 如何导入系统设置
  • 基于ECharts的智慧社区数据可视化
  • IDEA 快捷编辑指南
  • IntelliJ IDEA 2025.2 重磅发布
  • OneCode 3.0 可视化功能全面分析:从开发者到用户的全场景解析
  • [激光原理与应用-214]:设计 - 皮秒紫外激光器 - 电控设计,高精度、高可靠性与智能化的全链路方案