[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);
        }

 

转载于:https://www.cnblogs.com/littletail/p/5281200.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值