グラフィック表示に挑戦します。
ここでは「Temperament.java」のコードを再利用しています。
実行方法はこれまでと異なりアプレットビューアーを使用しています。
> appletviewer DispTemp.java
ここでは12のデータのみの表示ですが これから88でも100でものデータ表示に 対応させて行く事ができると思います。
import java.applet.*; import java.awt.*; /* <applet code="DispTemp" width=400 height=300> <applet> */ /* 上記の4行はアプレット(appletviewer)を実行する為に必要です */ public class DispTemp extends Applet { final int Oct = 12; final String[] Keys = {"C","Cis","D","Es","E","F","Fis","G","Gis","A","B","H"}; final double[] temp = /* 音律の C〜のセント値です */ {0, 90.225, 203.91, 294.135, 396.314, 498.045, 590.224, 701.995, 792.18, 895.112, 996.09, 1088.269}; /* キルンベルガー No.2 */ /* {0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100}; // 動作試験用 平均律の値です */ public void init() { setBackground(Color.black); /* 背景色を設定します */ } public void paint(Graphics g) { Dimension d = getSize(); /* アプレットの画面サイズを得ます */ int W = d.width; /* 幅を得ます */ int H = d.height; /* 高さ " */ int h2 = H/2; /* 1/2で中央位置を得ます */ int dot = 6; /* セント値のドットの径を設定します */ int ds = dot/2; /* ドットの1/2を得ます */ int max = 30, ms = 5; /* 目盛の最大値と目盛表示位置を設定します */ double dx = W/(double)Oct; /* 1ドット表示する間隔を得ます */ double dy = h2/(double)max; /* 単位目盛の高さを得ます */ g.setColor(Color.blue); g.drawLine(0, h2, W, h2); /* 目盛の中央線を引きます */ for (int i = 1; i <= max/10; i++) { /* 目盛の間隔を10とします */ int ii = i*10; int mp = (int)(h2-ii*dy); /* プラス側の目盛の位置を得ます */ int mm = (int)(h2+ii*dy); /* マイナス " */ g.setColor(Color.blue); g.drawLine(0, mp, W, mp); /* +-目盛線を引きます */ g.drawLine(0, mm, W, mm); g.setColor(Color.red); g.drawString(""+ii, ms, mp); /* +-目盛を表示します */ g.drawString("-"+ii, ms, mm); } for (int i = 0; i < Oct; i++) { /* セント値のドットを表示します */ int xx = (int)(i*dx); /* X方向のドットの位置を得ます */ g.setColor(Color.orange); g.drawString(Keys[i], xx, 12); /* キー名を表示します */ double cent = temp[i]-i*100; /* セント差を求めます */ int yy = (int)(h2-dy*cent); g.setColor(Color.green); g.fillOval(xx-ds, yy-ds, dot, dot); /* セント値のドットを表示します */ } } }