JAVA 組合音頻播報

以下示例為標準wav格式音頻,其他格式的思路一樣

1、思路

  1. 了解wav音頻的數(shù)據(jù)格式
  2. 將多個wav數(shù)據(jù)組合成一段數(shù)據(jù)
  3. 直接播報合成后的數(shù)據(jù),或者生成臨時文件后播報

2、實現(xiàn)

2.1 wav解析

wav詳解

這篇文章講的十分詳細,以下摘錄幾個重點片段還有原文章中一個錯誤點

2.2 開始拼接

無論拼接什么格式的文件都需要把文件內(nèi)容和文件頭先分開,最后再拼接好的內(nèi)容里面加上修改后的文件頭

2.2.1 將wav的頭和體分開

標準wav的文件頭為44字節(jié),但是需要修改的位置如下表格,[圖片上傳失敗...(image-d07298-1553822383425)]
我們只需要隨便提取一個wav文件的前44字節(jié)作為初始頭,然后修改描述長度的部分即可。

偏移地址 大小 數(shù)據(jù)塊類型 內(nèi)容 稱作
00H~03H 4 長整數(shù) 從下個地址開始到文件尾的總字節(jié)數(shù) body_length
28H~2BH 4 長整數(shù) size,數(shù)值為4(總字節(jié)數(shù)) 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部分的數(shù)據(jù)為[26,58,0,0],此為小端序
//轉(zhuǎn)換過程[0,0,58,26]==>[0x00 0x00 0x3A 0x1A]=>14874
//文件總長度buffer.length=14881=body_length+8

2.3.3 組合文件

  1. 截取文件體
  2. 拼接文件體
  3. 加入文件頭
  4. 修改文件頭中的長度數(shù)據(jù)

3、播報

這里就不詳細說明了,百度播報的方式有很多

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容