
五線譜の続きです。
~$ cat -n staff.sh
1 cat <<EOL > /tmp/tmp.svg
2 <svg width="640" height="280">
3 <rect x="0" y="0" width="640" height="280" fill="white"></rect>
4 <line x1="10" y1="100" x2="1270" y2="100" stroke="black"/>
5 <line x1="10" y1="120" x2="1270" y2="120" stroke="black"/>
6 <line x1="10" y1="140" x2="1270" y2="140" stroke="black"/>
7 <line x1="10" y1="160" x2="1270" y2="160" stroke="black"/>
8 <line x1="10" y1="180" x2="1270" y2="180" stroke="black"/>
9 <circle cx="100" cy="200" r="10" fill="black" />
10 <circle cx="140" cy="190" r="10" fill="black" />
11 <circle cx="180" cy="180" r="10" fill="black" />
12 </svg>
13 EOL
14 inkscape -z -e out.png /tmp/tmp.svg
これを少しずつ改造します。
9行目の音符(circle)は、関数化しておきます。
1 line(){
2 cat <<EOL
3 <circle cx="100" cy="200" r="10" fill="black" />
4 EOL
5 }
ドを0として、レ=1、ミ=2、番号で音階が指定できるように修正します。
1 line(){
2 x=100
3 for i in $@;do
4 onkai=`expr 200 - $i \* 10`
5 cat <<EOL
6 <circle cx="$x" cy="$onkai" r="10" fill="black" />
7 EOL
8 x=`expr $x + 40`;
9 done
10 }
ド〜ドまで表示します。
1 line(){
2 x=100
3 for i in $@;do
4 onkai=`expr 200 - $i \* 10`
5 cat <<EOL
6 <circle cx="$x" cy="$onkai" r="10" fill="black" />
7 EOL
8 x=`expr $x + 40`;
9 done
10 }
11 a=`line 0 1 2 3 4 5 6 7`

音符に「ぼう」をつけてみます。5,6,9行目を追加しました。
1 line(){
2 x=100
3 for i in $@;do
4 onkai=`expr 200 - $i \* 10`
5 b2=`expr $onkai - 10`
6 b1=`expr $onkai - 60`
7 cat <<EOL
8 <circle cx="$x" cy="$onkai" r="10" fill="black" />
9 <line x1="$x" y1="$b1" x2="$x" y2="$b2" stroke="black"/>
10 EOL
11 x=`expr $x + 40`;
12 done
13 }

円の代わりに楕円を使って音符に近づけます。ぼうの楕円の右端にくるようにずらします。
1 line(){
2 x=100
3 for i in $@;do
4 onkai=`expr 200 - $i \* 10`
5 b2=`expr $onkai - 5`
6 b1=`expr $onkai - 70`
7 bx=`expr $x + 12`
8 cat <<EOL
9 <ellipse cx="$x" cy="$onkai" rx="14" ry="9" fill="black" transform="rotate(-25,$x,$onkai)"/>
10 <line x1="$bx" y1="$b1" x2="$bx" y2="$b2" stroke="black" stroke-width="2.5"/>
11 EOL
12 x=`expr $x + 40`;
13 done
14 }

楕円を回転させて、ぼうは少し太くします。あと音符間の間隔を広げたり、いろいろ調整。
~$ cat -n staff2.sh
1 line(){
2 x=100
3 for i in $@;do
4 onkai=`expr 200 - $i \* 10`
5 b2=`expr $onkai - 5`
6 b1=`expr $onkai - 70`
7 bx=`expr $x + 12`
8 cat <<EOL
9 <ellipse cx="$x" cy="$onkai" rx="14" ry="9" fill="black" transform="rotate(-25,$x,$onkai)"/>
10 <line x1="$bx" y1="$b1" x2="$bx" y2="$b2" stroke="black" stroke-width="2.5"/>
11 EOL
12 x=`expr $x + 60`;
13 done
14 }
15 a=`line 0 1 2 3 4 5 6 7`
16
17 cat <<EOL > /tmp/tmp.svg
18 <svg width="640" height="280">
19 <rect x="0" y="0" width="640" height="280" fill="white"></rect>
20 <line x1="10" y1="100" x2="1270" y2="100" stroke="black"/>
21 <line x1="10" y1="120" x2="1270" y2="120" stroke="black"/>
22 <line x1="10" y1="140" x2="1270" y2="140" stroke="black"/>
23 <line x1="10" y1="160" x2="1270" y2="160" stroke="black"/>
24 <line x1="10" y1="180" x2="1270" y2="180" stroke="black"/>
25 $a
26 </svg>
27 EOL
28 inkscape -z -e out.png /tmp/tmp.svg
これを実行すると、タイトルの画像が生成されます。


コメント