生成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();
     }
}

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

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

相关推荐
VX_bysjlw9854 小时前
基于协同过滤的美食推荐系统的设计与实现32221-计算机毕设原创(免费领源码+带部署教程)
java·spring boot·redis·mysql·tomcat·maven·mybatis
Misnice5 小时前
Python 的数据类型
java·windows·python
yuniko-n5 小时前
【JUC】JMM(Java 内存模型)
java·开发语言
十碗饭吃不饱5 小时前
MySQL InnoDB RR 隔离下二级索引临键锁引发 INSERT 锁超时 全链路解析
java·数据库·mysql
专业程序开发源5 小时前
springboot校企合作双选会一站式预约与面试系统16010-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·面试·php·课程设计
郑州光合科技余经理6 小时前
同城商城源码:商品库和订单库怎么随包交付
android·java·开发语言·后端·uni-app·php·ai编程
\光辉岁月/6 小时前
4.String类
java·面向对象·stringbuilder·string·stringbuffer·字符串类