I recently asked a question about controlling the volume of a Java audio clip and it was suggested that I try JMF. As I'm using an old JVM (1.4) and only interested in playing WAV files, JMF was a perfect solution and has greatly simplified the code to load, play and control the volume of audio clips in my application.
But I'm having trouble stopping the clips on demand. It would seem as simple as calling player.stop()
, but stop()
seems to block until the player has finished playing. Here is a simple code example:
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() );
This produces output like:
Player playing
Clip is at time: 0.8591836730000001
Clip is at time: 3.227619047
where I would have expected the second time to read equal to or only briefly later than the first. (Or perhaps to have been reset to 0 or something.) I have also tried p.setStopTime( p.getMediaTime() )
. This stops the clip on time, but plays a split second of distortion before stopping, which is undesirable.
Googling around makes me think that others aren't having this issue, and it's been kind of hard to find options. Could this be a buffering issue or am I missing something else? Any insight you can provide is greatly appreciated.
Details: I am using (and cannot change) JVM 1.4.2 with JMF 2.1.1. All of my WAV files are only 1-10 seconds long.