преобразовать из плавающего буфера в байт [] - PullRequest
2 голосов
/ 04 сентября 2011

Я пытаюсь найти способ использовать jack-audio в java.Мне удалось создать упаковщик на основе jnajack для передачи звука из порта разъемов в приложение java (оригинальный jnajack не работает с разъемом 1.9.8), но я не могу найти способ манипулировать данными.Я получаю List<FloatBuffer>, и для дальнейшей манипуляции с данными мне нужно преобразовать его в byte[].

Проще говоря ... во-первых, я хочу сохранить данные в файл, ноjava sound api, насколько я понимаю, может сохранять данные только из TargetDataLine и / или byte[].Как я могу конвертировать FloatBuffer в byte[]?Единственный способ, который я могу найти - это floatbuffer.get(float[]) и каким-то образом (не знаю, как) преобразовать float[] в byte[].

Ответы [ 2 ]

5 голосов
/ 04 сентября 2011

Как я могу преобразовать FloatBuffer в byte[]?

FloatBuffer floatbuffer;

ByteBuffer byteBuffer = ByteBuffer.allocate(floatbuffer.capacity() * 4);
byteBuffer.asFloatBuffer().put(floatbuffer);
byte[] bytearray = byteBuffer.array();

Возможно, вам придется изменить порядок байтов .

1 голос
/ 04 сентября 2011

Таким образом, jnajack использует другое представление аудиоданных, чем стандартные функции java sound api.

Я не вижу его в спецификациях jnajack, но я представляю, что оно представляет звук в виде плавающих между -1 и1.

Я не слишком знаком с Java Sound API, но могу предположить, что он использует байты в диапазоне от -128 до 127.

Другими словами, вам придется конвертироватьмежду двумя умножением на 128.

Я бы сказал, что аккуратный способ сделать это будет byte converted = Float.valueOf(original * 128).byteValue().При необходимости это возможно сделать только с примитивами, что должно быть быстрее.

...