Javaでゲーム - サウンドメモ

作成 2004/9/30

Javaサウンド

Javaでサウンドを扱うAPIはJavaサウンドAPIです。JavaサウンドAPIはjavax.soundからはじまるパッケージで、JDK(バージョン?)にデフォルトで組み込まれており、他のJARなどを組み込むことなく利用することができます。

サンプリングとMIDI

JavaサウンドAPIには扱うデータにより、大きく2つのAPIに分かれます。一つはサンプリングデータを扱うAPIで、javax.sound.sampledパッケージのクラス群です。もう1つはMIDIを扱うAPIで、javax.sound.midiパッケージのクラス群です。

サンプリング

ハロー再生

とりあえず、wavファイルを読み込んで再生する簡単なサンプルがコレ。

ClipSample1.java

AudioSystem

サンプリング系のクラスの窓口となるクラスです。ファイルを読み込んだり、その他もろもろに利用します。

サウンドフォーマット

サンプリングデータでは、実装(SPI)によって、いくつかのフォーマットの音声ファイルを読み込み、再生することができます。Sunの実装では、AU、AIFF、WAVE形式がデフォルトで利用できます。利用できるフォーマットを調べるには次のようにします。

AudioFileFormat.Type[] types =
    AudioSystem.getAudioFileTypes();
for (int i = 0; i < types.length; i++) {
    AudioFileFormat.Type type = types[i];
    System.out.println(type);
}

DataLine

音声入出力を行うインターフェイスはDataLineです。DataLineには、次の3つの種類(サブインターフェイス)があります。
DataLine 説明
SourceDataLine 出力用データライン
TargetDataLine 入力用データライン(録音するときとか)
Clip もう1つの出力用データライン

これらのデータラインは、クラス名を指定してDataLine.Infoを取得し、AudioSystemから取得します(一般にAudioSystemとDataLineの間にミキサーが入りますが、簡単な場面では直接DataLineを取得できます)。

DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);

SourceDataLineとClipは用途が似ていますが若干違います。Clipはデータをメモリ上に読み込んでおいてから再生します。SourceDataLineはバッファを読み込みながら再生します。Clipは短い音声に適しており、利用もやや簡単です。SourceDataLineでは、長い音声や、音声にリアルタイムで変換をかける場合に利用します。

SourceDataLineの例

前の例は、Clipを利用していました。SourceDataLineを使うと次のようになります。

SoundSample1.java

バイトデータの書き込み操作が必要になっているのがわかります。なおバッファサイズは、短い方が遅れなく音声が再生できますが、CPUリソースを消費するのと、書き込みが間に合わない場合、音が飛んだり雑音になったりします。アプリケーションによって適当なサイズを設定します。

TargetDataLineで録音する

TODO

ミキサー

TODO

コントロールと音声変換

TODO

簡単オーディオプレイヤーを作ろう

TODO

MIDI

Javaで扱えるもう1つのサウンド形式がMIDI(Musical Instruments Digital Interface)です。サンプリングデータが実際の音の波形を再生するのに対し、MIDIは、既に用意されている楽器の音色に対してデータを送ることで再生を行います。サンプリングデータのように何でもありの音声は再生できませんが、データサイズがかなり小さくなります。

MIDIの基本

TODO

簡単なサンプル

MIDIを利用した簡単なサンプルがコレ。

MidiSample1.java

MidiSystem

サンプリング系のクラスの窓口は、AudioSystemでしたが、MIDIの場合はMidiSystemです。ファイルを読み込んだり、その他もろもろに利用します。

MIDI APIの基本

TODO

サウンドの合成

TODO

簡単シンセサイザーを作ろう

TODO

サウンドマネージャー

TODO ゲームで利用するサウンドマネージャクラスを作る。

参考

Java Sound プログラマーズガイド
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/sound/programmer_guide/contents.html

Developing Games in Java
http://www.brackeen.com/javagamebook/

JavaでHello World サウンド編
http://www.hellohiro.com/sound.htm


BACK | TOP