Android16音频之开始录制AudioRecord.startRecording:用法实例(一百八十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏地址:Audio工程师进阶系列【原创干货持续更新中...... 】🚀
Android多媒体专栏地址:多媒体系统工程师系列【原创干货持续更新中...... 】🚀
推荐1:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:Android14 Binder之HIDL与AIDL通信实战课 🚀
推荐3:Android15快速自定义与集成音效实战课 🚀
推荐4:Android15音频策略实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

      • [🌻1. 前言](#🌻1. 前言)
      • [🌻2. Android16进阶之开始录制AudioRecord.startRecording介绍](#🌻2. Android16进阶之开始录制AudioRecord.startRecording介绍)
      • [🌻3. 代码实例](#🌻3. 代码实例)
        • [🌻3.1 HiRes手动启动直写](#🌻3.1 HiRes手动启动直写)
        • [🌻3.2 通话启动与状态灯同步](#🌻3.2 通话启动与状态灯同步)
        • [🌻3.3 识别启动与模型预热并行](#🌻3.3 识别启动与模型预热并行)
      • [🌻3.4 用法总结](#🌻3.4 用法总结)

Android16进阶之开始录制AudioRecord.startRecording:用法实例

🌻1. 前言

本篇目的:Android16进阶之开始录制AudioRecord.startRecording:用法实例

🌻2. Android16进阶之开始录制AudioRecord.startRecording介绍

  1. 基本概念

    startRecording 将 AudioRecord 状态切换为 RECORDSTATE_RECORDING,启动硬件采集,后续方可调用 read 获取数据。

  2. 功能

    触发 native 驱动;与缓冲区大小联动;支持快速启动;无参数;同步返回。

  3. 使用限制

    需先成功初始化;不可重复调用;调用后状态立即生效;API 3 及以上。

  4. 性能特性

    启动延迟等于缓冲区剩余帧数/采样率;无内存分配;与硬件时钟同步。

  5. 使用场景

    文件采集、实时通话、特征提取、低延迟监视、录音控制。

🌻3. 代码实例

🌻3.1 HiRes手动启动直写
java 复制代码
AudioRecord record = new AudioRecord.Builder()
        .setAudioSource(MediaRecorder.AudioSource.MIC)
        .setAudioFormat(new AudioFormat.Builder()
                .setSampleRate(96000)
                .setChannelMask(AudioFormat.CHANNEL_IN_STEREO)
                .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                .build())
        .setBufferSizeInBytes(65536)
        .build();
if (record.getState() != AudioRecord.STATE_INITIALIZED) return;
record.startRecording();
FileOutputStream fos = new FileOutputStream("/sdcard/start96k.raw");
byte[] buf = new byte[65536];
while (recording) {
    int read = record.read(buf, 0, buf.length);
    if (read > 0) fos.write(buf, 0, read);
}
fos.close();
record.stop();
record.release();

代码功能:startRecording后立即读取,确保第一帧无丢失,保留原始动态。

🌻3.2 通话启动与状态灯同步
java 复制代码
AudioRecord record = new AudioRecord.Builder()
        .setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION)
        .setAudioFormat(new AudioFormat.Builder()
                .setSampleRate(16000)
                .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
                .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                .build())
        .setBufferSizeInBytes(6400)
        .build();
if (record.getState() != AudioRecord.STATE_INITIALIZED) return;
record.startRecording();
led.on();
DatagramSocket socket = new DatagramSocket();
InetAddress addr = InetAddress.getByName("10.0.0.88");
byte[] pkt = new byte[320];
while (calling) {
    int read = record.read(pkt, 0, pkt.length);
    if (read > 0) socket.send(new DatagramPacket(pkt, read, addr, 5004));
}
socket.close();
led.off();
record.stop();
record.release();

代码功能:startRecording成功瞬间点亮指示灯,用户一眼可知采集已激活。

🌻3.3 识别启动与模型预热并行
java 复制代码
AudioRecord record = new AudioRecord.Builder()
        .setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION)
        .setAudioFormat(new AudioFormat.Builder()
                .setSampleRate(16000)
                .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
                .setEncoding(AudioFormat.ENCODING_PCM_FLOAT)
                .build())
        .setBufferSizeInBytes(1280)
        .build();
if (record.getState() != AudioRecord.STATE_INITIALIZED) return;
model.warmUp();
record.startRecording();
float[] frame = new float[320];
while (recognizing) {
    int read = record.read(frame, 0, frame.length);
    if (read > 0) {
        float[] mel = computeMel(frame);
        model.input(mel);
    }
}
record.stop();
record.release();

代码功能:startRecording后立即进入读取循环,与模型预热零间隙衔接,降低首字延迟。

🌻3.4 用法总结

代码关键字 功能描述 典型应用
startRecording 启动采集 首帧无丢保存
startRecording 启动采集 状态灯同步
startRecording 启动采集 模型预热并行
相关推荐
youandyouyou30 分钟前
跨区培训的屏幕共享怎么做才稳?同屏同步与弱网优化实践
音视频·网络通信
开开心心就好32 分钟前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
美狐美颜SDK开放平台1 小时前
直播APP集成美颜SDK,如何梳理第三方组件的数据权限?
开发语言·人工智能·深度学习·音视频·第三方美颜sdk
l14372332672 小时前
批量视频硬字幕擦除多少钱?影响报价的关键因素全解析
音视频
重生六道3 小时前
B站视频时长统计:一段JS脚本搞定分P/合集总时长(附倍速计算)
开发语言·javascript·音视频
音视频牛哥3 小时前
不换摄像机,也能接入 WebRTC?SmartMediaKit RTSP/RTMP 转 WHIP 技术实践
音视频·webrtc·smartmediakit·rtsp转whip·rtmp转whip·whip推流·rtsp转webrtc播放
lll23526917793 小时前
Android APP短视频音频提取,主流工具怎么选
ffmpeg·音视频
乐橙开放平台4 小时前
门店监控想集中看?乐橙含光支持多品牌摄像头跨店管理
网络·笔记·物联网·自动化·音视频·智能家居
音视频牛哥5 小时前
“人工智能+”走向产业深处:音视频产业的机遇、挑战与技术选择
人工智能·音视频·具身智能·whip/whep·人工智能+·smartmediakit·国务院人工智能+行动
2601_9654542314 小时前
用AI把开源项目功能清单做成MG动画介绍视频
人工智能·开源·音视频