ユーザ用ツール

サイト用ツール


ch_music

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
ch_music [2018/01/04 00:36] – 作成 kanemunech_music [2018/02/09 11:06] (現在) klab
行 1: 行 1:
 +#  音楽の演奏
 +
 +ドリトルでは**MIDI音源**((MIDIはコンピュータで音楽を演奏するための規格。)) を使った楽器演奏を行える。演奏する**メロディ**は、「どれみー」といった分かりやすい形で記述する。**コード**による伴奏と**ドラム**による打楽器演奏を合わせて、**バンド**やオーケストラのような合奏が可能である。
 +
 +
 +
 +##  メロディの演奏
 +
 +メロディを演奏するには、譜面に相当する**メロディオブジェクト**に**旋律**を書き込み、それを演奏する。次のプログラムでは、「きらきらぼし」という名前のメロディオブジェクトを生成し、「"..."」の形で旋律を**追加**してから、メロディオブジェクトに**演奏**させている。音符を記述する「"..."」の部分は、「『...』」という記号で囲んでもよい。楽譜に演奏を指示すると、標準の楽器である**ピアノ**を使った演奏が行われる。
 +
 +<code>
 + きらきらぼし=メロディ!作る。
 + きらきらぼし!"ドドソソララソ〜ファファミミレレド〜" 追加。
 + きらきらぼし!"ソソファファミミレ〜ソソファファミミレ〜" 追加。
 + きらきらぼし!"ドドソソララソ〜ファファミミレレド〜" 追加。
 + きらきらぼし!演奏。
 +</code>
 +
 +
 +
 +##  メロディの記述
 +
 +メロディには、「ドレミ」 といった音階に加えて、数字や記号で細かい指定を行える。
 +
 +オクターブ上に移るときは 「^」 を、オクターブ下に移るときは 「_」 を指定する。ひとつの音だけでなく、それ以降がすべてオクターブ上(または下)になる。音を伸ばすときは 「〜」 や 「ー」 で指定する。音の後ろに 1, 2, 4, 8, 16 といった数字を書くことで、それぞれ全音符、二分音符、四分音符、八分音符、十六分音符を指定することもできる。
 +
 +次のプログラムは、これらを使ったサンプルである。
 +
 +<code>
 + きらきらぼし=メロディ!作る。
 + きらきらぼし!"ド・ドソ^ ソララソ〜_ファファ1ミ2ミ4レレ8ド〜" 追加。
 + きらきらぼし!演奏。
 +</code>
 +
 +
 +
 +##  楽器の指定
 +
 +標準のピアノ以外に、いくつかの楽器を指定して演奏できる。あらかじめ、いくつかの楽器が用意されている(**obj_instrument** )。次のプログラムでは、楽器をオルガンに設定して演奏している。
 +
 +<code>
 + きらきらぼし=メロディ!作る。
 + きらきらぼし!"ドドソソララソ〜ファファミミレレド〜" 追加。
 + きらきらぼし!"ソソファファミミレ〜ソソファファミミレ〜" 追加。
 + きらきらぼし!"ドドソソララソ〜ファファミミレレド〜" 追加。
 + きらきらぼし!(楽器!"オルガン" 作る)設定。
 + きらきらぼし!演奏。
 +</code>
 +
 +
 +次のプログラムでは、「メロディ欄」という名前の**フィールド**オブジェクトを作り、そこに初期値として「ドドソソララソ〜ファファミミレレド〜」という旋律を入れている。この旋律は実行中にキーボードから修正することができる。続いて「楽器名」という名前の**選択メニュー**オブジェクトを作り、ピアノ、オルガン、ギター、トランペット、ベルを設定している。最後に「実行ボタン」という名前の**ボタン**オブジェクトを作り、ボタンを押したときに「メロディ欄」に書かれた旋律を「楽器名」で指定された楽器で演奏する。
 +
 +{{:pasted:20180103-154908.png}}
 +
 +<code>
 + メロディ欄=フィールド!作る 600 45 大きさ。
 + メロディ欄!"ドドソソララソ〜ファファミミレレド〜" 書く。
 + 楽器選択=選択メニュー!"ピアノ" "オルガン" "ギター" "トランペット" "ベル" 作る 次の行。
 + バンド1=バンド!作る。
 + 楽器選択:動作=「|楽器名|
 +  選んだ楽器=楽器!(楽器名)作る。
 +  主旋律=メロディ!作る(メロディ欄!読む)追加(選んだ楽器)設定。
 +  主旋律!演奏。
 + 」。
 +</code>
 +
 +
 +
 +##  音楽の構造をプログラムする
 +
 +「きらきらぼし」 のメロディをもう一度見てみよう。
 +
 +<code>
 + きらきらぼし=メロディ!作る。
 + きらきらぼし!"ドドソソララソ〜ファファミミレレド〜" 追加。
 + きらきらぼし!"ソソファファミミレ〜ソソファファミミレ〜" 追加。
 + きらきらぼし!"ドドソソララソ〜ファファミミレレド〜" 追加。
 + きらきらぼし!演奏。
 +</code>
 +
 +メロディの部分をよく見ると、次のような**曲の構造**があることが分かる。
 +  * 「ドドソソララソ〜ファファミミレレド〜」 という同じ旋律が、最初と最後に出てきている。 (Aメロディと呼ぶことにする)
 +  * 「ソソファファミミレ〜ソソファファミミレ〜」 という2番目の旋律は、「ソソファファミミレ〜」 が2回繰り返されている。(Bメロディと呼ぶことにする)
 +
 +これを整理すると、「きらきらぼし」 という曲は、次のような構造を持っていることが分かる。
 +<code>
 + Aメロディ
 + Bメロディが2回
 + Aメロディ
 +</code>
 +
 +分かりやすいように、プログラムの最初で 「Aメロディ」 と「Bメロディ」 という**変数**を定義すると、次のように書ける。
 +
 +<code>
 + // 変数の定義
 + Aメロディ="ドドソソララソ〜ファファミミレレド〜"
 + Bメロディ="ソソファファミミレ〜"
 + 
 + // 演奏
 + きらきらぼし=メロディ!作る。
 + きらきらぼし!(Aメロディ)追加。
 + きらきらぼし!(Bメロディ)追加(Bメロディ)追加。
 + きらきらぼし!(Aメロディ)追加。
 + きらきらぼし!演奏。
 +</code>
 +
 +2個の 「Bメロディ」 を**繰り返し**で書くと、次のようになる。
 +
 +<code>
 + // 変数の定義
 + Aメロディ="ドドソソララソ〜ファファミミレレド〜"
 + Bメロディ="ソソファファミミレ〜"
 + 
 + // 繰り返しを使った演奏
 + きらきらぼし=メロディ!作る。
 + きらきらぼし!(Aメロディ)追加。
 + 「きらきらぼし!(Bメロディ)追加」!2回 繰り返す。
 + きらきらぼし!(Aメロディ)追加。
 + きらきらぼし!演奏。
 +</code>
 +
 +
 +<code>
 + // 変数の定義
 + Aメロディ="ドドソソララソ〜ファファミミレレド〜"
 + Bメロディ="ソソファファミミレ〜"
 + きらきらぼし=メロディ!作る。
 + 
 + // 繰り返しと条件分岐を使った演奏
 + 「|Aメロ回数|
 +   きらきらぼし!(Aメロディ)追加。
 +   「Aメロ回数==1」!なら「
 +     「きらきらぼし!(Bメロディ)追加」!2回 繰り返す。
 +   」実行。
 + 」!2回 繰り返す。
 + きらきらぼし!演奏。
 +</code>
 +
 +この例で見たように、多くの曲では、ひとつの曲の中にいくつかのメロディの断片が繰り返して含まれている。音楽をプログラムで演奏する際には、単に楽譜を入力するのではなく、曲の構造をうまく見つけてプログラムで表現することが大切である。
 +
 +
 +
 +##  メロディの合奏
 +
 +同じメロディを何拍かずらして演奏することで、輪唱を演奏できる。次のプログラムでは、「かえる2」 というメロディの先頭に8拍の**無音**を入れ、続けて 「かえる1」 というメロディを加えている。そして、「かえる1」 と 「かえる2」 を同時に演奏している。
 +
 +**バンド**オブジェクトを使うと、複数のメロディを演奏することができる。次のプログラムでは、「輪唱」 というバンドオブジェクトを作り、バンドのメンバーとして、「かえる1」 と 「かえる2」 を追加している。輪唱を演奏すると、「かえる1」 と 「かえる2」 が同時に演奏される。
 +
 +<code>
 + かえる1=メロディ!作る。
 + かえる1!"ドレミファミレド〜ミファソラソファミ〜" 追加。
 + かえる1!"ド・ド・ド・ド・ド8ド8レ8レ8ミ8ミ8ファ8ファ8ミレド〜" 追加。
 + かえる2=メロディ!作る 8 無音 (かえる1)追加。
 + 輪唱=バンド!作る (かえる1)追加 (かえる2)追加。
 + 輪唱!演奏。
 +</code>
 +
 +
 +
 +##  楽器を変えて演奏する
 +
 +標準の楽器であるピアノ以外にも楽器が用意されている。先ほどの輪唱プログラムは、ピアノ2台だったので2つのメロディの区別がつきにくかった。ここでは1台の楽器を**オルガン**に変えて演奏してみる。次のプログラムでは、「オルガン1」という名前の**楽器**オブジェクトを作り、「かえる2」に**設定**して演奏している。
 +
 +<code>
 + かえる1=メロディ!作る。
 + かえる1!"ドレミファミレド〜ミファソラソファミ〜" 追加。
 + かえる1!"ド・ド・ド・ド・ド8ド8レ8レ8ミ8ミ8ファ8ファ8ミレド〜" 追加。
 + かえる2=メロディ!作る 8 無音 (かえる1)追加。
 + オルガン1=楽器!"オルガン" 作る。
 + かえる2!(オルガン1)設定。
 + 輪唱=バンド!作る (かえる1)追加 (かえる2)追加。
 + 輪唱!演奏。
 +</code>
 +
 +
 +楽器は1〜128で表されるMIDIの楽器番号((**ch_reference** を参照。)) で指定することもできる。次のプログラムでは、**乱数**で楽器を指定している。実行するたびに、異なる楽器で演奏される。乱数のような数式は、括弧(…) で囲んで記述する。
 +
 +<code>
 + かえる=メロディ!作る。
 + かえる!"ドレミファミレド〜ミファソラソファミ〜" 追加。
 + 私の楽器=楽器!(乱数(128))作る。
 + かえる!(私の楽器)設定。
 + かえる!演奏。
 +</code>
 +
 +
 +
 +##  楽譜からの入力
 +
 +音楽の楽譜を見ながら、曲を入力してみよう。
 +
 +{{ :gakufu1hara.pdf|楽譜説明(1) }}
 +{{ :gakufu2hara.pdf|楽譜説明(2) }}
 +
 +##  リズム
 +
 +打楽器のリズムを演奏するには、**ドラム**オブジェクトを使用する。使い方はメロディオブジェクトなどと同様である。音階の代りに、「ドツタツドツタツ」といったリズムを記述する。
 +
 +次のプログラムでは、最初に「きらきらぼし」という名前のメロディオブジェクトを作り、続いて「きらりずむ」という名前のドラムオブジェクトを作っている。「ドツタツ」といった表記は、「ド」がバスドラ、「ツ」がハイハットなど、それぞれがドラムで使われる楽器を表す。メロディと違って、音の長さは半拍である。詳しくは**ch_reference** を参照してほしい。最後にバンドオブジェクトを作り、「きらきらぼし」と「きらりずむ」を追加して演奏している。
 +
 +<code>
 + きらきらぼし=メロディ!"ドドソソララソ~ファファミミレレド~" 作る。
 + きらりずむ=ドラム!"ドツタツドツタツドツタツドタタツドツタツドツタツドツタツクチパン" 作る。
 + バンド!作る(きらきらぼし)追加(きらりずむ)追加 60 テンポ 演奏。
 +</code>
 +
 +
 +もちろん、バンドに名前を付けることもできる。次のプログラムでは「マイバンド」という名前のバンドを作り演奏している。
 +
 +<code>
 + きらきらぼし=メロディ!"ドドソソララソ~ファファミミレレド~" 作る。
 + きらりずむ=ドラム!"ドツタツドツタツドツタツドタタツドツタツドツタツドツタツクチパン" 作る。
 + マイバンド=バンド!作る。
 + マイバンド!(きらきらぼし)追加(きらりずむ)追加。
 + マイバンド!60 テンポ 演奏。
 +</code>