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); } } }