この章では、Java Sound テクノロジで発生する可能性のあるいくつかの問題を説明し、その原因と回避方法を提示します。
オーディオシステム (Windows ではサウンドカードドライバ/DirectSound、Linux では ALSA、Solaris OS ではオーディオミキサー) が正しく構成されていることを確認します。さらに、スピーカーが接続されており、サウンドカードのボリュームとミュートの状態が適切な値に調整されていることを確認します。サウンドの構成をテストするには、任意のネイティブサウンドアプリケーションを実行し、そこで何らかのサウンドを再生します。
Solaris OS および Linux ではサウンドを再生できない可能性がありますが、それは、アプリケーション (または esd や artsd などのサウンドデーモン) がオーディオデバイスを排他的に開くために、デバイスへの Java Sound のアクセスが拒否されるからです。
Java Sound は .au、.aif、.wav など、一連のオーディオファイル形式をサポートします。ほとんどのファイル形式は単なるコンテナなので、さまざまな圧縮オーディオ形式のオーディオデータを格納できます。Java Sound のファイルリーダーはいくつかの形式 (非圧縮 PCM、a-law、mu-law) をサポートしますが、ADPCM や mp3 などはサポートしません。
また、Java Sound はサービスプロバイダインタフェース (SPI) 経由でファイルリーダー/ライター用のプラグインもサポートしています。Sun、サードパーティー、またはユーザー独自のプラグインを使ってさまざまなオーディオファイルを読み取れます。いずれにしても、必要なプラグインをアプリケーションと一緒に配布したり、クライアントの Java 環境にプラグインがインストールされることを要求したりするなどして、プラグインの存在を管理する必要があります。
Java Sound はさまざまなオーディオ形式をサポートしていますが、それらを使用できるかどうかはオペレーティングシステムによります。あるオーディオ形式を録音または再生に使用するには、その形式がシステム (サウンドカードドライバ) によってサポートされている必要があります。サポートされている形式を可能なかぎり使用してください。PCM、8 または 16 ビット、8000、11025、22050、44100 Hz。これらの形式は、現在のほとんどのサウンドカードでサポートされています。ほとんどのサウンドカードがサポートしているのは PCM 形式だけであり、ドライバが mu-law をサポートしていても、ソフトウェアに若干の変更を施す必要があります。mu-law データの再生や録音を行う必要がある場合の推奨方法は、形式コンバータ経由で PCM 形式に変換することです。
形式変換の詳細については、AudioSystem.getAudioInputStream のドキュメントを参照してください。
録音データは DataLine バッファー内に格納されます。ラインからの読み取りを長時間行わなかった場合、「オーバーラン」条件が成立し、古いデータが新しいデータで置き換えられます。このため、録音されたオーディオデータにアーティファクトが発生します。
再生時も似た状況が発生します。バッファー内のすべてのデータが再生済みとなり、新しいデータがラインに一切書き込まれなかった場合には「アンダーラン」条件が成立し、オーディオデータの新しい部分がラインに書き込まれるまで無音が再生されます。
推奨の録音方法は、ほかのタスク (UI 処理など) の潜在的な影響を受けないように、独立したスレッドでデータを読み取ることです。再生に SourceDataLine を使用する場合は、ラインにデータを書き込むためのスレッドを個別に用意するのも、推奨される方法です。再生に Clip を使用する場合、Clip の実装自体によってそのようなスレッドが作成されます。