[Audio processing] wav音频文件读取int和double数组的关系
Posted 小尾巴君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Audio processing] wav音频文件读取int和double数组的关系相关的知识,希望对你有一定的参考价值。
直接读取wav文件是int数组,但是有一些实现返回的是double数组,还有些输入是double数组;那我们要互相调用的时候还是要看看两者到底有什么关系,其实很简单。
以单身道,16bit为例
/** * For Mono, 16bit, only! * @author karl * */ public class BasicIntDoubleConvetor { private static final float floatScale = 32768; public double[] arrayIntToDouble (int[] data) { int numFrames = data.length; double[] postdata = new double[numFrames]; for (int f=0 ; f<numFrames ; f++) { postdata[f] = (double) data[f] / floatScale; } return postdata; } public int[] arrayDoubleToInt (int[] data) { int numFrames = data.length; int[] postdata = new int[numFrames]; for (int f=0 ; f<numFrames ; f++) { postdata[f] = (int) (data[f] * floatScale); } return postdata; } }
对于更广泛的情况来说,floatScale并不是2^16 = 32768
// Calculate the scaling factor for converting to a normalised double if (wavFile.validBits > 8) { // If more than 8 validBits, data is signed // Conversion required multiplying by magnitude of max positive value wavFile.floatOffset = 0; wavFile.floatScale = Long.MAX_VALUE >> (64 - wavFile.validBits); } else { // Else if 8 or less validBits, data is unsigned // Conversion required dividing by max positive value wavFile.floatOffset = 1; wavFile.floatScale = 0.5 * ((1 << wavFile.validBits) - 1); }
以上是关于[Audio processing] wav音频文件读取int和double数组的关系的主要内容,如果未能解决你的问题,请参考以下文章
JavaCV音视频开发宝典:基于JavaCV实现wav音频直播服务,wav在线FM电台直播服务,无需流媒体服务,浏览器原生audio标签直接播放wav直播音频
JavaCV音视频开发宝典:基于JavaCV实现wav音频直播服务,wav在线FM电台直播服务,无需流媒体服务,浏览器原生audio标签直接播放wav直播音频
JavaCV音视频开发宝典:基于JavaCV实现wav音频直播服务,wav在线FM电台直播服务,无需流媒体服务,浏览器原生audio标签直接播放wav直播音频