Я бы хотел преобразовать 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();
}
Но либо он не работает в первомили второе преобразование.Спасибо за вашу помощь!