/* * DumpWave.java */ import java.io.IOException; import java.io.File; import javax.sound.sampled.*; public class DumpWave { public static void main(String [] args) { try { AudioInputStream ais = AudioSystem.getAudioInputStream(new File(args[0])); // オーディオ入力ストリームからデータを読む (一気に読むバージョン) byte [] data = new byte [ais.available()]; ais.read(data); ais.close(); // ファイルのフォーマットを調べる AudioFormat af = ais.getFormat(); System.out.println("#channels: " + af.getChannels()); System.out.println("#isBigEndian: " + af.isBigEndian()); System.out.println("#FrameSize: " + af.getFrameSize()); System.out.println("#SampleSizeInBits: " + af.getSampleSizeInBits()); System.out.println("#SampleRate: " + af.getSampleRate()); if (af.getEncoding() == AudioFormat.Encoding.PCM_SIGNED) { System.out.println("#符号付PCM"); } else if (af.getEncoding() == AudioFormat.Encoding.PCM_UNSIGNED) { System.out.println("#符号無PCM"); } System.out.println("#サイズ: " + data.length + "バイト, " + data.length / af.getSampleRate() + "秒"); // ステレオ,16ビット,符号付PCM,リトルエンディアンのみ if (af.getChannels() == 2 && af.getSampleSizeInBits() == 16 && af.getEncoding() == AudioFormat.Encoding.PCM_SIGNED && (!af.isBigEndian())) { short left, right; for (int i = 0; i < data.length; i += 4) { left = (short)(data[i] & 0xff | (data[i+1] << 8)); right = (short)(data[i+2] & 0xff | (data[i+3] << 8)); System.out.println("" + left + " " + right); } } else { System.out.println("#ステレオ,16ビット,符号付PCM,リトルエンディアンのみ対応"); } } catch (Exception e) { e.printStackTrace(); System.exit(1); } } }