Як записати звук на 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 масив"