1

一度に複数のサウンドを再生し、各サウンドのボリュームとパンを制御する方法を希望する Java プロジェクトを作成しています。私はグーグルで調べて、3つの異なる方法について読みました。問題は、チュートリアルや使用方法の例が見つからないようです。彼らです:

 import java.applet.AudioClip;
 import javax.sound.sampled;
 import sun.audio.SomethingOrOther; // Sorry, don't recall off-hand.  It was an "un-documented" site

読み進めていくと、AudioClip は特定の種類のアプリケーション (「アプレット」?) 専用であり、3 番目のアプリケーションは 100 のサイトのうちの 1 つにしか記載されていないことがわかりました。2 つ目はこのサイトで取り上げられたものですが、まったく別のトピック (「線」に関するもの) を扱っていました。とにかく、私は Java の構文に十分精通しており、アイデアを得ることができましたが、単純な方法で提示されたものを見つけることができませんでした。誰かがこれについて正しい方向に私を向けることができれば、それは大歓迎です.

4

2 に答える 2

0

ステレオ ミキシングの唯一の現実的なオプションは、フレーム (つまり、サンプルごと) レベルでサウンド データにアクセスすることです。パンやボリュームなどの組み込みコントロールはちょっと疑わしく、複数の SourceDataLines をすべて同時に実行すると、一部の OS (一部の Linux) では機能しません。

そのためには、独自に作成するか、ライブラリを使用するかの 2 つのオプションがあります。

Java チュートリアルの「Trail:Sound」では、「コントロール」のチュートリアルの最後に、直接操作オプションについて軽く触れています。彼らが提供する説明は、個々のサウンド フレームにアクセスする方法を理解するのに役立ちます。初めて使用する場合、このようなことを学ぶのは大変な作業です (AudioClips を使用している場合は、そのように聞こえます)。

TinySoundなどのライブラリを使用するのが最善の選択肢だと思います。詳細については、Java-Gaming.orgを参照してください。調査すべきもう 1 つのライブラリはJAudioLibsです。

私はゲーム コーディング用に独自のステレオ ミキサーを作成しており、ボリュームとパンを制御する大まかな機能を実装しています。そうすることで、Java は、出力サウンドを連続的に維持しようとすること以外に、リアルタイムの保証を何も与えていないことを発見しました。ガベージ コレクション、スレッド スライス、バイトコード対メモリからの再生など、これらすべてはリアルタイムの一貫性に反します。詳細については、この記事を参照してください: REAL-TIME, LOW LATENCY AUDIO PROCESSING IN JAVA .

プラス面としては、Java のコア実装 (たとえば、AudioInputStream や SourceDataLine など) は非常に強力で、大量のリアルタイム処理を行うことができます。ただし、慎重なコーディングが必要です。

于 2013-06-28T19:44:38.990 に答える