加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将字节数组转换为双数组

发布时间:2020-12-15 05:00:26 所属栏目:Java 来源:网络整理
导读:我在 Java中遇到了WAV文件的一些问题. WAV格式:PCM_SIGNED 44100.0 Hz,24位,立体声,6字节/帧,小端. 我将WAV数据提取到一个没有问题的字节数组. 我正在尝试将字节数组转换为双数组,但有些双精度数字带有“NaN”值. 码: ByteBuffer byteBuffer = ByteBuffer.
我在 Java中遇到了WAV文件的一些问题.

WAV格式:PCM_SIGNED 44100.0 Hz,24位,立体声,6字节/帧,小端.

>我将WAV数据提取到一个没有问题的字节数组.
>我正在尝试将字节数组转换为双数组,但有些双精度数字带有“NaN”值.

码:

ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray);
double[] doubles = new double[byteArray.length / 8];
for (int i = 0; i < doubles.length; i++) {
    doubles[i] = byteBuffer.getDouble(i * 8);
}

16/24/32位,单声道/立体声的事实让我感到困惑.

我打算将double []传递给FFT算法并获得音频.

谢谢

解决方法

试试这个:

public static byte[] toByteArray(double[] doubleArray){
    int times = Double.SIZE / Byte.SIZE;
    byte[] bytes = new byte[doubleArray.length * times];
    for(int i=0;i<doubleArray.length;i++){
        ByteBuffer.wrap(bytes,i*times,times).putDouble(doubleArray[i]);
    }
    return bytes;
}

public static double[] toDoubleArray(byte[] byteArray){
    int times = Double.SIZE / Byte.SIZE;
    double[] doubles = new double[byteArray.length / times];
    for(int i=0;i<doubles.length;i++){
        doubles[i] = ByteBuffer.wrap(byteArray,times).getDouble();
    }
    return doubles;
}

public static byte[] toByteArray(int[] intArray){
    int times = Integer.SIZE / Byte.SIZE;
    byte[] bytes = new byte[intArray.length * times];
    for(int i=0;i<intArray.length;i++){
        ByteBuffer.wrap(bytes,times).putInt(intArray[i]);
    }
    return bytes;
}

public static int[] toIntArray(byte[] byteArray){
    int times = Integer.SIZE / Byte.SIZE;
    int[] ints = new int[byteArray.length / times];
    for(int i=0;i<ints.length;i++){
        ints[i] = ByteBuffer.wrap(byteArray,times).getInt();
    }
    return ints;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读