そういえばJavaでwav再生の回答
こんばんは、茶々市@healthiaです。
だいぶ暑くなってきましたね。
以前Javaでwavファイルの再生がうまくできないって話がありましたが、
たまに「java wav 再生」で検索して見える方がみえるようなので、
一応うまいこと鳴るようになったソースを公開しておきます。
---以下ソース
---ここまで
申し訳ありませんが、コードが見づらくなるためコメントは削除してあります。
SoundAudioクラスを実体化させ、sound()メソッドを呼んであげれば音が鳴ります。
ただし、短時間の連続再生には耐えれませんので、使用に合わせて工夫してください。
あと、いろいろ試行錯誤していたため、その残骸が残っているかもしれません。
以上。
だいぶ暑くなってきましたね。
以前Javaでwavファイルの再生がうまくできないって話がありましたが、
たまに「java wav 再生」で検索して見える方がみえるようなので、
一応うまいこと鳴るようになったソースを公開しておきます。
---以下ソース
package util;
import java.net.URL;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
public class SoundAudio implements LineListener
{
private Clip clip_ = null;
public SoundAudio(URL _url) throws Exception
{
AudioInputStream input = AudioSystem.getAudioInputStream(_url);
AudioFormat format = input.getFormat();
if(
(format.getEncoding() == AudioFormat.Encoding.ALAW)
|| (format.getEncoding() == AudioFormat.Encoding.ULAW))
{
AudioFormat pcm = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits() * 2,
format.getChannels(),
format.getFrameSize() * 2,
format.getFrameRate(),
true);
input = AudioSystem.getAudioInputStream(pcm, input);
format = pcm;
}
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip_ = (Clip)AudioSystem.getLine(info);
clip_.addLineListener(this);
clip_.open(input);
input.close();
}
public void sound()
{
if(clip_ != null)
{
clip_.start();
}
}
public void update(LineEvent event)
{
if(event.getType() == LineEvent.Type.STOP)
{
clip_.stop();
clip_.setFramePosition(0);
}
}
}
---ここまで
申し訳ありませんが、コードが見づらくなるためコメントは削除してあります。
SoundAudioクラスを実体化させ、sound()メソッドを呼んであげれば音が鳴ります。
ただし、短時間の連続再生には耐えれませんので、使用に合わせて工夫してください。
あと、いろいろ試行錯誤していたため、その残骸が残っているかもしれません。
以上。