sound
Play sampled audio
This is a tutorial that shows how to play sampled audio in a Java Desktop applications. You can use this if you want to embed a simple media player in your application.
In order to play sampled audio one should follow these steps:
- Obtain an audio input stream from the provided file calling
AudioSystem.getAudioInputStream(new File("sampled_file.wav"))
. - Then, obtain the audio format of the sound data in this audio input stream calling
getFormat()
. - Create a new
AudioFormat
. - Construct a data line’s info object from the specified information with
SourceDataLine.Info lineInfo = new DataLine.Info()
. - Allow the line to engage in data I/O using
dataLine.start()
.
Let’s see the code:
package com.javacodegeeks.snippets.desktop; import java.io.File; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; public class PlaySampledAudio { public static void main(String[] args) throws Exception { // obtain an audio input stream from the provided file AudioInputStream stream = AudioSystem.getAudioInputStream(new File("sampled_file.wav")); // obtain the audio format of the sound data in this audio input stream 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 ); stream = AudioSystem.getAudioInputStream(format, stream); } // construct a data line's info object from the specified information, // which includes a single audio format and a desired buffer size SourceDataLine.Info lineInfo = new DataLine.Info( SourceDataLine.class, stream.getFormat(), ((int)stream.getFrameLength()*format.getFrameSize()) ); // obtain a line that matches the description in the specified Line.Info SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine(lineInfo); // open the line with the specified format, causing the line to acquire any // required system resources and become operational dataLine.open(stream.getFormat()); // allow the line to engage in data I/O. dataLine.start(); int bytesRead = 0; byte[] buffer = new byte[dataLine.getBufferSize()]; // read from the input file and play while ((bytesRead = stream.read(buffer, 0, buffer.length)) >= 0) { int offset = 0; while (offset < bytesRead) { offset += dataLine.write(buffer, offset, bytesRead-offset); } } // drain queued data from the line by continuing data I/O until the // data line's internal buffer has been emptied dataLine.drain(); // stop the line, a stopped line should cease I/O activity dataLine.stop(); // closes the line, indicating that any system resources // in use by the line can be released. dataLine.close(); } }
This was an example on how to play sampled audio in Java.