JAVA 组合音频播报

以下示例为标准wav格式音频,其他格式的思路一样

1、思路

  1. 了解wav音频的数据格式
  2. 将多个wav数据组合成一段数据
  3. 直接播报合成后的数据,或者生成临时文件后播报

2、实现

2.1 wav解析

wav详解

这篇文章讲的十分详细,以下摘录几个重点片段还有原文章中一个错误点

2.2 开始拼接

无论拼接什么格式的文件都需要把文件内容和文件头先分开,最后再拼接好的内容里面加上修改后的文件头

2.2.1 将wav的头和体分开

标准wav的文件头为44字节,但是需要修改的位置如下表格,[图片上传失败...(image-d07298-1553822383425)]
我们只需要随便提取一个wav文件的前44字节作为初始头,然后修改描述长度的部分即可。

偏移地址 大小 数据块类型 内容 称作
00H~03H 4 长整数 从下个地址开始到文件尾的总字节数 body_length
28H~2BH 4 长整数 size,数值为4(总字节数) data_length

2.2.2修改头信息

  • 举例计算长度

链接:https://pan.baidu.com/s/1RXRjqck_qH1945dQDyTk1w
提取码:fs2q
使用该文件测试

  //需要完整代码的私信吧
        byte[] buffer = ByteUtil.InputStream2ByteArray("E:/voice/请出示付款码.wav");
        for (int i = 0; i < buffer.length;; i++) {
            System.out.println(i + "=====\t:" + (char) buffer[i] + "\t" + buffer[i]);
        }
//查看 body_length
//body_length部分的数据为[26,58,0,0],此为小端序
//转换过程[0,0,58,26]==>[0x00 0x00 0x3A 0x1A]=>14874
//文件总长度buffer.length=14881=body_length+8

2.3.3 组合文件

  1. 截取文件体
  2. 拼接文件体
  3. 加入文件头
  4. 修改文件头中的长度数据

3、播报

这里就不详细说明了,百度播报的方式有很多

你可能感兴趣的:(JAVA 组合音频播报)