それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Javaで音を鳴らす

Java でサウンド再生

サウンド再生すればちょっと楽しいかなって思ってやってみた。

準備

WAV ファイルを作る

ffmpeg input.m4a output.wav

いまどきWAVファイルなんて扱ってる人は少ないだろうからメモしておく

Java でWAVファイルを使って音を鳴らす。

AudioStream を使えばぱぱっと出来る。

import java.io.*;
import sun.audio.*;


public class PlaySound{

  public static void main( String[] args)  throws Exception {
    
    String f_name = "/Users/takuya/sample.wav";
    System.out.println("Hello World.");

    InputStream in = new FileInputStream(f_name);
    AudioStream as = new AudioStream(in);

    AudioPlayer.player.start(as);

  
  }

}

これでも結構かんたんに音がなる。

コレもサンプルコードで見つけた。でもちょっとコードが古い。

import java.io.*;
import sun.audio.*;

import javax.sound.sampled.*;

public class PlaySound{

  public static void main( String[] args)  throws Exception {
    
    String f_name = "/Users/takuya/sample.wav";
    System.out.printf("playing %s \n", f_name);

    File f = new File( f_name );
    AudioInputStream ais = AudioSystem.getAudioInputStream(f);

    AudioFormat  af = ais.getFormat();
    DataLine.Info info = new DataLine.Info( SourceDataLine.class, af , AudioSystem.NOT_SPECIFIED  );

    SourceDataLine line = (SourceDataLine) AudioSystem.getLine( info  );

    line.open( af , AudioSystem.NOT_SPECIFIED );
    line.start();
    int buff_size = 1024*3;
    int bytes_read = 0 ; 
    byte[] data = new byte[buff_size];

    while ( bytes_read != -1 ){
      bytes_read = ais.read( data, 0, data.length  );
      if ( bytes_read > 0 ) {
        line.write(data, 0, bytes_read);
      }
    }

    line.drain();
    line.close();
  }

}

参考資料

ドコから持ってきたのか忘れた。