преобразование файла WAV в двойной массив - PullRequest
0 голосов
/ 19 мая 2018

Я бы хотел преобразовать wav-файл в двойной массив, чтобы изменить его значения, это мой код, но он не работает должным образом:

    private void bytesToDouble(File file) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));

    int read;
    byte[] buff = new byte[1024];
    while ((read = in.read(buff)) > 0)
    {
        out.write(buff, 0, read);
    }
    out.flush();
    byte[] bytes = out.toByteArray();
    int times = Double.SIZE / Byte.SIZE;
    doubleArray = new double[bytes.length / times];
    for(int i=0;i<doubleArray.length;i++){
        doubleArray[i] = ByteBuffer.wrap(bytes, i*times, times).getDouble();
    }
}

Вот мой пример вывода:

bytes = {byte[148012]@4655} 
 0 = 82
 1 = 73
 2 = 70
 3 = 70
 4 = 36
 5 = 66
 6 = 2
 7 = 0
 8 = 87
 9 = 65
 10 = 86
 11 = 69
 12 = 102
 13 = 109
 14 = 116
 15 = 32
 16 = 16
 17 = 0
 18 = 0
 19 = 0
 20 = 1
 21 = 0
 22 = 2
 23 = 0
 24 = 68
 25 = -84
 26 = 0
 27 = 0
 28 = 16
 29 = -79
 30 = 2
 31 = 0
 32 = 4
 33 = 0
 34 = 16
 35 = 0
 36 = 100
 37 = 97
 38 = 116
 39 = 97
 40 = 0
 41 = 66
 42 = 2
 43 = 0
 44 = 0
 45 = 0
 46 = 0
 47 = 0
 48 = 0
 49 = 0
 50 = 0
 51 = 0
 52 = 0
 53 = 0
 54 = 0
 55 = 0
 56 = 0
 57 = 0
 58 = 0
 59 = 0
 60 = 0
 61 = 0
 62 = 0
 63 = 0
 64 = 0

Остальные байты тоже просто нули.Размер массива байтов составляет около 150 000.Входные данные были обычным звуковым WAV-файлом.

Вот как я хотел преобразовать его обратно после изменения двойного массива:

for (double aDoubleArray : doubleArray) {
        byteArray = ByteBuffer.allocate(8).putDouble(aDoubleArray).array();
    }

Но либо он не работает в первомили второе преобразование.Спасибо за вашу помощь!

...