argius note

プログラミング関連

♪サイン波の音

出せた。プログラム的にはきれいじゃないけど。特に、AudioPlayerとかは公開パッケージじゃないし。あと、AudioPlayerはスレッドなので、止め方が良く分からないので一定時間過ぎると強制終了とした。

    private static final int LENGTH = 0x100000;
    public static void main(String[] args) throws Throwable {
        byte[] data = new byte[LENGTH];
        for (int i = 0; i < data.length; i+=2) {
            double d = Math.sin(i * 0.068) * 100;
            data[i] = (byte)(0xFF & ((int)d >> 4));
            data[i + 1] = (byte)(0xFF & (int)d);
        }
        AudioFormat af = new AudioFormat(48000, 16, 1, true, false);
        InputStream in = new ByteArrayInputStream(data);
        AudioInputStream ais = new AudioInputStream(in, af, LENGTH);
        AudioFileFormat.Type type = AudioFileFormat.Type.WAVE;
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        AudioSystem.write(ais, type, os);
        ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
        sun.audio.AudioPlayer.player.start(is);
        Thread.sleep(30000);
        System.exit(0);
    }