• category: swing folder: Sound title: Wavファイルの演奏 tags: [AudioSystem, Sound] author: aterai pubdate: 2004-08-16T10:11:14+09:00 pubdate: 2004-08-16T00:28:04+09:00 description: AudioSystemを使って、AudioInputStream、Clip(Line)などを作成取得し、wavファイルを演奏します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTTj2hYTjI/AAAAAAAAAko/8dQ-XleMZBc/s800/Sound.png

概要

AudioSystemを使って、AudioInputStreamClip(Line)などを作成取得し、wavファイルを演奏します。

サンプルコード

URL url = getClass().getResource("notice1.wav");
#spandel
AudioInputStream sound = AudioSystem.getAudioInputStream(url);
#spanend
#spandel
AudioFormat format = sound.getFormat();
#spanend
#spandel
DataLine.Info di = new DataLine.Info(Clip.class, format);
#spanend
#spandel
Clip clip = (Clip) AudioSystem.getLine(di);
#spanend
#spandel
clip.open(sound);
#spanend
#spandel
clip.start();
#spanend
#spanadd
try (AudioInputStream sound = AudioSystem.getAudioInputStream(url);
#spanend
     Clip clip = (Clip) AudioSystem.getLine(new DataLine.Info(Clip.class, sound.getFormat()))) {
  SecondaryLoop loop = Toolkit.getDefaultToolkit().getSystemEventQueue().createSecondaryLoop();
  clip.addLineListener(e -> {
    LineEvent.Type t = e.getType();
    if (Objects.equals(t, LineEvent.Type.STOP) || Objects.equals(t, LineEvent.Type.CLOSE)) {
      loop.exit();
    }
  });
  clip.open(sound);
  clip.start();
  loop.enter();
#spanadd
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
#spanend
  ex.printStackTrace();
  Toolkit.getDefaultToolkit().beep();
#spanadd
}
#spanend
View in GitHub: Java, Kotlin

解説

WAVEAUAIFFSND形式のサウンドファイルが演奏できるようです。 AudioSystemを使用すれば、WAVEAUAIFFSND形式のサウンドファイルが演奏可能です。
  • AudioInputStreamClipAutoCloseableで自動的に開放するためtry-with-resourcesブロックで作成
  • 演奏開始後にSecondaryLoopで現在のスレッドをブロックし新しいセカンダリイベントループで演奏を継続
  • 演奏終了イベントをLineListenerで受け取るとセカンダリイベントループを終了して現在のスレッドに戻りclose()が自動的に実行される

参考リンク

コメント