Чтение WAV-файла в байтовый массив в Java - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь прочитать WAV-файл в массив байтов для отправки через сокет-соединение и воспроизведения на другой стороне. У меня возникла проблема, как только данные заголовка файла будут прочитаны, остальная часть файла просто заполняет байтовый массив 0. Вот пример кода. Я попробовал несколько других подходов, но все дают тот же результат.

File audioIn = new File("assets/file.wav");
byte [] byteArray = new byte[filesize];
FileInputStream fileInStream = new FileInputStream(audioIn);
fileInStream.read(byteArray);

Вот данные отладки, взятые из отдельных байтов. Информация заголовка соответствует тому, что методы Java извлекли ранее. Из того, что я прочитал, звуковые данные должны начинаться с байта [44], однако я получаю результаты ниже. Остальная часть массива заполнена нулями.

Byte 0: 82
Byte 1: 73
Byte 2: 70
Byte 3: 70
...
Byte 41: 97
Byte 42: 0
Byte 43: -68
Byte 44: -1
Byte 45: 1
Byte 46: 0
Byte 47: 0
...

Следует также отметить, что данные заголовка здесь будут отброшены, так как информация WAVE будет отправлена ​​заранее. Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

FileInputStream.read не заполняет байтовый массив данными; он читает только то, что можно прочитать за один раз. Вы должны были бы вызвать это в цикле, чтобы прочитать все.

В качестве альтернативы вы можете использовать метод DataInputStream.readFully. Если вы используете Java 7, вы можете использовать Files.readAllBytes.

1 голос
/ 20 марта 2012

Вы также можете проверить библиотеку Apache / Commons IO , там есть несколько полезных вещей для решения общих задач ввода-вывода, таких как чтение всего файла в байтовый массив или закрытие ввода / выходной шаблонный материал.

...