import java.util.Arrays;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
public class Main {
public static void main(String[] args) throws LineUnavailableException {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
// サンプリングレート: 44100 Hz
int sampleRate = 44100;
// ラ(A3): 220 Hz
int frequency = 220;
int l = sampleRate / frequency;
int c = l / 2;
int v = 0x07;
// 1波長分の矩形波データ
byte[] b = new byte[l];
Arrays.fill(b, 0, c, (byte) +v);
Arrays.fill(b, c, l, (byte) -v);
// PCM_SIGNED 44100.0 Hz, 8 bit, mono, 1 bytes/frame
AudioFormat f = new AudioFormat(sampleRate, 8, 1, true, true);
try(SourceDataLine line = AudioSystem.getSourceDataLine(f)) {
long startTime = System.currentTimeMillis();
// 10ミリ秒分のバッファを用意する
line.open(f, sampleRate * 10 / 1000);
line.start();
while (true) {
// 1波長分出力
line.write(b, 0, b.length);
// おおよそ2秒間鳴らしたら終了
long time = System.currentTimeMillis();
if (time > startTime + 2000L) {
break;
}
}
line.drain();
line.stop();
}
}
}
CgppbXBvcnQgamF2YS51dGlsLkFycmF5czsKCmltcG9ydCBqYXZheC5zb3VuZC5zYW1wbGVkLkF1ZGlvRm9ybWF0OwppbXBvcnQgamF2YXguc291bmQuc2FtcGxlZC5BdWRpb1N5c3RlbTsKaW1wb3J0IGphdmF4LnNvdW5kLnNhbXBsZWQuTGluZVVuYXZhaWxhYmxlRXhjZXB0aW9uOwppbXBvcnQgamF2YXguc291bmQuc2FtcGxlZC5Tb3VyY2VEYXRhTGluZTsKCgpwdWJsaWMgY2xhc3MgTWFpbiB7CgoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBMaW5lVW5hdmFpbGFibGVFeGNlcHRpb24gewoKCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldFByaW9yaXR5KFRocmVhZC5NQVhfUFJJT1JJVFkpOwoKCQkvLyDjgrXjg7Pjg5fjg6rjg7PjgrDjg6zjg7zjg4g6IDQ0MTAwIEh6CgkJaW50IHNhbXBsZVJhdGUgPSA0NDEwMDsKCgkJLy8g44OpKEEzKTogMjIwIEh6CgkJaW50IGZyZXF1ZW5jeSA9IDIyMDsKCgkJaW50IGwgPSBzYW1wbGVSYXRlIC8gZnJlcXVlbmN5OwoJCWludCBjID0gbCAvIDI7CgkJaW50IHYgPSAweDA3OwoKCQkvLyDvvJHms6LplbfliIbjga7nn6nlvaLms6Ljg4fjg7zjgr8KCQlieXRlW10gYiA9IG5ldyBieXRlW2xdOwoJCUFycmF5cy5maWxsKGIsIDAsIGMsIChieXRlKSArdik7CgkJQXJyYXlzLmZpbGwoYiwgYywgbCwgKGJ5dGUpIC12KTsKCgkJLy8gUENNX1NJR05FRCA0NDEwMC4wIEh6LCA4IGJpdCwgbW9ubywgMSBieXRlcy9mcmFtZQoJCUF1ZGlvRm9ybWF0IGYgPSBuZXcgQXVkaW9Gb3JtYXQoc2FtcGxlUmF0ZSwgOCwgMSwgdHJ1ZSwgdHJ1ZSk7CgoJCXRyeShTb3VyY2VEYXRhTGluZSBsaW5lID0gQXVkaW9TeXN0ZW0uZ2V0U291cmNlRGF0YUxpbmUoZikpIHsKCgkJCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CgoJCQkvLyDvvJHvvJDjg5/jg6rnp5LliIbjga7jg5Djg4Pjg5XjgqHjgpLnlKjmhI/jgZnjgosKCQkJbGluZS5vcGVuKGYsIHNhbXBsZVJhdGUgKiAxMCAvIDEwMDApOwoJCQlsaW5lLnN0YXJ0KCk7CgoJCQl3aGlsZSAodHJ1ZSkgewoKCQkJCS8vIO+8keazoumVt+WIhuWHuuWKmwoJCQkJbGluZS53cml0ZShiLCAwLCBiLmxlbmd0aCk7CgoJCQkJLy8g44GK44GK44KI44Gd77yS56eS6ZaT6bO044KJ44GX44Gf44KJ57WC5LqGCgkJCQlsb25nIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKCQkJCWlmICh0aW1lID4gc3RhcnRUaW1lICsgMjAwMEwpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoKCQkJbGluZS5kcmFpbigpOwoJCQlsaW5lLnN0b3AoKTsKCQl9Cgl9Cn0K