1. 前言

1.1 背景

系统新接入语音引擎。 语音引擎只认 pcm 格式数据。前端只认 wav 格式 。 需要后端对 pcm 和 wav 格式实现互转,特此编写工具类,并提供测试用例。 在这里插入图片描述

1.2 目标

  • 提供简练的 Java api 实现格式转化 pcmToWav() wavToPcm()
  • 复习 Java 7 的文件操作
  • 编写工具类和测试用例,刻意进行 clean code 练习

1.3 亮点

  • 测试用例使用了 Java 7 开始引入的文件操作api
  • 测试用例使用了 Java nio 完成文件下载功能

2. 用例说明

  1. 执行 AudioFormatConverterTest
  2. 观察新生成的文件

在这里插入图片描述

  1. 能支持幂等执行测试用例,可debug进行调试

3. 补充验证

  • 字节数组的拼接 项目中语音数据通过字节流传播,对 pcm 数据可以任意裁剪叠加。 pcm 数据增加一倍,音频播放的内容重复一遍。

在这里插入图片描述

  • base64 字符串的拼接 对byte[]进行base64编码。byte[]场景下,两段base64字符串拼接。 验证新字符串无法正常解码为byte[]。
Assertions.assertThatIllegalArgumentException().isThrownBy(() -> {
   // 对二进制进行 base64
   byte[] pcmBytes = Files.readAllBytes(SAMPLE_PCM_FILE);
   // 两段 base64 拼接
   String base64 = Base64.getEncoder().encodeToString(pcmBytes) + Base64.getEncoder().encodeToString(pcmBytes);
   // 解码
   Base64.getDecoder().decode(base64);
});

4. 相关链接

【Java】字节数组 pcm 与 wav 格式互转 (附原理概述)