Dirk Bruere at NeoPax wrote:
Dirk Bruere at NeoPax wrote:
I need a bit of s/w for playing various basic audio formats eg .wav
.mp3 (no GUI).
I assume I'll need JMF.
Are there any decent tutorials about?
Having said that, what I want is an audio player class without GUI
that will play common audio formats and have basic methods for stuff
like vol, start, stop etc
Is there one available? - I'm looking and have not found anything
suitable yet. I would have thought it should be easy, but it doesn't
seem to be.
Here is a simple outline class. Implementation of a level control is
a little more complicated. This will play .au, .aiff and some .wav,
depending on the actual data format.
import java.io.*;
import javax.sound.sampled.*;
public class Play {
public static void main(String[] args) {
class MyLineListener implements LineListener {
public void update(LineEvent le) {
LineEvent.Type type = le.getType();
System.out.println(type);
}
};
try {
AudioInputStream fis =
AudioSystem.getAudioInputStream(new File(args[0]));
System.out.println("File AudioFormat: " + fis.getFormat());
AudioInputStream ais = AudioSystem.getAudioInputStream(
AudioFormat.Encoding.PCM_SIGNED,fis);
AudioFormat af = ais.getFormat();
System.out.println("AudioFormat: " + af.toString());
int frameRate = (int)af.getFrameRate();
System.out.println("Frame Rate: " + frameRate);
int frameSize = af.getFrameSize();
System.out.println("Frame Size: " + frameSize);
SourceDataLine line = AudioSystem.getSourceDataLine(af);
line.addLineListener(new MyLineListener());
line.open(af);
int bufSize = line.getBufferSize();
System.out.println("Buffer Size: " + bufSize);
line.start();
byte[] data = new byte[bufSize];
int bytesRead;
while ((bytesRead = ais.read(data,0,data.length)) != -1)
line.write(data,0,bytesRead);
line.drain();
line.stop();
line.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
Thanks.