Re: Java Sound API question
Hi Olvier,
Usually you'll be streaming audio data from some remote server. Your
client application would need to send a signal to the server requesting that
it wishes to skip ahead.
In my case the audio file is located in the same directory as the
applet. So i need not get it from a remote server. The reason why we
are streaming is, the audio file is large i.e more than 50 MB. So in my
audio player iam providing a Start, Stop, Pause, Slider, Fast Forward,
Rewind controls. Using the horizontal slider control, the user must be
able to jump to a location in the audio file. Since we are streaming
the file, i would like to know how to jump to a location in the audio
file while streaming/buffering? Is there any method avvailable for
jumping to a location similar to Clip interface's
setMicroSecondPosition()?
I found the following code in javaalmaanac and i tested it, it works
fine for streaming... But how to jump to a location while streaming?
===========================Code
================================================
try {
// From file
AudioInputStream stream = AudioSystem.getAudioInputStream(new
File("audiofile"));
// From URL
stream = AudioSystem.getAudioInputStream(new
URL("http://hostname/audiofile"));
// At present, ALAW and ULAW encodings must be converted
// to PCM_SIGNED before it can be played
AudioFormat format = stream.getFormat();
if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits()*2,
format.getChannels(),
format.getFrameSize()*2,
format.getFrameRate(),
true); // big endian
stream = AudioSystem.getAudioInputStream(format, stream);
}
// Create line
SourceDataLine.Info info = new DataLine.Info(
SourceDataLine.class, stream.getFormat(),
((int)stream.getFrameLength()*format.getFrameSize()));
SourceDataLine line = (SourceDataLine)
AudioSystem.getLine(info);
line.open(stream.getFormat());
line.start();
// Continuously read and play chunks of audio
int numRead = 0;
byte[] buf = new byte[line.getBufferSize()];
while ((numRead = stream.read(buf, 0, buf.length)) >= 0) {
int offset = 0;
while (offset < numRead) {
offset += line.write(buf, offset, numRead-offset);
}
}
line.drain();
line.stop();
} catch (MalformedURLException e) {
} catch (IOException e) {
} catch (LineUnavailableException e) {
} catch (UnsupportedAudioFileException e) {
}
=======================End of Code
================================================
Thank you very much for your replies.
Kindly help.
Urs,
Sundar