61 lines
1.4 KiB
Java
61 lines
1.4 KiB
Java
package envoy.client.data.audio;
|
|
|
|
import javax.sound.sampled.*;
|
|
|
|
import envoy.exception.EnvoyException;
|
|
|
|
/**
|
|
* Plays back audio from a byte array.
|
|
*
|
|
* @author Kai S. K. Engelbart
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final class AudioPlayer {
|
|
|
|
private final AudioFormat format;
|
|
private final DataLine.Info info;
|
|
|
|
private Clip clip;
|
|
|
|
/**
|
|
* Initializes the player with the default audio format.
|
|
*
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public AudioPlayer() { this(AudioRecorder.DEFAULT_AUDIO_FORMAT); }
|
|
|
|
/**
|
|
* Initializes the player with a given audio format.
|
|
*
|
|
* @param format the audio format to use
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public AudioPlayer(AudioFormat format) {
|
|
this.format = format;
|
|
info = new DataLine.Info(Clip.class, format);
|
|
}
|
|
|
|
/**
|
|
* @return {@code true} if audio play back is supported
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public boolean isSupported() { return AudioSystem.isLineSupported(info); }
|
|
|
|
/**
|
|
* Plays back an audio clip.
|
|
*
|
|
* @param data the data of the clip
|
|
* @throws EnvoyException if the play back failed
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public void play(byte[] data) throws EnvoyException {
|
|
try {
|
|
clip = (Clip) AudioSystem.getLine(info);
|
|
clip.open(format, data, 0, data.length);
|
|
clip.start();
|
|
} catch (final LineUnavailableException e) {
|
|
throw new EnvoyException("Cannot play back audio", e);
|
|
}
|
|
}
|
|
}
|