印刷ビューの終了

Java SE 7 デスクトップテクノロジのトラブルシューティングガイド

印刷ビュー

ドキュメント情報

はじめに

1. はじめに

2. AWT

3. Java 2D

4. Swing

5. 国際化

6. Java Sound

6.1 システムサウンド構成

6.2 オーディオファイル形式

6.3 オーディオ形式

6.4 オーバーランとアンダーランの条件

7. アプレットと Java Web Start アプリケーション

8. バグレポートの送信

A. Java 2D のプロパティー

B. 致命的エラーログ

第 6 章

Java Sound

この章では、Java Sound テクノロジで発生する可能性のあるいくつかの問題を説明し、その原因と回避方法を提示します。

6.1 システムサウンド構成

オーディオシステム (Windows ではサウンドカードドライバ/DirectSound、Linux では ALSA、Solaris OS ではオーディオミキサー) が正しく構成されていることを確認します。さらに、スピーカーが接続されており、サウンドカードのボリュームとミュートの状態が適切な値に調整されていることを確認します。サウンドの構成をテストするには、任意のネイティブサウンドアプリケーションを実行し、そこで何らかのサウンドを再生します。

Solaris OS および Linux ではサウンドを再生できない可能性がありますが、それは、アプリケーション (または esdartsd などのサウンドデーモン) がオーディオデバイスを排他的に開くために、デバイスへの Java Sound のアクセスが拒否されるからです。

6.2 オーディオファイル形式

Java Sound は .au.aif.wav など、一連のオーディオファイル形式をサポートします。ほとんどのファイル形式は単なるコンテナなので、さまざまな圧縮オーディオ形式のオーディオデータを格納できます。Java Sound のファイルリーダーはいくつかの形式 (非圧縮 PCM、a-law、mu-law) をサポートしますが、ADPCM や mp3 などはサポートしません。

また、Java Sound はサービスプロバイダインタフェース (SPI) 経由でファイルリーダー/ライター用のプラグインもサポートしています。Sun、サードパーティー、またはユーザー独自のプラグインを使ってさまざまなオーディオファイルを読み取れます。いずれにしても、必要なプラグインをアプリケーションと一緒に配布したり、クライアントの Java 環境にプラグインがインストールされることを要求したりするなどして、プラグインの存在を管理する必要があります。

6.3 オーディオ形式

Java Sound はさまざまなオーディオ形式をサポートしていますが、それらを使用できるかどうかはオペレーティングシステムによります。あるオーディオ形式を録音または再生に使用するには、その形式がシステム (サウンドカードドライバ) によってサポートされている必要があります。サポートされている形式を可能なかぎり使用してください。PCM、8 または 16 ビット、8000、11025、22050、44100 Hz。これらの形式は、現在のほとんどのサウンドカードでサポートされています。ほとんどのサウンドカードがサポートしているのは PCM 形式だけであり、ドライバが mu-law をサポートしていても、ソフトウェアに若干の変更を施す必要があります。mu-law データの再生や録音を行う必要がある場合の推奨方法は、形式コンバータ経由で PCM 形式に変換することです。

形式変換の詳細については、AudioSystem.getAudioInputStream のドキュメントを参照してください。

6.4 オーバーランとアンダーランの条件

録音データは DataLine バッファー内に格納されます。ラインからの読み取りを長時間行わなかった場合、「オーバーラン」条件が成立し、古いデータが新しいデータで置き換えられます。このため、録音されたオーディオデータにアーティファクトが発生します。

再生時も似た状況が発生します。バッファー内のすべてのデータが再生済みとなり、新しいデータがラインに一切書き込まれなかった場合には「アンダーラン」条件が成立し、オーディオデータの新しい部分がラインに書き込まれるまで無音が再生されます。

推奨の録音方法は、ほかのタスク (UI 処理など) の潜在的な影響を受けないように、独立したスレッドでデータを読み取ることです。再生に SourceDataLine を使用する場合は、ラインにデータを書き込むためのスレッドを個別に用意するのも、推奨される方法です。再生に Clip を使用する場合、Clip の実装自体によってそのようなスレッドが作成されます。