サイトのトップへ戻る

libGDX ドキュメント 日本語訳

サイト内検索

PCM音源を再生する

Audio モジュールを使うと、オーディオハードウェアに直接アクセスしてPCM samplesを書き込むことができます。

ハードウェアオーディオは AudioDevice (ソース) インタフェースを介して抽象化されます。

AudioDeviceインスタンスを新規に作成するには以下のようにします:

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

上記では、サンプリング周波数44.1khzのモノラル出力のAudioDeviceを新規作成しています。 作成できなかった場合は GdxRuntimeException の例外が投げられます。

16ビット符号あり PCMデータか 32ビット float型 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);

If stereo is used, left and right channel samples are interleaved as usual (first float/short -> left, second float/short -> right).

以下のようにして、ミリ単位での待ち時間を取得します:

int latencyInSamples = device.getLatency();

上記はサンプル中の音源バッファのサイズを戻り値として返すので、待ち時間が大体どれくらいになるのかの目安になります。 戻り値が大きいほど、書き込まれた後にaudio が受信者へ届くまでにかかる時間は長くなります。

ほとんど全てのAndroid携帯では待ち時間がとても長くなるので注意して下さい。 リアルタイムオーディオアプリケーションでは、待ち時間を快適といわれる10ミリ秒~30ミリ秒の範囲内に収めるのは難しいでしょう。 大抵の場合はがんばっても100ミリ秒程度で、多くの携帯では最大400ミリ秒の待ち時間になります。 残念ですが、これはドライバー/OS 関連の問題であり、我々の力ではどうすることもできません。

AudioDevice はネイティブリソースで、使用しなくなった場合は破棄する必要があります:

device.dispose();

JavaScript/WebGL 環境では、直接PCMへの出力はサポートされていません。