LibGDX的音频模块可以让您直接访问音频硬件并直接将PCM样本写入音频硬件中。
在LibGDX中,AudioDevice (source) 对音频硬件进行了抽象.
使用以下代码创建一个AudioDevice 实例:
AudioDevice device = Gdx.audio.newAudioDevice(44100, true);
这创建了一个新的AudioDevice,采样频率为44.1khz,并输出单声道。 如果无法创建设备,将抛出一个GdxRuntimeException。
我们可以将16位带符号PCM或32位浮点PCM数据写入到音频设备:
float[] floatPCM = ... generated from a sine for example ...
device.writeSamples(floatPCM, 0, floatPCM.length);
short[] shortPCM = ... generated from a decoder ...
device.writeSamples(shortPCM, 0, shortPCM.length);
如果使用立体声,则左右通道样本按通常进行交错(左右左右....)。
查询延迟(单位毫秒)可以这样:
int latencyInSamples = device.getLatency();
这将返回样本中音频缓冲区的大小,从而为您提供有关延迟的良好指示。 返回值越大,写入后音频到达收件人所需的时间越长。
请注意,几乎所有Android手机的延迟都是非常高的,实时音频应用程序延迟很难在10-30ms以内,一般来说平均延迟在100ms左右,有的甚至到底400ms以上,可悲的是,这是一个驱动/操作系统相关问题,并且无法解决。
AudioDevice是一种本地资源,需要在不再使用时请释放资源.
device.dispose();
JavaScript / WebGL后端不支持直接PCM输出。