またまた続きです。
ドの音符に、横棒がないので、つけます。
あと関数名がlineでしたが、名前が変なので、onpuにします。
元関数
1 line(){ 2 x=120 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 }
修正後。1,18行目を修正。8,9,13行目を増やしました。
1 onpu(){ 2 x=120 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 barx1=`expr $x - 20` 9 barx2=`expr $x + 20` 10 cat <<EOL 11 <ellipse cx="$x" cy="$onkai" rx="14" ry="9" fill="black" transform="rotate(-25,$x,$onkai)"/> 12 <line x1="$bx" y1="$b1" x2="$bx" y2="$b2" stroke="black" stroke-width="2.5"/> 13 <line x1="$barx1" y1="$onkai" x2="$barx2" y2="$onkai" stroke="black" stroke-width="2.5"/> 14 EOL 15 x=`expr $x + 60`; 16 done 17 } 18 a=`onpu 0 1 2 3 4 5 6 7`
このような絵になります。
全部土星になってしまうので、条件をつけねばなりません。
横棒が必要なドは0の場合のみですので、if文(8行目)で判定します。
1 onpu(){ 2 x=120 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 if [ $i -eq 0 ] ; then 9 barx1=`expr $x - 20` 10 barx2=`expr $x + 20` 11 dosei="<line x1=\"$barx1\" y1=\"$onkai\" x2=\"$barx2\" y2=\"$onkai\" stroke=\"black\" stroke-width=\"2.5\"/>" 12 else 13 dosei="" 14 fi 15 cat <<EOL 16 <ellipse cx="$x" cy="$onkai" rx="14" ry="9" fill="black" transform="rotate(-25,$x,$onkai)"/> 17 <line x1="$bx" y1="$b1" x2="$bx" y2="$b2" stroke="black" stroke-width="2.5"/> 18 $dosei 19 EOL 20 x=`expr $x + 60`; 21 done 22 } 23 a=`onpu 0 1 2 3 4 5 6 7`
音符の数を8個から13個に増やしてみます。
五線譜のを超えたラにも横棒が必要になるので、0以外に12も条件に含めます(8行目)
1 onpu(){ 2 x=120 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 for j in 0 12;do 9 if [ $i -eq $j ] ; then 10 barx1=`expr $x - 20` 11 barx2=`expr $x + 20` 12 dosei="<line x1=\"$barx1\" y1=\"$onkai\" x2=\"$barx2\" y2=\"$onkai\" stroke=\"black\" stroke-width=\"2.5\"/>" 13 break 14 else 15 dosei="" 16 fi 17 done 18 cat <<EOL 19 <ellipse cx="$x" cy="$onkai" rx="14" ry="9" fill="black" transform="rotate(-25,$x,$onkai)"/> 20 <line x1="$bx" y1="$b1" x2="$bx" y2="$b2" stroke="black" stroke-width="2.5"/> 21 $dosei 22 EOL 23 x=`expr $x + 60`; 24 done 25 } 26 a=`onpu 0 1 2 3 4 5 6 7 8 9 10 11 12` 27 28 cat <<EOL > /tmp/tmp.svg 29 <svg width="1280" height="280"> 30 <rect x="0" y="0" width="1280" height="280" 31 fill="white"></rect> 32 <line x1="10" y1="100" x2="1270" y2="100" stroke="black"/> 33 <line x1="10" y1="120" x2="1270" y2="120" stroke="black"/> 34 <line x1="10" y1="140" x2="1270" y2="140" stroke="black"/> 35 <line x1="10" y1="160" x2="1270" y2="160" stroke="black"/> 36 <line x1="10" y1="180" x2="1270" y2="180" stroke="black"/> 37 <line x1="10" y1="100" x2="10" y2="180" stroke="black"/> 38 $a 39 <path stroke="black" stroke-width="1" 40 d="m 56.35986,168.66933 c 0,0 -4.61429,-0.97143 41 -5.82857,-7.77143 -1.69321,-9.48198 10.88767,-14.08481 42 16.75714,-10.44286 5.0332,3.12306 5.49313,13.26802 43 3.15714,17.97143 -7.39019,14.87984 -32.05714,6.31429 44 -33.02857,-12.38571 -0.85171,-16.39547 23.31429,-34.24286 45 23.31429,-34.24286 15.69195,-18.14484 14.27911,-29.83344 46 5.1,-45.9 -9.67568,6.65963 -13.98784,17.86559 47 -12.87143,28.41428 0.37615,3.13466 11.41428,91.55715 48 11.41428,91.55715 -0.97143,1.7 0.60315,6.29524 49 -7.04285,9.71428 -5.75143,2.57185 -13.95304,-3.97819 50 -10.44286,-4.61428 2.43211,-0.44074 6.02055,-2.16783 51 6.55714,-7.04286 0.43495,-3.9516 -3.88571,-9.22857 52 -10.68571,-6.31429 -9.70669,7.11557 0.006,19.9073 53 12.38571,20.64286 11.15395,-1.12296 11.46971,-11.74642 54 11.17143,-17.00001 -0.25271,-3.70639 -10.68571,-84.02856 55 -10.68571,-84.02856 -0.24286,-5.1 3.59877,-18.50425 56 9.95714,-18.94286 3.30325,-0.22786 5.82315,8.82371 57 1.45714,15.78572 -8.98571,14.32857 -33.79055,29.19106 58 -35.21428,44.68571 -1.58507,16.3288 12.24666,29.92904 59 26.71428,30.35714 7.60069,-0.91625 18.84479,-6.24743 60 20.15714,-21.12857 0.94007,-10.65967 -8.01428,-18.21428 61 -19.91428,-16.75714 -2.98171,0.36511 -10.17437,4.05167 62 -12.14286,9.95714 -2.57761,8.56468 2.2775,14.91145 63 9.71429,17.48572 z" 64 /> 65 66 </svg> 67 EOL 68 inkscape -z -e out.png /tmp/tmp.svg
もっと音符が増えたらどうすれば良いでしょうか。
続く。
コメント
[…] 『海の上のピアニスト』(The Legend of 1900)(1998) 大西洋を往復する豪華客船で生まれた1900(ティム・ロス)は、ピアノ弾きです。ずっと船の上でピアノだけを弾いてきてるので、羨ましいほど技が極まってます。ピアノバトルもあって、速弾きするシーンにはぞくぞくしました。 今回は「ド星の輪をつける」の続きで、大譜表を描いてみます。 […]