1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

Main

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

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

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

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を使っています。

		<dependency>
			<groupId>com.googlecode.soundlibs</groupId>
			<artifactId>jlayer</artifactId>
			<version>1.0.1.4</version>
		</dependency>
1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?