Як записати звук на Java в byte масив

Як записати звук на Java в byte масив

Є багато завдань, у яких може знадобитися передати звук у вигляді масиву байтів через мережу. Java сильно відстала у цьому питанні і давно не розвивала свій API для роботи зі звуком. Це викликає труднощі при вирішенні найпростіших на перший погляд питань.

звук

На сайті вже є приклад про запис звуку за допомогою Java. Приклад простий і пише звук лише файл.

Для спрощення завдання можна просто прочитати потім файл у byte масив, але метод «AudioSystem.write» може викликатися і зі stream як останній аргумент. Це відразу вирішило б проблему, але не так все просто. При спробі викликати метод write з будь-яким stream відбувається помилка: stream length not specified.

Це пов'язано з тим, що запис йде у форматі WAVE, який вимагає в заголовку файлу розмір записаних даних. Цей розмір неможливо дізнатися до закінчення запису, що викликає помилку.

Проблему можна вирішити, якщо самостійно реалізувати AudioSystem.write для формату WAVE.

Почати потрібно з класу, який відповідатиме за формування коректного заголовка формату WAVE:

Цей клас працює тільки з двоканальним 16-бітним звуком. Він надає нам метод write та getByteBuffer і вирішує проблему з отриманням byte масиву із записаним звуком без використання проміжного файлу.

Поділитись "Як записати звук на Java в byte масив"