生成pcm文件并播放查看波形

音频流开始时要初始化PcmFile,我目前采用的是覆盖模式,只生成一个car_audio.pcm文件,新的音频会覆盖旧的。

java 复制代码
// ===================== 全局变量 =====================
private FileOutputStream mPcmFos = null;
private File mPcmFile;


private void initPcmFileToMusic() {
    try {
        // 车机可写路径
        File musicDir = new File("/data/tmp/local/Res");
        if (!musicDir.exists()) {
            musicDir.mkdirs();
         }

         mPcmFile = new File(musicDir, "car_audio.pcm");

         // =====================
         // 关键:第二个参数 false = 覆盖旧文件!
         // true = 追加
         // false = 覆盖
         // =====================
         mPcmFos = new FileOutputStream(mPcmFile, false);

         Log.d("PCM", "开始录制(覆盖模式):" + mPcmFile.getAbsolutePath());

     } catch (IOException e) {
         e.printStackTrace();
         mPcmFos = null;
     }
}

音频数据回调时写入文件 ByteBuffer byteBufferData

java 复制代码
// 1. 创建一个和缓冲区剩余数据长度一样的字节数组
byte[] audioData = new byte[byteBufferData.remaining()];
// 2. 标记当前 position 位置
byteBufferData.mark();
// 3. 把缓冲区数据读到数组里 → 会导致 position 移动
byteBufferData.get(audioData);
// 4. 恢复 position 到刚才标记的位置 → 还原现场
byteBufferData.reset();

//写入文件(真实音频数据)
if (mPcmFos != null) {
    try {
    mPcmFos.write(audioData);
        Log.d("PCM", "成功写入:" + audioData.length + " 字节");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

音频流结束时关闭文件

java 复制代码
// ===================== 关闭文件 =====================
private void closePcmFile() {
    try {
        if (mPcmFos != null) {
            mPcmFos.close();
            mPcmFos = null; // 置空,保证下次重新创建
            Log.d("PCM", "录制完成:" + mPcmFile.getAbsolutePath());
         }
     } catch (IOException e) {
         e.printStackTrace();
     }
}

可以用此程序播放并查看波形

文件->导入->原始数据

相关推荐
愿有所息6 分钟前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼25 分钟前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff2 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff2 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
SL_staff3 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品
nice_lcj5204 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
桦说编程4 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码
xys_6785 小时前
JavaEE通关手册:初识Java
java·开发语言
文丑颜不良啊5 小时前
LeetCode2461~2480题目解析
java·leetcode
文丑颜不良啊6 小时前
LeetCode2441~2460题目解析
java·leetcode