最近、Javaオーディオクリップの音量を制御することについて質問しましたが、JMFを試すように提案されました。古いJVM(1.4)を使用していて、WAVファイルの再生にのみ関心があるため、JMFは完璧なソリューションであり、アプリケーションでオーディオクリップのロード、再生、および音量を制御するためのコードを大幅に簡素化しました。
しかし、オンデマンドでクリップを停止するのに問題があります。呼び出すのと同じくらい簡単に見えますplayer.stop()
がstop()
、プレーヤーが再生を終了するまでブロックするようです。簡単なコード例を次に示します。
Player p = Manager.createRealizedPlayer( f.toURI().toURL() );
p.start();
System.out.println( "Player playing" );
Thread.sleep( 1000 );
System.out.println( " Clip is at time: " + p.getMediaTime().getSeconds() );
p.stop();
System.out.println( " Clip is at time: " + p.getMediaTime().getSeconds() );
これにより、次のような出力が生成されます。
Player playing
Clip is at time: 0.8591836730000001
Clip is at time: 3.227619047
2回目は、1回目と同じか、それより少し遅れて読むと予想していたところ。(または、0か何かにリセットされている可能性があります。)私も試しp.setStopTime( p.getMediaTime() )
ました。これにより、クリップは時間どおりに停止しますが、停止する前に一瞬の歪みが再生されます。これは望ましくありません。
グーグルで回ると、他の人はこの問題を抱えていないように思います。そして、選択肢を見つけるのはちょっと難しいです。これはバッファリングの問題でしょうか、それとも他に何かが足りないのでしょうか?あなたが提供できるどんな洞察も大いに感謝されます。
詳細: JVM 1.4.2とJMF2.1.1を使用しています(変更できません)。私のすべてのWAVファイルの長さはわずか1〜10秒です。