♪ハープシコード風?波形
時間と共に振り幅が小さくなる波形を作ってみた。それと、波形をさらに変なかたちに。すると、おもちゃのキーボード(音楽用)のハープシコードのような音になりました。ちゃんと「ぽーん」て鳴った。ちょっとうれしい。
ついでに波形を表示するのをJavaに移植。
import java.awt.*;
import javax.swing.*;
final class GraphScreenCanvas extends JPanel {
private double sin(double radian) {
return Math.sin(radian);
}
private double cos(double radian) {
return Math.cos(radian);
}
private int exchange(double p) {
double rate = 100;
double x = (p + 1) * rate - 10;
return (int)x;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
double dec = 1;
for (double i = -2500; i < 2500; i += 0.1) {
double n = Math.toRadians(i);
double x = i / 300f;
double y;
// sin(2n) x (cos(3n) x cos(n) ^2
y = sin(2 * n) * Math.pow(cos(3 * n) * cos(n), 2);
y *= 20; // basic amp rate
y /= dec; // dec
dec *= 1.0001;
g.fillOval(exchange(x) + 100, exchange(y), 1, 1);
}
}
}
public final class GraphScreen extends JFrame {
public GraphScreen() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new GraphScreenCanvas());
}
public static void main(String[] args) {
GraphScreen gs = new GraphScreen();
gs.setSize(400, 200);
gs.setVisible(true);
}
}