美文网首页
JAVA 组合音频播报

JAVA 组合音频播报

作者: 一Y一 | 来源:发表于2019-03-29 09:37 被阅读0次

    以下示例为标准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 组合音频播报

          本文链接:https://www.haomeiwen.com/subject/clskbqtx.html