最近有个双声道音频实时转译的需求 要求先把μ-law压缩的双声道wav文件分离声道并解压成常规pcm流调用TTS 网上的方法零零散散 这里整理记录一下解压和分离的过程

声道分离

双声道分离首先要先了解wav文件的构成 这篇文章写的很详细 参考链接: wav文件头格式详解
可以看出先要去掉44位有信息才是音频流 如下

BufferedInputStream wholefile = new BufferedInputStream(new FileInputStream(audioFile));
//去退掉头信息
wholefile.skip(44);

之后是声道分离 参考链接:
如何在Java中将Wav文件分割为多个通道?

这里每3200长度双声道流处理成两段1600长度单声道流

                int len;short s;byte[] ts = new byte[3200];while ((len = wholefile.read(ts)) > 0) {byte[] leftPart = new byte[1600];byte[] rightPart = new byte[1600];for(int i=0;i<len;i+=2){leftPart[i/2] = ts[i];rightPart[i/2] =  ts[i+1];}//TODO你要对音频流的处理}

注意:这个每组音频流的长度和位深度有关 本例为16位深度(2byte)

μ-law解压

对于音频编码的处理可以参考这篇文章: PCM A律μ律编码

本例使用查表法 直接在原本代码上进行修改

 private static short muLawDecompressTable[] = new short[]{-32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,-23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,-15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,-11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,-7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,-5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,-3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,-2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,-1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,-1372, -1308, -1244, -1180, -1116, -1052, -988, -924,-876, -844, -812, -780, -748, -716, -684, -652,-620, -588, -556, -524, -492, -460, -428, -396,-372, -356, -340, -324, -308, -292, -276, -260,-244, -228, -212, -196, -180, -164, -148, -132,-120, -112, -104, -96, -88, -80, -72, -64,-56, -48, -40, -32, -24, -16, -8, 0,32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,1372, 1308, 1244, 1180, 1116, 1052, 988, 924,876, 844, 812, 780, 748, 716, 684, 652,620, 588, 556, 524, 492, 460, 428, 396,372, 356, 340, 324, 308, 292, 276, 260,244, 228, 212, 196, 180, 164, 148, 132,120, 112, 104, 96, 88, 80, 72, 64,56, 48, 40, 32, 24, 16, 8, 0};public static void main(String args[]){BufferedInputStream wholefile = null;try {wholefile = new BufferedInputStream(new FileInputStream(audioFile));//去退掉头信息wholefile.skip(44);int len;short s;byte[] ts = new byte[3200];while ((len = wholefile.read(ts)) > 0) {byte[] leftPart = new byte[3200];byte[] rightPart = new byte[3200];for(int i=0;i<len;i+=2){s = muLawDecompressTable[ts[i] & 0xff];leftPart[i] = (byte)s;leftPart[i+1] = (byte)(s>>8);s = muLawDecompressTable[ts[i+1] & 0xff];rightPart[i] = (byte)s;rightPart[i+1] = (byte)(s>>8);}//TODO你要对音频流的处理}wholefile.close();} catch (Exception e) {System.err.println(e.getMessage());} }

注意:由于解压后音频流占位增加 由3200长度双声道解压为两个单声道3200长度的音频流

java处理μ-law压缩的双声道wav分离解压相关推荐

  1. 监听实时生成的双声道wav文件转文字

    #监听文件夹生成的双声道wav文件实时转文字 想要把软短话生成的双声道录音文件实时转文字做内容质检 思路是监听某文件夹的文件创建事件 拆分双声道wav 调用转文字接口 使用的阿里的TTS 实时语音识别 ...

  2. 【音频处理】python将两个单声道wav音频合成一个双声道wav音频_立体声感

    python将两个单声道wav音频合成一个双声道wav音频_立体声感 环境相关 编写目的 录音代码 单通道音合成双通道音频代码 在以下内容中,若有任何错误和不足,欢迎读者进行指正,不尽感激! 环境相关 ...

  3. matlab 生成sine音频文件.wav (双声道.wav)--audiowrite

    1 直接上源码 close all clear all clc%set system parameter fs = 1000; %The frequency of the local oscillat ...

  4. java 双声道音频_Android 播放音频如何实现双声道效果

    1 使用场景 Android 无法直接采集双声道,用户如果想实现播放的音频具有双声道效果,可以参考本文. 2 实现流程 双声道效果实现的主流程为: 下文将分别讲述各个步骤. 2.1 输入双声道数据 主 ...

  5. 基于C语言的 WAV 文件双声道转单声道的实现

    这里只处理PCM是16位,encode是PCM格式的波形进行解析: #include <stdio.h> #include <stdlib.h>#define u8 unsig ...

  6. 用C/CCC++实现输出双声道(立体声).wav 文件

    最近完成了双声道(立体声又称双轨)的语音文件录制,将心得在这里分享下.我录制的双声道文件格式是PCM,16K,16Bit的,blockAlign设置2.立体声的语音采用 0声道(左) 1声道(右) 0 ...

  7. 基于C语言实现把WAV双声道文件差分成两个单声道文件

    本deemo基于下面这篇文章的deemo实现 基于C语言的 WAV 文件双声道转单声道的实现_快乐的老鼠的博客-CSDN博客_wav 双声道转单声道 #include <stdio.h> ...

  8. WAV 文件双声道转单声道的实现

    一 代码 转载文章,修改了几处代码风格 #include <stdio.h> #include <stdlib.h>#define u8 unsigned char #defi ...

  9. java 视频压缩_Java 压缩视频(无需安装插件)

    亲测可用,基于ffmpeg 去进行压缩, 测试原视频大小:835.87 MB 压缩后大小:118.8 MB 压缩比率 :85.78% 好了,开始上代码 1.首先 pom文件中引入下面两个 jar 包 ...

最新文章

  1. [转] JavaScript仿淘宝智能浮动
  2. golang 接口格式
  3. key位置 win10生成的ssh_华为路由器配置SSH远程登录,就这么简单
  4. java接口的定义与实现,学习路线+知识点梳理
  5. 编译wxWidgets
  6. Powerdesigner导出ORACLE形式sql文件遇到的问题总结
  7. 为什么我的Spring @Autowired字段为空?
  8. SQL Server 和 HSQLDB 中使用 merge into 完成 saveOrUpdate
  9. 【图像处理】基于matlab GUI图像滤镜(马赛克+蓝色透镜+素描)【含Matlab源码 1145期】
  10. 考试计算机网络基础知识,事业单位考试计算机网络基础知识试题及答案
  11. 基于蒙特卡洛方法的机器人工作空间MATLAB仿真
  12. 最全的《落日故人情》经典句子大全
  13. NSSCTF web刷题
  14. 使用Python为人脸自动生成口罩
  15. linux将目录路径加入环境变量中,如何添加路径到PATH环境变量
  16. 数据可视化工具之常见的折线图与折现面积图分析
  17. 努力学习的意义到底在哪里?(转载知呼上的答案)
  18. 记一次聚拢Android线程实操
  19. 三维重建基本学习路线
  20. java代_java代码

热门文章

  1. 产品|整机功率放大器 MW1982-20W 50Ω 43dBm(20W) 20MHz to 2500MHz
  2. 倾斜框IOU计算实现(c++,python)
  3. android 副屏驱动_高通 android平台LCD驱动分析
  4. Linux文件存储(1)什么是格式化
  5. tradeblazer mysql_干货 | 用tradeblazer实现海龟交易法则(附代码)
  6. 关于鸿学金信原始股的一个坏消息与好消息
  7. Windows 2003上Oracle通过端口映射访问连接超时的解决办法
  8. zoomlt 安装/使用
  9. Flash AS游戏引擎原理
  10. 高速铁路信号系统信息安全风险分析及建议