JavaでRAW,WAV,MP3ファイルを再生

## Java8で音声ファイル(RAW,WAV,MP3)を再生する方法

#### Main
```Java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javazoom.jl.decoder.JavaLayerException;

public class SoundPlayTest {

	public static void main(String[] args) throws LineUnavailableException, IOException, JavaLayerException, UnsupportedAudioFileException {

		RawPlayer rawPlayer = new RawPlayer();
		rawPlayer.play(new FileInputStream(new File("sample.wav")));

		Mp3Player mp3Player = new Mp3Player();
		mp3Player.play(new FileInputStream(new File("sample.mp3")));

		WavPlayer wavPlayer = new WavPlayer();
		wavPlayer.play(new FileInputStream(new File("sample.wav")));

	}

}

```


#### RAW
```Java
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;

public class RawPlayer {

	private byte buf[] = new byte[1024];
	private int len;

	public void play(InputStream rawfile) throws LineUnavailableException, FileNotFoundException, IOException {
		BufferedInputStream raw = new BufferedInputStream(rawfile);
		AudioFormat format = new AudioFormat(8000, 16, 1, true, false);
		// select audio format parameters
		DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
		SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
		// prepare audio output
		line.open(format, 1024);
		line.start();
		// play audio
		while ((len = raw.read(buf)) != -1)
			line.write(buf, 0, len);
		// shut down audio
		line.drain();
		line.stop();
		line.close();

	}

}
```
#### MP3
```Java
import java.io.InputStream;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.AudioDevice;
import javazoom.jl.player.FactoryRegistry;
import javazoom.jl.player.advanced.AdvancedPlayer;
import javazoom.jl.player.advanced.PlaybackEvent;
import javazoom.jl.player.advanced.PlaybackListener;
import static java.lang.System.out;

public class Mp3Player {

	public void play(InputStream mp3file) throws JavaLayerException {

		AudioDevice device = FactoryRegistry.systemRegistry().createAudioDevice();
		// create an MP3 player
		AdvancedPlayer player = new AdvancedPlayer(mp3file, device);
		player.setPlayBackListener(new PlaybackListener() {
			@Override
			public void playbackStarted(PlaybackEvent evt) {
				out.println("[Playback] started.");
			}
			@Override
			public void playbackFinished(PlaybackEvent evt) {
				out.println("[Playback] finished.");
			}
		});
		// play it!
		player.play();
	}

}
```

#### WAV
```Java
import java.io.IOException;
import java.io.InputStream;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;

public class WavPlayer {

	private byte buf[] = new byte[1024];
	private int len;

	public void play(InputStream wavfile) throws UnsupportedAudioFileException, IOException, LineUnavailableException {

		AudioInputStream wav = AudioSystem.getAudioInputStream(wavfile);
		AudioFormat format = wav.getFormat();
		// prepare audio output
		DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
		SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
		// prepare audio output
		line.open(format, 1024);
		line.start();
		// play audio
		while ((len = wav.read(buf)) != -1)
			line.write(buf, 0, len);
		// shut down audio
		line.drain();
		line.stop();
		line.close();
	}

}
```

MP3の再生には[JavaZOOM](http://www.javazoom.net/index.shtml "javazoom")を使っています。

```Maven
		<dependency>
			<groupId>com.googlecode.soundlibs</groupId>
			<artifactId>jlayer</artifactId>
			<version>1.0.1.4</version>
		</dependency>
```