ドリトルでリサージュ図形を描いてみる
psetメソッドを使って円が描ければ、グラフィックのプログラム演習に必ず出てくる、あの有名なリサージュ図形を描くのは簡単だ。
ただ、ドリトルの場合の三角関数の単位は度なので、ラジアンから度に変換(ラジアン*180/π)する必要がある。
//psetメソッドでリサージュ図形を描く
描画:pset=[ |x y color size|
ラベル! 作る (size)(size) 大きさ (x)(y) 位置 (color) 色 書く
].
pi=3.14159.
n=0.
[n<800]!の間[
x=200*sin((n/40)*180/pi).
y=150*sin((n/30)*180/pi).
描画! (x)(y)(青)(2) pset.
n=n+1
]実行.
//--------- ここまで ----------
ドリトルでpsetメソッドを作ってみる
昨日までは、ドリトルでMIDIを楽しんでみたのだが、今日からはドリトルで
コンピュータグラフィックに挑戦してみる。
ドリトルには秀逸なタートルグラフィックの機能があるのだが、この機能だけでコンピュータグラフィックをやろうとするとちょっと難しい。そこで、従来のプログラミング言語のグラフィック命令にあるような、
任意の座標に点を打つpset命令に相当する描画メソッドを作ってみた。
ドリトルのラベルオブジェクトは、文字を表示するためのオブジェクトなのだが、任意の大きさの(1ドット単位)の表示領域を作成でき、なおかつ背景色を指定できるので、このラベルオブジェクトを使って
psetメソッドを実現してみた。
使い方はこうだ。
描画! (x座標) (y座標) (表示色) (点の大きさ) psetこのpsetメソッドを使って、
円を描いてみる。ドリトルにも
sinや
cosなどの数学関数があるので、円を描画するのは簡単だ。
//psetメソッドで円を描く
描画:pset=[ |x y color size|
ラベル! 作る (size)(size) 大きさ (x)(y) 位置 (color) 色 書く
].
半径=100.
角度=0.
[角度<360]!の間[
x=半径*cos(角度).
y=半径*sin(角度).
描画! (x)(y)(赤)(1) pset.
角度=角度+1
]実行.
//--------- ここまで ----------
こんな感じでpsetメソッドが使えれば、ドリトルでコンピュータグラフィックを作るのも以外と簡単だ。
OOM_12 和楽器のための二つのラプソディー NO.2
今日はいよいよコンサート最後の曲目だ。「和楽器のための二つのラプソディー 」の二番目の部分だ。
一番目を聴いていてたまらなくなったのか、観客席にいた「きょうちゃん」からどうしても自分も合奏に加わりたいという申し出があった。ということで、特別に参加してもらうことにした。鼓を担当してもらって、5人で最後の大合奏だ。
//OOM_12 和楽器のための二つのラプソディー NO.2
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
調子=配列!作る "そ"入れる "ら"入れる "し"入れる "↓↓ラ"入れる "↓レ"入れる "↓ミ"入れる "↓ファ"入れる "↓ラ"入れる "シ♭゙"入れる "レ"入れる "ミ"入れる "ファ"入れる "ラ"入れる "シ♭"入れる "↑レ"入れる "↑ミ"入れる "↑ファ"入れる "↑ラ"入れる"↑シ♭"入れる "↑↑ド"入れる "↑↑レ"入れる "↑↑ミ"入れる "↑↑ファ"入れる "↑↑ラ"入れる "↑↑シ♭"入れる "↑↑↑レ"入れる "↑↑↑ミ"入れる。
喝采=メロディ!作る "ド1~~~~~~~~~~~~~~~~"追加 2 繰り返す。
笛=072。尺八=077。三弦=106。琴=107。鼓=118。拍手=126。
作品:作曲=「|r n m| 作品=メロディ!作る。「 l="4"。
音列!1 ((調子! (random(r)+n) 見る) + (l)) 上書き。
音列!2 ((調子! (random(r)+n) 見る) + "2") 上書き。
音列!3 ((調子! (random(r)+n) 見る) + "4") 上書き。
音列!4 ((調子! (random(r)+n) 見る) + "8") 上書き。
作品!(音列!(random(4)) 見る) 追加
」! (m) 繰り返す」。
そうたくん=楽器!(笛) 作る(作品! 12 15 200 作曲) 設定。
たいきくん=楽器!(尺八) 作る(作品! 12 9 200 作曲) 設定。
かおりさん=楽器!(三弦) 作る(作品! 12 7 200 作曲) 設定。
れいなさん=楽器!(琴) 作る(作品! 12 3 200 作曲) 設定。
きょうちゃん=楽器!(鼓) 作る(作品! 3 15 200 作曲) 設定。
環=バンド!作る(そうたくん)追加 (たいきくん)追加 (かおりさん)追加 (れいなさん)追加 (きょうちゃん)追加 64 テンポ 演奏 待つ。
聴衆=楽器! (拍手) 作る(喝采)設定 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
盛大な拍手をいただき恐縮しております。次回のコンサートも企画いたしますのでご期待ください。
OOM_11 和楽器のための二つのラプソディー NO.1
さて、『
環』による演奏会もいよいよ最後のプログラムだ。フィナーレということで4人のメンバー全員が登場する。
曲目は、「和楽器のための二つのラプソディー 」。今日は最初の曲の方のプログラムを書いてみた。尺八2本と三味線とお琴による狂詩曲だ。
//OOM_11 和楽器のための二つのラプソディー NO.1
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
調子=配列!作る "↓↓ラ"入れる "↓ド"入れる "↓ミ"入れる "↓ファ"入れる "↓ラ"入れる "ド"入れる "レ"入れる "ミ"入れる "ファ"入れる "ラ"入れる "シ"入れる "↑レ"入れる "↑ミ"入れる "↑ファ"入れる "↑ラ"入れる"↑シ"入れる "↑↑ド"入れる "↑↑レ"入れる "↑↑ミ"入れる "↑↑ファ"入れる "↑↑ラ"入れる "↑↑シ"入れる "↑↑↑レ"入れる "↑↑↑ミ"入れる。
笛=072。尺八=077。三弦=106。琴=107。
作品:作曲=「|n m| 作品=メロディ!作る。「 l="4"。
音列!1 ((調子! (random(12)+n) 見る) + (l)) 上書き。
音列!2 ((調子! (random(12)+n) 見る) + "2") 上書き。
音列!3 ((調子! (random(12)+n) 見る) + "4") 上書き。
音列!4 ((調子! (random(12)+n) 見る) + "8") 上書き。
作品!(音列!(random(4)) 見る) 追加
」! (m) 繰り返す」。
そうたくん=楽器!(尺八) 作る(作品! 8 200 作曲) 設定。
たいきくん=楽器!(尺八) 作る(作品! 6 200 作曲) 設定。
かおりさん=楽器!(三弦) 作る(作品! 4 200 作曲) 設定。
れいなさん=楽器!(琴) 作る(作品! 0 200 作曲) 設定。
環=バンド!作る(そうたくん)追加 (たいきくん)追加 (かおりさん)追加 (れいなさん)追加 88 テンポ 演奏 待つ。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_10 尺八のための2声のインベンション NO.2
昨日の「尺八のための2声のインベンション NO.1」は気に入っていただけただろうか。尺八の二重奏も結構よかったような気がする。
そしてお察しの通り、今日はインベンションの続きのNO.2だ。なんかプログラムの作り方もすっきりしてきて、少しは腕が上がったような気がする。
//OOM_10 尺八のための2声のインベンション NO.2
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
調子=配列!作る "レ"入れる "ミ♭"入れる "ファ"入れる "ソ"入れる "ラ♭"入れる "↑ド"入れる "↑レ"入れる "↑ファ"入れる "↑ソ"入れる "↑ラ♭"入れる "↑↑ド"入れる "↑↑ミ♭"入れる。
尺八=077。
作品:作曲=「|m| 作品=メロディ!作る。n=0。「 n=n+1。l=12。
「n<m*0.2」!なら「l=6」実行。「n>m*0.8」!なら「l=7」実行。
音列!1 ((調子! (random(l)) 見る) + "4") 上書き。
音列!2 ((調子! (random(l)) 見る) + "4") 上書き。
音列!3 ((調子! (random(l)) 見る) + "8") 上書き。
作品!(音列!(random(3)) 見る) 追加
」! (m) 繰り返す」。
そうたくん=楽器!(尺八) 作る(作品! 200 作曲) 設定。
たいきくん=楽器!(尺八) 作る(作品! 200 作曲) 設定。
環=バンド!作る(そうたくん)追加 (たいきくん)追加 88 テンポ 演奏 待つ。
//--------- ここまで ----------
そして実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_09 尺八のための2声のインベンション NO.1
邦楽といえば、やはり尺八は欠かせない。プログラムの4曲目から、いよいよ尺八が登場する。
題して「尺八のための2声のインベンション NO.1」。2本の尺八の絶妙な掛け合いが面白い。前半と後半で使う音域をちょっと変えてみた。
//OOM_09 尺八のための2声のインベンション NO.1
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
調子=配列!作る "レ"入れる "ファ"入れる "ソ"入れる "ラ"入れる "↑ド"入れる "↑レ"入れる "↑ファ"入れる "↑ソ"入れる "↑ラ♭"入れる "↑ラ"入れる "↑↑ド"入れる "↑↑レ"入れる。
尺八=077。
作品:作曲=「|m| 作品=メロディ!作る。n=0。「 n=n+1。l=12。「n<40」!なら「l=6」実行。
音列!1 ((調子! (random(l)) 見る) + "4") 上書き。
音列!2 ((調子! (random(l)) 見る) + "4") 上書き。
音列!3 ((調子! (random(l)) 見る) + "8") 上書き。
作品!(音列!(random(3)) 見る) 追加
」! (m) 繰り返す」。
そうたくん=楽器!(尺八) 作る(作品! 120 作曲) 設定。
たいきくん=楽器!(尺八) 作る(作品! 120 作曲) 設定。
環=バンド!作る(そうたくん)追加 (たいきくん)追加 64 テンポ 演奏 待つ。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_08 笛と太鼓による官能的な神楽
今年の桜の色は例年になくきれいな気がする。昨日のプログラム「三弦と鼓による風雅2006」には盛大な拍手を頂戴してしまった。まったく恐縮してしまうのだが、気をよくして3番目のプログラムを書いてみた。
今日の曲は、「笛と太鼓による官能的な神楽」。軽妙な笛の音と撥さばきもあざやかな太鼓の競演だ。
// OOM_08 笛と太鼓による官能的な神楽
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
調子=配列!作る "ど"入れる "み"入れる "そ"入れる "↑↑レ"入れる "↑↑ミ"入れる "↑↑ファ"入れる "↑↑ラ"入れる "↑↑シ"入れる "↑↑↑レ"入れる "↑↑↑ミ"入れる。
fue=072。taiko=116。
作品:作曲1=「|m| 作品=メロディ!作る。「
音列!1 ((調子! (random(7)+3) 見る) + "4") 上書き。
音列!2 ((調子! (random(7)+3) 見る) + "2") 上書き。
作品!(音列!(random(2)) 見る) 追加
」! (m) 繰り返す」。
作品:作曲2=「|m| 作品=メロディ!作る。「
音列!1 ((調子! (random(3)) 見る) + "8") 上書き。
音列!2 ((調子! (random(3)) 見る) + "4") 上書き。
作品!(音列!(random(2)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! (99) 作曲1。Part2=作品! (99*2) 作曲2。
そうたくん=楽器!(fue) 作る(part1) 設定。
たいきくん=楽器!(taiko) 作る(Part2) 設定。
環=バンド!作る(そうたくん)追加 (たいきくん)追加 128 テンポ 演奏 待つ。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_07 三弦と鼓による風雅2006
今年は桜がちょっと早く咲いた。そんなこともあって今夜あたりは花見の宴にぴったりだ。そんな宴の余興のために作ってみたのが2曲目のプログラムだ。
題して、「三弦と鼓による風雅2006」。二丁の三味線とちょっとポップな鼓の競演だ。
//OOM_07 三弦と鼓による風雅2006
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
調子=配列!作る "そ"入れる "ら"入れる "し"入れる "↓シ"入れる "レ"入れる "ミ"入れる "ファ"入れる "ラ"入れる "シ"入れる "↑レ"入れる "↑ミ"入れる。
三弦=106。鼓=118。
作品:作曲1=「|m| 作品=メロディ!作る。「
音列!1 ((調子! (random(8)+3) 見る) + "4") 上書き。
音列!2 ((調子! (random(8)+3) 見る) + "2") 上書き。
作品!(音列!(random(2)) 見る) 追加
」! (m) 繰り返す」。
作品:作曲2=「|m| 作品=メロディ!作る。「
音列!1 ((調子! (random(3)) 見る) + "1") 上書き。
音列!2 ((調子! (random(3)) 見る) + "2") 上書き。
作品!(音列!(random(2)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! (120) 作曲1。Part2=作品! (120) 作曲1。Part3=作品! (120/2) 作曲2。
れいなさん=楽器!(三弦) 作る(part1) 設定。
そうたくん=楽器!(三弦) 作る(part2) 設定。
たいきくん=楽器!(鼓) 作る(Part3) 設定。
環=バンド!作る(れいなさん)追加 (そうたくん)追加 (たいきくん)追加 88 テンポ 演奏 待つ。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_06 二面の箏による即興的断章
今日からは、OOMに感動して急きょ結成?された、和楽器による仮想音楽集団『
環』の演奏会が始まる。
『環』のメンバーは全部で4人だ。一人で色んな楽器をこなす優秀なメンバーがそろっている。
最初のプログラムは、「二面の箏による即興的断章」。十三弦の二重奏だ。Windowsに入っているソフトシンセの琴の音は正直いってあまり良くない。名演奏なのにちょっと残念だ。
// OOM_06 二面の箏による即興的断章
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
古今調子=配列!作る "↓ミ"入れる "↓↓ラ"入れる "↓↓シ"入れる "↓レ"入れる "↓ミ"入れる "↓ファ"入れる "↓ラ"入れる "↓シ"入れる" レ"入れる "ミ"入れる "ファ"入れる "ラ"入れる "シ"入れる。koto=107。
作品:作曲=「|m| 作品=メロディ!作る。「
音列!1 ((古今調子! (random(13)) 見る) + "4") 上書き。
音列!2 ((古今調子! (random(13)) 見る) + "2") 上書き。
音列!3 ((古今調子! (random(13)) 見る) + "1") 上書き。
作品!(音列!(random(3)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! 60 作曲。Part2=作品! 60 作曲。
かおりさん=楽器!(koto) 作る(Part1) 設定。れいなさん=楽器!(koto) 作る(Part2) 設定。
環=バンド!作る(かおりさん)追加 (れいなさん)追加 64 テンポ 演奏 待つ。
休=メロディ!作る "・・・・・・・・" 追加 演奏 待つ。
Part1=作品! 80 作曲。Part2=作品! 80 作曲。
かおりさん=楽器!(koto) 作る(Part1) 設定。れいなさん=楽器!(koto) 作る(Part2) 設定。
環=バンド!作る(かおりさん)追加 (れいなさん)追加 128 テンポ 演奏 待つ。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_05 3本の金管楽器ののための Fantasia
昨日のドリア旋法を使ったちょっと古風な音がなかなか良かったので、今日は金管楽器でやってみる。
音階は、
ミクソリディア旋法だ。物語に出てくる古い王国の戴冠式に使われた曲のように、荘厳で躍動的な音が響きわたる。
// OOM_05 3本の金管楽器ののための Fantasia
音列=配列!作る ""入れる ""入れる ""入れる。
ブラス=配列!作る "↓ソ"入れる "↓ラ"入れる "↓シ"入れる " ド"入れる "レ"入れる "ミ"入れる"ファ"入れる "ソ"入れる。
Piano=000。Trumpet=56。Trombone=057。Horn=060。
作品:作曲=「|m| 作品=メロディ!作る。「
音列!1 ((ブラス! (random(8)) 見る) + "4") 上書き。
音列!2 ((ブラス! (random(8)) 見る) + "2") 上書き。
音列!3 ((ブラス! (random(8)) 見る) + "1") 上書き。
作品!(音列!(random(3)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! 88 作曲。Part2=作品! 88 作曲。Part3=作品! 88 作曲。
れいなさん=楽器!(Horn) 作る(Part1) 設定。
そうたくん=楽器!(Trumpet) 作る(Part2) 設定。
たいきくん=楽器!(Trombone) 作る(Part3)設定。
STz=バンド!作る(れいなさん)追加 (そうたくん)追加 (たいきくん)追加 112 テンポ 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_04 ドリア旋法による古風な愛の歌
ドリア旋法という教会で使われていた音階ある。
http://www.mab.jpn.org/lib/exp/cmodes/char.html#Dorian-modeこの旋法は、ギリシャから受け継いだ(教会旋法は元の音階とはちょっと違うらしいんだけど)ものなのだが、今で言う
短調に似ているのでちょっと哀愁がある旋法だ。
今日は、このドリア旋法を使った音楽を作曲?してみる。古風なハープの伴奏でオーボエが愛の歌を奏でる。
// OOM_04 ドリア旋法による古風な愛の歌
音列=配列!作る ""入れる ""入れる ""入れる。
ドリア=配列!作る "レ"入れる "ミ"入れる "ファ"入れる "ソ"入れる "ラ"入れる "シ"入れる" ↑ド"入れる "↑レ"入れる。
Piano=000。Harp=046。Flute=073。Oboe=068。Bassoon=070。
作品:作曲=「|m| 作品=メロディ!作る。「
音列!1 ((ドリア! (random(8)) 見る) + "4") 上書き。
音列!2 ((ドリア! (random(8)) 見る) + "2") 上書き。
音列!3 ((ドリア! (random(8)) 見る) + "1") 上書き。
作品!(音列!(random(3)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! 68 作曲。Part2=作品! 68 作曲。Part3=作品! 68 作曲。
かおりさん=楽器!(Oboe) 作る(Part1) 設定。
そうたくん=楽器!(Harp) 作る(Part2) 設定。
たいきくん=楽器!(Harp) 作る(Part3)設定。
STz=バンド!作る(かおりさん)追加 (そうたくん)追加 (たいきくん)追加 60 テンポ 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_03 サキソフォン四重奏のためのエレジー
昨日は、12音階を生成する
作曲メソッドをバージョンアップして、ソプラノサックス、アルトサックス、テナーサックス、バリトンサックスといった音域を指定できるようにしてみた。
そこで、今日は早速これを応用して4本のサキソフォンを使って演奏してみる。
新たに、れいなさんにも加わってもらって4人で演奏してもらおう。
// OOM_03 サキソフォン四重奏のためのエレジー
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
音1=メロディ!作る "ド1"追加。音2=メロディ!作る "ド2"追加。
音3=メロディ!作る "ド4"追加。音4=メロディ!作る "ド8"追加。
Piano=000。SopranoSax=064。AltSax=065。TenorSax=066。BaritoneSax=067。
作品:作曲=「|l n m| 作品=メロディ!作る。「
音列!1 (音1! (random(n)-n/2+l) 音上げる) 上書き。
音列!2 (音2! (random(n)-n/2+l) 音上げる) 上書き。
音列!3 (音3! (random(n)-n/2+l) 音上げる) 上書き。
音列!4 (音4! (random(n)-n/2) 音上げる) 上書き。
作品!(音列!(random(4)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! +6 24 50 作曲。Part2=作品! +00 24 50 作曲。
Part3=作品! -6 24 50 作曲。Part4=作品! -12 24 50 作曲。
れいなさん=楽器!(SopranoSax) 作る(Part1)設定。
かおりさん=楽器!(AltSax) 作る(Part2)設定。
そうたくん=楽器!(TenorSax) 作る(Part3)設定。
たいきくん=楽器!(BaritoneSax) 作る(Part4)設定。
KST=バンド!作る(れいなさん)追加 (かおりさん)追加 (そうたくん)追加 (たいきくん)追加 44 テンポ 演奏 待つ。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
OOM_02 フルートとピアノのための三章
OOM_01 2台のピアノのための dialogue がかなりいい感じだったので、今日はちょっとこれをバージョンアップした曲を作ってみる。
一つは、楽器をピアノ以外に増やした。そのために、
メソッドにもう一つパラメータを追加して、
基本のドの音の位置を自由に上下できるようにする。これで、例えば、ソプラノサックス、アルトサックス、テナーサックス、バリトンサックスといった音域を指定できるようになる。
もう一つは、演奏するときの
テンポを変られるようにしてみた。これを使って、三章のそれぞれの曲のテンポを変えて演奏してみる。一章(Tenpo=88)、二章(Tenpo=40)、三章(Tenpo=144)にしてみた。
ということで、2作品目は「フルートとピアノのための三章」。フルート担当のかおりさんに入ってもらって早速演奏してもらおう。
// OOM_02 フルートとピアノのための三章
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
音1=メロディ!作る "ド1"追加。音2=メロディ!作る "ド2"追加。
音3=メロディ!作る "ド4"追加。音4=メロディ!作る "ド8"追加。
Piano=000。Flute=073。Oboe=068。Bassoon=070。
作品:作曲=「|l n m| 作品=メロディ!作る。「
音列!1 (音1! (random(n)-n/2+l) 音上げる) 上書き。
音列!2 (音2! (random(n)-n/2+l) 音上げる) 上書き。
音列!3 (音3! (random(n)-n/2+l) 音上げる) 上書き。
音列!4 (音4! (random(n)-n/2) 音上げる) 上書き。
作品!(音列!(random(4)) 見る) 追加
」! (m) 繰り返す」。
n=1。「
Part1=作品! +24 16 50 作曲。Part2=作品! +0 50 50 作曲。Part3=作品! +0 50 50 作曲。
かおりさん=楽器!(Flute) 作る(Part1)設定。
そうたくん=楽器!(Piano) 作る(Part2)設定。
たいきくん=楽器!(Piano) 作る(Part3)設定。
「n==1」!なら「t=88」実行。「n==2」!なら「t=40」実行。「n==3」!なら「t=144」実行。
KST=バンド!作る(かおりさん)追加 (そうたくん)追加 (たいきくん)追加 (t) テンポ 演奏 待つ。
n=n+1。」! 3 繰り返す。
//--------- ここまで ----------
そして実行!ボタンだ。
拍手! 拍手! 拍手! 拍手!
実験音楽「OOM」へチャレンジ
昨日まで、新しい実験音楽を作るための色んなプログラミングテクニックを試したみた。
今日からは実験音楽のちょっと本格的な作品を作ってみたいと思う。手法にも名前を付けてみようかな。オブジェクト指向プログラミングで作った音楽ということで、
OOM(Object Orieted Music)とでもしてみますかー。(Out-of-Musicじゃないのー、なんていう声も聞こえてきそうだけどね)
ということで、最初の作品は「2台のピアノのための dialogue 」。そうたくんとたいきくんに演奏してもらおう。
// OOM_01 2台のピアノのための dialogue
音列=配列!作る ""入れる ""入れる ""入れる ""入れる。
音1=メロディ!作る "ド1"追加。音2=メロディ!作る "ド2"追加。
音3=メロディ!作る "ド4"追加。音4=メロディ!作る "ド8"追加。
piano=1。
作品:作曲=「|n m| 作品=メロディ!作る。「
音列!1 (音1! (random(n)-n/2) 音上げる) 上書き。
音列!2 (音2! (random(n)-n/2) 音上げる) 上書き。
音列!3 (音3! (random(n)-n/2) 音上げる) 上書き。
音列!4 (音4! (random(n)-n/2) 音上げる) 上書き。
作品!(音列!(random(4)) 見る) 追加
」! (m) 繰り返す」。
Part1=作品! 50 200 作曲。
Part2=作品! 50 200 作曲。
そうたくん=楽器!(piano) 作る(Part1)設定。
たいきくん=楽器!(piano) 作る(Part2)設定。
STz=バンド!作る(そうたくん)追加 (たいきくん)追加 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
拍手! 拍手!
ドリトルのメソッドを定義してみる
オブジェクト指向プログラミングの特徴に、
メソッドというものがある。
http://e-words.jp/w/E383A1E382BDE38383E38389.htmlメソッドとは、簡単に言うとオブジェクトが実行できる仕事のことだ。この仕事は、プログラムを書くことでどんどん機能を増やすことができる。
ドリトルでの
メソッドの書き方はこうだ。
オブジェクト名:メソッド名=「|メソッドの引数|メソッドのプログラム」。この
メソッドを呼び出す時はこう書く。
オブジェクト名! 引数 メソッド名ということで、今日は昨日のプログラムをさらにバージョンアップして、12音階を生成する部分を作品オブジェクトのメソッド(メソッド名は作曲)として定義してみる。
このメソッドへのパラメータはこういうように決める。
n ・・・・ 作成する音程の幅
m ・・・・ 作成する音符の数
作曲メソッドの呼び出し方
作品! 音程の幅 音符の数 作曲
このメソッドを使って、1部、2部、3部の3部構成の曲をドリトルに作曲させてみる。そして、1部をチェロ、2部をピアノ、3部をバスフルートで演奏させる。
あまりすばらしい演奏なので、最後に拍手も付けてみた。
//--------- ここから ----------
音列=配列!作る ""入れる ""入れる ""入れる。
音1=メロディ!作る "ド1"追加。
音2=メロディ!作る "ド2"追加。
音3=メロディ!作る "ド4"追加。
拍手=メロディ!作る "ド1~~~~~~~~~~~~~~~~"追加。
作品:作曲=「|n m| 作品=メロディ!作る。「
音列!1 (音1! (random(n)-n/2) 音上げる) 上書き。
音列!2 (音2! (random(n)-n/2) 音上げる) 上書き。
音列!3 (音3! (random(n)-n/2) 音上げる) 上書き。
作品!(音列!(random(3)) 見る) 追加
」! (m) 繰り返す」。
piano=1。 cello=42。 flute=73。Applause=126。
Part1=作品! 30 100 作曲。奏者=楽器! (cello) 作る(Part1)設定 演奏 待つ。
part2=作品! 80 200 作曲。奏者=楽器! (piano) 作る(Part2)設定 演奏 待つ。
part2=作品! 20 100 作曲。奏者=楽器! (flute) 作る(Part2)設定 演奏 待つ。
聴衆=楽器! (Applause) 作る(拍手)設定 演奏。
//--------- ここまで ----------
そして実行!ボタンだ。
ちょっと本格的になってきた!と思いませんか。
12音技法をちょっとバージョンアップ
昨日作った「12音技法」の音楽は4分音符だけの音列だ。これはこれで面白いような気がするのだがちょっと単調だ。
そこで今日は、
音符の長さが全音符、2分音符、4分音符が
ランダムに並ぶように曲を生成してみる。
演奏する楽器もチェロにして、どんな感じになるか試してみる。
//--------- ここから ----------
音列=配列!作る ""入れる ""入れる ""入れる。
音1=メロディ!作る "ド1"追加。
音2=メロディ!作る "ド2"追加。
音3=メロディ!作る "ド4"追加。
作品4=メロディ!作る。「
音列!1 (音1! (random(40)-20) 音上げる) 上書き。
音列!2 (音2! (random(40)-20) 音上げる) 上書き。
音列!3 (音3! (random(40)-20) 音上げる) 上書き。
作品4!(音列!(random(3)) 見る) 追加
」!100回 繰り返す。
チェロ=楽器! (42) 作る(作品4)設定 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
どうだろうか。こんな短いプログラムでもなんかばらしい作品ができあがる。
ドリトルで12音技法の現代音楽を演奏
現代音楽は「無調の時代」といわれている。こんな現代音楽の技法に「
12音音楽」というのがある。これは「
12音技法」による
無調音楽で、作曲家としてはシェーンベルクが有名だ。
http://ja.wikipedia.org/wiki/12%E9%9F%B3%E6%8A%80%E6%B3%95今日は、この「12音技法」の音楽を
作曲?して演奏!してみる。
昨日までは、配列に作った音階をランダムに選んで演奏したのだが、今日はこの音階自体をランダムに生成する。
MIDIの音程(ノーと番号)の指定方法はこうだ。
http://www.pluto.dti.ne.jp/~daiki/Midi/AboutMidi_Note.html中央『ド』が番号でいうと 60 になる。この『ド』(60)を中心として、上の方に半音毎に50、下の方に半音毎に50の音ができるように乱数を100個発生させる。半音毎にランダムな番号になるから、作られる音は12音階になる。このランダムな音を順番につなげてメロディーを作り演奏させてみる。
//--------- ここから ----------
基準音=メロディ!作る "ド"追加。
作品3=メロディ!作る。
「作品3! (基準音! (random(100)-50) 音上げる)追加」!100回 繰り返す。
作品3! 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
うーん。なんか、ほんとに作曲家になったような気分になってきました。
ドリトルで実験音楽
「
実験音楽」というのは現代音楽の潮流を表す言葉の和製英語だ。
色んな技法が試されているのだが、その中に「
偶然性の音楽」というのがある。
偶然をコンピュータで作るのは意外と簡単だ。たいていの処理系には
乱数を作る関数が用意されているからだ。
「
ドリトル」の乱数の作り方はこうだ。
random(n) 値が1~nの乱数を返す琉球の音楽は独特の五音階だ。今日は、この琉球音階を作って、この音階からランダムに音を取り出し(100個取り出してみる)、この音列を琉球の三味線(三線(サンシン))に演奏させてみる。
//--------- ここから ----------
五音階=配列!作る "ド"入れる "ミ"入れる "ファ"入れる "ソ"入れる "シ"入れる。
作品2=メロディ!作る。
「作品2!(五音階! (random(5)) 見る)追加」!100回 繰り返す。
三線=楽器! (107-1) 作る (作品2) 設定 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
偶然によって作られた100個の音列が、まるで琉球音楽のように響き渡ったと思う。
ドリトルで十三弦を作ってみる
配列オブジェクトを取り出す場合は、取り出す配列の番号を指定する。この番号は数値で指定するわけだから、この番号を計算して決めることもできるのだ。今日は、配列の指定にこんな計算した番号を使う方法を試してみる。
まず最初に、お琴の「平調子」の音階の配列を作る。そしてこの配列から音を順番に取り出して見る。順番に取り出すわけだから、この順番の値(n)を計算で求めてみる。方法は「
ドリトル」の繰り返し構文を使って、nの値を+1づつ増やしていくだけだ。
そして、一番上の13番目の音まできたら、今度は逆に-1を加えて順番を下げていくことにする。
この「13番目の音まできたら」という処理をするのが、
条件判定の構文だ。書き方はこうだ。
「判定条件」!なら「条件が真の時の処理」実行。今日はもう一つ。
文字列の連結というのを使ってみる。文字列の連結の書き方はこうだ。
"文字列"+"文字列"+ ・・・・・取り出した音に、"~"を連結して余韻の感じを出す。
こうして作ったメロディー(作品1)を、お琴の楽器オブジェクト(十三弦)を作って演奏させてみる。楽器(音色)の指定は、MIDIの
プログラムチェンジ番号を使う。(kotoは108番なのだが、コンピュータ上は0から始まるので-1している)
http://www2u.biglobe.ne.jp/~rachi/midinst.htm//--------- ここから ----------
平調子=配列!作る "ミ"入れる "↓ラ"入れる "↓シ"入れる "ド"入れる "ミ"入れる "ファ"入れる "ラ"入れる "シ"入れる" ↑ド"入れる "↑ミ"入れる "↑ファ"入れる "↑ラ"入れる "↑シ"入れる。
作品1=メロディ!作る。
n=1。m=1。「
作品1! ((平調子! (n) 見る)+("~")+("~"))追加。
n=(n+m)。「n>13」!なら「n=(13)。 m=(-1)。」実行。
」!26回 繰り返す。
十三弦=楽器! (108-1) 作る (作品1)設定 演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
「ミ・ラ・シ・ド・・・・・」とお琴の音が出れば成功だ。
ドリトルで配列を使ってみる
今日からはコンピュータに自動で作曲させることにチャレンジしてみる。最初に「
ドリトル」の
配列オブジェクトのついて、ちょっと説明する。
配列オブジェクトというのは、データや命令をちょうど整理棚にしまっておくような感じだ。整理棚全体が配列オブジェクトで、個々のデータや命令はこの整理棚の別々の引き出しに入れておく。で、この引き出しには
1番から順番に番号が付いていて、引き出しの中身を見る時は、どの引き出しを見るかをこの番号で指定する。
配列を使う場合も、まず配列のインスタンスを作成する。
整理棚に付ける名前=配列!作る。整理棚にデータや命令を入れるには次のようにする。
整理棚の名前!"データや命令" 入れる。データや命令は1番の引き出しから順番に入れられる。
この引き出しに入っているデータや命令を取り出す(中身を見る)時はこうする。
整理棚の名前! 引き出しの番号 見る。ということで、まずは音階を入れておく整理棚を作ってみる。この整理棚の引き出しには一つ一つの音程を順にしまっておく。そして、この引き出しから音程を順番に取り出して音階を作り、この音階の音を出してみることにする。
//--------- ここから ----------
音階=配列!作る。
音階! "ど"入れる "れ"入れる "み"入れる "ふぁ"入れる "そ"入れる "ら"入れる "し"入れる "↑ど"入れる。
作品=メロディ!作る。
作品! (音階! 1 見る)追加(音階! 2 見る)追加(音階! 3 見る)追加(音階! 4 見る)追加(音階! 5 見る)追加(音階! 6 見る)追加(音階! 7 見る)追加(音階! 8 見る)追加。
作品!演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
「ド・レ・ミ・ファ・ソ・ラ・シ・ド」と音が出れば成功だ。
ドリトルの選択メニューも使ってみる
昨日は、ラベル、スライダー、ボタンといったオブジェクトを使ってみたので、今日は
選択メニューのオブジェクトに挑戦だ。
どんなことに使うかというと、二人が演奏する楽器を選択メニューで選べるようにしようという寸法だ。
選択メニューのオブジェクトの作り方はこうだ。
選択メニューの名前=選択メニュー!作る 横size 縦size 大きさ x座標 y座標 位置。選択メニューの名前!『選択肢 1』書く『選択肢 2』書く・・・・『選択肢 n』書く。その他のGUIオブジェクトは、昨日までに使ったやつだ。で、プログラムはこんな感じになる。
//--------- ここから ----------
パート1=メロディ!作る。
パート1!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。
パート1!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。
パート2=メロディ!作る。
パート2!『AmAmAmAmEmEmEmEm7 AmAmAmAmEmEmEm7Em AmAmEm7EmAmAmEmEm AmAmEmAm DmDmDmDm』追加。
パート2!『↓AmA↑mAm7Am7AmAmDm7Dm7 AmAmAmAmEmEmEmEm』追加。
タイトル=ラベル!"STz ファイト!" 作る (赤)文字色 -200 200 位置。
ラベル1=ラベル!"そうたくん" 作る (緑)文字色 -300 90 位置。
ラベル2=ラベル!"たいきくん" 作る (緑)文字色 -100 90 位置。
早さ指定=スライダー!作る 88 値 文字出す -200 150 位置。
楽器名1=選択メニュー!作る 180 45 大きさ -300 50 位置。
楽器名1!『オルガン』書く『クラリネット』書く『トランペット』書く『クリスマスベル』書く。
楽器名2=選択メニュー!作る 180 45 大きさ -100 50 位置。
楽器名2!『ピアノ』書く『ギター』書く『ベル』書く『ベース』書く。
演奏ボタン=ボタン!『START』作る 100 50 位置。
演奏ボタン:動作=「
そうたくん=楽器!(楽器名1!(楽器名1!何番目)読む)作る (パート1)設定。
たいきくん=楽器!(楽器名2!(楽器名2!何番目)読む)作る (パート2)設定。
STz=バンド!作る (そうたくん) 追加 (たいきくん) 追加(早さ指定!値?) テンポ 演奏
」。
//--------- ここまで ----------
ちょっとは行数が増えたけど、それでもこんな短いプログラムでちょっと本格的なウィンドーズプログラムができあがる。
そして
実行!ボタンだ。
そうたくんとたいきくんから色んな楽器を担当してもらって合奏してもらいましょう。
ドリトルでGUI部品を使う
「
ドリトル」では、ボタン、選択メニュー、スライダーなどの、いわゆる
GUI部品を実行画面上に配置することができる。これらのGUI部品も、「ドリトル」では
オブジェクトだ。
今日は、こんな部品を使ってバンドの演奏をコントロールしてみたいと思う。これで、驚くほど簡単にウィンドーズっぽいプログラムができあがる。
まずは、表題を
ラベルオブジェクトを使って出してみる。
ラベルの名前=ラベル!"表示する文字" 作る (色)文字色 x座標 y座標 位置。次は、
スライダーオブジェクトを使って、演奏の早さを指定できるようにする。スライダーオブジェクトの作り方はこういうようにする。
スライダーの名前=スライダー!作る 初期値 値 文字出す x座標 y座標 位置。スライダーで指定した値は、次のようにして取得する。
スライダーの名前!値?最後は、実行ボタンの作り方だ。これは
ボタンオブジェクトを使う。
ボタンの名前=ボタン!『ボタンに表示する文字』作る x座標 y座標 位置。そしてボタンが押されると「
動作」という
メソッドが実行される。
ボタンの名前:動作=「実行する内容」。で、プログラムはこんな感じになる。
//--------- ここから ----------
パート1=メロディ!作る。
パート1!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。
パート1!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。
パート2=メロディ!作る。
パート2!『AmAmAmAmEmEmEmEm7 AmAmAmAmEmEmEm7Em AmAmEm7EmAmAmEmEm AmAmEmAm DmDmDmDm』追加。
パート2!『↓AmA↑mAm7Am7AmAmDm7Dm7 AmAmAmAmEmEmEmEm』追加。
そうたくん=楽器!『クラリネット』作る。
そうたくん!(パート1)設定。
たいきくん=楽器!『ギター』作る。
たいきくん!(パート2)設定。
STz=バンド!作る。
STz!(そうたくん) 追加 (たいきくん) 追加 。
タイトル=ラベル!"STz ファイト!" 作る (青)文字色 -200 200 位置。
早さ指定=スライダー!作る 88 値 文字出す -200 150 位置。
演奏ボタン=ボタン!『START』作る -100 50 位置。
演奏ボタン:動作=「STz! (早さ指定!値?) テンポ 演奏」。
//--------- ここまで ----------
タイトル=、早さ指定=、演奏ボタン=、演奏ボタン:動作=、というのが追加された部分だ。早さ指定の初期値は88に設定してある。GUI部品のオブジェクトを使えば、こんなに簡単にウィンドーズっぽいプログラムを作れる。
そして
実行!ボタンだ。
スライダーを動かして[START]ボタンを押す。 本当に演奏のテンポが変わるのを体験して欲しい。(演奏中のテンポの変更はできません)
ドリトルでコードを演奏させてみる
二人でバンドを組んだのはいいのだが、クラリネットとギターで同じメロディーを演奏してもあまり面白くない。そこ今日は、ギター担当のたいきくんにコードを刻んでもらう。
コードを作るには、
A , B , C , D , E , F , G というように楽譜と同じ要領で書ける。
m を付けてマイナーにしたり、
7 を付けてセブンスのコードにすることもできる。
パート1の楽譜に旋律、パート2の楽譜にコードを書いて、これを、そうたくんとたいきくんに各自の楽器で演奏してもらう。
//--------- ここから ----------
パート1=メロディ!作る。
パート1!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。
パート1!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。
パート2=メロディ!作る。
パート2!『AmAmAmAmEmEmEmEm7 AmAmAmAmEmEmEm7Em AmAmEm7EmAmAmEmEm AmAmEmAm DmDmDmDm』追加。
パート2!『↓AmA↑mAm7Am7AmAmDm7Dm7 AmAmAmAmEmEmEmEm』追加。
そうたくん=楽器!『クラリネット』作る。
そうたくん!(パート1)設定。
たいきくん=楽器!『ギター』作る。
たいきくん!(パート2)設定。
STz=バンド!作る。
STz!(そうたくん) 追加 (たいきくん) 追加 。
STz!演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
さて、ギターがちゃちゃちゃちゃと和音を刻んでくれたかな。
ドリトルのバンドオブジェクト
今日は「
ドリトル」のバンドオブジェクトを作ってみる。
バンドオブジェクトというのは、合奏するためにバンドのインスタンス(バンド名を付ける)を作って、このバンドに複数の演奏者に入ってもらい音楽を演奏してもらうというように考える。
バンドのインスタンスを作るにはこうする。
バンドの名前=バンド!作る。このバンドに仲間を集める処理はこうだ。
バンドの名前!(メンバー) 追加 ・・・・(メンバー) 追加 。そして、バンドに演奏させる。
バンドの名前!演奏。ということで、メンバー(そうたくん)の他に、もう一人、ギター担当のメンバー(たいきくん)に登場してもらう。
そして二人でSTzというバンドを組んでもらうことにする。
//--------- ここから ----------
さくら=メロディ!作る。
さくら!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。
さくら!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。
そうたくん=楽器!『クラリネット』作る。
そうたくん!(さくら)設定。
たいきくん=楽器!『ギター』作る。
たいきくん!(さくら)設定。
STz=バンド!作る。
STz!(そうたくん) 追加 (たいきくん) 追加 。
STz!演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
さくら~さくら~とクラリネットとギターで仲良く合奏できたかな。
ドリトルの楽器オブジェクト
今日は「
ドリトル」の
楽器オブジェクトを作ってみる。楽器オブジェクトというのは、言ってみれば楽器を演奏する奏者のインスタンスを作って、この奏者に楽譜を渡して、それを演奏してもらうというように考える。
奏者のインスタンスを作るにはこうする。
奏者の名前=楽器!『楽器名』作る。この奏者に楽譜を渡す処理はこうだ。
奏者の名前!(楽譜の名前)設定。そして、奏者に演奏させる。
奏者の名前!演奏。ということで、奏者(そうたくん)に楽器(クラリネット)を持たせて楽譜(さくら)を演奏してもらうことにする。
//--------- ここから ----------
さくら=メロディ!作る。
さくら!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。
さくら!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。
そうたくん=楽器!『クラリネット』作る。
そうたくん!(さくら)設定。
そうたくん!演奏。
//--------- ここまで ----------
そして
実行!ボタンだ。
さくら~さくら~とクラリネットの音が出れば成功だ。
ドリトルでMIDI
さて、「
ドリトル」でひとしきりタートルグラフィックもしてみたし、なんとなくオブジェクト指向の書き方もわかってきた。ということで、次は「ドリトル」で
MIDIを使った音楽の演奏に挑戦してみる。「ドリトル」では
MIDIだってオブジェクト指向だ。
「ドリトル」には、音楽関係のオブジェクトとして、
メロディー、
楽器、
バンドといったオブジェクトがある。各オブジェクトのイメージとしてはこんな感じだ。
メロディ ・・・・ 楽譜
楽器 ・・・・ 楽譜を演奏する奏者
バンド ・・・・ 奏者が集まって合奏
今日はまず簡単な楽譜を書いて(作って)みる。
楽譜というのは、音程と長さを指定してある記号が演奏する順番に並べて書いてあるものを言う。楽譜には色んな形式がある。学校で習ったような五線譜もあるし、琴の楽譜や、尺八の楽譜もある。楽譜といっても世の中には色んな形態があるのだ。見慣れた五線譜なんて、こんなたくさんの形式の一つでしかないのだ。楽譜の本質は要は「音程と長さが指定されている記号が演奏する順番に並んでいる」ということなのだ。
「ドリトル」の楽譜はこんな感じで書く。
音程を表す文字列 ・・・・ ド, レ, ミ,ファ,ソ,ラ,シ(半音は#か♭を付ける、↑↓で1オクターブ上げ下げ)
長さ表す文字列 ・・・・ 1,2,4,8,&,・,~(n分音符、&は付点、・は休符、~は長音)
まず最初に楽譜(メロディ)のインスタンスを作る。わかりやすいように「
作る」インスタンスに「さくら」という名前を付けてみる。
さくら=メロディ!作る。次に、この楽譜のインスタンスに音符を書いていく要領で音を「
追加」していく。
さくら!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。さくら!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。これで「さくら」という名前の楽譜ができた。では音を出してみる。楽譜(メロディのインスタンス)に「
演奏」してねっ、というメッセージ(命令)を送ると音が出るのだ。
さくら!演奏。例により、下のプログラムを編集画面に貼り付けるか、自分で編集画面に入力する。
//--------- ここから ----------
さくら=メロディ!作る。
さくら!『ラ~ラ~シ~~~ラ~ラ~シ~~~ラ~シ~↑ド~↓シ~ラ~シラファ~~~』追加。
さくら!『ミ~ド~ミ~ファ~ミ~ミド↓シ~~~』追加。
さくら!演奏。
//--------- ここまで ----------
「ドリトル」では、//以降はコメントとして扱われる。だからプログラムには//の行はコピーしてもいいししなくてもOKだ。
そして
実行!ボタンだ。
さくら~さくら~と音が出れば成功だ。
ドリトルの色指定、タイマー
「
ドリトル」では、色もオブジェクトだ。よく使う
8色は「黒、赤、緑、青、黄、紫、水、白」という変数で用意されている。
その他の色を作る時は、
色オブジェクトにRGBの値をメッセージとして送って色のインスタンスを作る。
作成するインスタンス名=色! 赤の値(0~255) 緑の値(0~255) 青の値(0~255) 作る。「ドリトル」には、
タイマーオブジェクトもある。タイマーオブジェクトは、一定時間一定間隔毎(時間と間隔の単位は秒)に、ブロックを繰り返し実行する。使い方はこうだ。
タイマーのインスタンス名=タイマー!作る。タイマーのインスタンス名! 間隔 時間 「ブロック(命令の並び)」実行。ということで、色とタイマーを使ってみたプログラム。図形を描いた後、10秒間、0.1秒間隔で、ランダムに図形の色を変化させてみる。
例により、下のプログラムを編集画面に貼り付けるか、自分で編集画面に入力する。
//--------- ここから ----------
ペン=タートル!作る。
ペン!ペンなし -200 0 位置 ペンあり。
i = 0。
「
ペン!(25 * sin(i)) 歩く (i * i) 右回り。
i = (i + 1)。
」!2200回 繰り返す。
時計 = タイマー!作る。
時計! 0.1 間隔 10 時間 「
線色=色!(random(255)) (random(255)) (random(255)) 作る。
ペン!(線色) 線の色。
」実行。
//--------- ここまで ----------
そして実行!ボタンだ。
ドリトルでちょっと複雑な図を描かせてみる
「
ドリトル」では、SIN、COS、といった
数学関数も他の言語と同じように使うことができる。計算式の書き方も一般的なプログラム言語とほとんど同じだ。
いうことで、今日はこんな関数と
繰り返し構文を使って、ちょっと複雑な図形を緑ペンに変身したタートルに描かせてみる。
例により、下のプログラムを編集画面に貼り付けるか、自分で編集画面に入力する。
//--------- ここから ----------
緑ペン=タートル!作る (緑)線の色。
緑ペン!ペンなし 200 200 位置 ペンあり。
i = 0。
「
緑ペン!5歩 歩く (90 * sin(i)) 右回り。
i = (i + 1)。
」
!3000回 繰り返す。
//--------- ここまで ----------
ぺんなし ペンあり というメッセージ(命令)は、タートルが移動するときにペンの軌跡を描くかどうかを指示する。
位置、というメッセージ(命令)は、タートルを指定の座標にポジショニングする命令だ。
そして実行!ボタンだ。
ドリトルの繰り返し構文はこう書く
プログラムでは、同じ動作を一定回数繰り返す構文がたいていはある。「
ドリトル」ではこんな感じだ。
「処理の並び」!n回 繰り返す。ということで、青ペンを作って四角形でも書いてみる。
例により、下のプログラムを編集画面に貼り付けるか、自分で編集画面に入力する。
//--------- ここから ----------
青ペン=タートル!作る (青)線の色。
「
青ペン!100歩 歩く 90 右回り
」
!4回 繰り返す。
//--------- ここまで ----------
そして
実行!ボタンだ。
ドリトルはオブジェクト指向言語
「
ドリトル」は
オブジェクト指向の言語だ。何でもオブジェクトとして扱う。LOGO譲りの、タートルグラフィックを描いてくれる亀さん(タートル)もオブジェクトだ。
オブジェクト指向の言語では、この
オブジェクトに
メッセージ(まー、命令です)を送ることでプログラムを作っていく。
「ドリトル」では、タートル、タイマー、ボタンなどのオブジェクトがはじめから用意されている。各々のオブジェクトは
値(初期値)と
能力(どんなことができるか)を持っている。
タートルオブジェクトは、黒という色の値(のペン)を最初から持っていて、ペンを持っている状態(ぺんあり)のタートルに歩くというメッセージ(命令)を送ると黒い線で軌跡が残る。
オブジェクト指向言語の最大の特徴は、この
オブジェクトを複数作ることができることだ。そのために、オブジェクトに何かをさせる場合は、まずオブジェクトの分身(
インスタンスと言うんだけど、こうれはどうでもいいです)を作らないといけない。そして、この分身を区別するために名前を付ける。
これは、実際は次のようにして行うのだ。「
タートルという名前の
オブジェクトに
作るというメッセージを送る」プログラムを書く。
オブジェクトにメッセージを送るやり方(文法)は次のようになっている。
オブジェクト!引数… 命令。タートルというオブジェクトに黒ペンという名前を付けて分身を作るプログラムは、従ってこうなる。
黒ペン=タートル!作る。黒ペンが分身(インスタンス)の名前、タートルがオブジェクトの名前、作るがメッセージ(命令)だ。
分身ができたら、この分身にメッセージ(命令)を送ることができるようになる。
黒ペン!100歩 歩く。100歩が引数(パラメータ)、歩くがメッセージ(命令)だ。
これで、前回書いたプログラムの構造(文法)が一応わかったと思う。ということで、今日はちょっとだけ、これを発展させる。
分身はいくつでも作ることができるから、黒ペンの他に、赤ペンを作ってみる。
赤ペン=タートル!作る (赤)線の色。(赤)というのが引数で線の色がメッセージ(命令)だ。オブジェクトに送るメッセージは、このように複数書くこともできる。(メッセージのカスケード)
タートルの初期値は右向きになっているから、赤ペン方を90度左回転させて上向きにして歩かせてみる。
ということで、下のプログラムを
編集画面に貼り付けるか、自分で編集画面に入力してください。(自分で書いた方が覚えるかも)
//--------- ここから ----------
黒ペン=タートル!作る。
赤ペン=タートル!作る (赤)線の色。
黒ペン!100歩 歩く。
赤ペン!90度 左回り 100歩 歩く。
//--------- ここまで ----------
実行!ボタンを押すと下のような実行画面が出ると思う。