Вторник, 2024-03-19, 12:24 PM

Поиск
Меню
Категории раздела
Поддержи проект!
Рекомендуем


Воспроизведение PCM аудио

Аудио модуль может предоставить прямой доступ к аудио аппаратуре для записи PCM семплов.

Звуковое оборудование абстрагировано через AudioDevice (исходный код) интерфейс.

Чтобы создать новый экземпляр AudioDevice можно сделать следующее:

AudioDevice device = Gdx.audio.newAudioDevice(44100, true);

Этот код создает новый экземпляр AudioDevice, который имеет частоту сэмплов 44.1 кГц и моно выход. Если устройство не может быть создано, то будет брошено GdxRuntimeException исключение.

Мы можем писать на устройство либо 16-битные PCM или 32-битные PCM данных:

float[] floatPCM = ... полученные от синуса к примеру ...
device.writeSamples(floatPCM, 0, floatPCM.length);

short[] shortPCM = ... полученные от декодера ...
device.writeSamples(shortPCM, 0, shortPCM.length);

Если используется стерео, то сэмплы левого и правого канала чередуются как обычно (первый float/short -> левый канал, второй float/short -> правый канал).

Латентность в миллисекундах может быть получена следующим образом:

int latencyInSamples = device.getLatency();

Это код вернет размер аудио буфера в сэмплах и таким образом вы получите индикатор латентности. Чем больше возвращаемого значения, тем больше времени требуется аудио, чтобы прийти к получателю после записи.

Обратите внимание, что латентность почти на всех Android телефонах высокая. В режиме реального времени аудио приложениям очень трудно попасть в 10-30 мс рабочий диапазон. Обычно вы можете достичь латентности в 100 мс, многие телефоны будут иметь латентность до 400 мс. К сожалению, это проблема связана с драйверами и операционной систем и не может быть как-то обойдена.

AudioDevice является нативным ресурсом и когда больше не используется должен быть удален:

device.dispose();

Прямой PCM выход не поддерживается в JavaScript/WebGL back-end.