Java 25が昨日9/16にリリースされています。新機能まとめはこちらです。
Java 25新機能まとめ #OpenJDK - Qiita
その中で、javax.sound.SoundClipというクラスが新設されています。
次のようにしてWAVファイルを再生できます。
var file = new File("sound.wav"); var clip = SoundClip.createSoundClip(file); clip.play();
いままで、音声ファイルを再生する一番手軽な手段はApplet APIのAudioClipだったのですが、Applet APIはJava 17でDeprecatedになり、Java 26で削除の予定です。
JEP 398: Deprecate the Applet API for Removal
JEP 504: Remove the Applet API
そこで手軽に音声を再生するための代替手段として、SoundClipクラスが導入されました。
[JDK-8356049] Need a simple way to play back a sound clip - Java Bug System
ゲームの効果音を鳴らしてみる説明を次のエントリに書いています。
Java 25のSoundClipでゲームに効果音をつける - きしだのHatena
ただ、標準で対応しているのはWAVなどの16bit非圧縮PCM形式だけなので、MP3を再生することはできません。
MP3対応のSPIを導入することでMP3を再生することができます。
デコーダー(再生)にjlayer、エンコーダーにjava-lameを使うMP3SPIを読み込めば、MP3に対応します。
https://github.com/umjammer/mp3spi
クラスパスにMP3SPIのjarを置いておくだけです。 Mavenであれば、jitpack.ioをリポジトリに追加してmp3spiをdependencyに追加します。
<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.github.umjammer</groupId> <artifactId>mp3spi</artifactId> <version>1.9.17</version> </dependency> </dependencies>
そうすると、こんな感じでソースコード上で何もしなくてもMP3ファイルが再生できるようになります。play()は再生終了を待たないので、ここでは5秒のウェイトを入れています。
import module java.base; import javax.sound.SoundClip; public class Mp3sample { void main() throws IOException, InterruptedException { var file = new File("music.mp3"); var clip = SoundClip.createSoundClip(file); IO.println(clip.canPlay()); clip.play(); Thread.sleep(Duration.ofSeconds(5)); } }