1

Clipインターフェイスを使用してJavaでサウンドを正しく再生するのに問題があります。

サウンドの再生は、次を使用して機能します。

clip = (Clip)mixer.getLine(dataLineInfo);
clip.open(audioFormat, byteData, 0, byteData.length);
clip.start();

ただし、クリップを閉じないとメモリリークが発生します。

クリップを開始する前にラインリスナーを追加してみましたが、次のコードを使用します。

public void update(LineEvent e) {
    if (e.getType() == LineEvent.Type.STOP) {
        e.getLine().close();

ただし、これによりサウンドが劣化します。

メソッドに1秒間のスリープを追加すると、私のマシンで再び機能するようになりますが、より洗練されたソリューションをお勧めします。リスナーメソッドで待機することは良い習慣ではなく、他のマシンでは時間がかかる可能性があります。

音が止まる前の任意の時間に停止イベントが送信されるのは奇妙なことです。

これを解決するためのより良い方法について誰かが何かアイデアを持っていますか?

(これに関連しこれこれは私にとっての解決策ではありません)

4

1 に答える 1

1

これはバグ4434125で説明されている症状のようです。

そのバグコメントで推奨される解決策は、clip.drain()(適切なスレッドで、ブロック呼び出しであるため)呼び出し、ドレインが完了するとクリップを閉じることです(データ行の内部バッファーが空になるまでブロックされるため(Javadocの場合ドレイン方式)。

于 2009-12-18T11:31:21.487 に答える