「サクラ」でアルゴリズム作曲 - 2.1 -
この間から書いている「サクラ」でアルゴリズム作曲シリーズには、「
サクラ」で演奏させたものをデジタル録音して
MP3にしたデータを載せてある。
このMP3を聴いて「自分のパソコンで演奏したのと音が違うなー」と思った方もいるのではないかと思う。確かに、パソコンの内蔵音源よりちょっと響きの良い音がするはずだ。
実は、この録音、パソコンの内蔵音源ではく、
SoundFontを使って音を出したものを録音している。
SoundFontは、フリーで使えるものがたくさん公開されていて、今まで使ってきた、
GM/GSのセット物(これは内蔵音源の代わりとしてそのまま音色セットが使える)の他、ピアノやフルートといった単独の楽器のSoundFontもある。
GM/GSのセット物のSoundFontでもも容量が2MBぐらいのものから、100MBを超えるものまで、様々なものがある。今まで使ってきたのは、20~30MB程度のSoundFontだ。
このSoundFont、理屈の上では容量が大きいほど音がいいと思うのだが、SoundFontの作り方はなかなか難しいらしく、この辺のことは微妙な問題だ。
今日は、昨日使ったGM/GSのセット物のSoundFontでなく、ピアノのSoundFontとフルートのSoundFontを組み合わせて演奏させたものを載せてみるので、ちょっと聞き比べて欲しい。
SoundFontプレーヤとしては、有名な
sfz(VSTi版をSavihostを使ってスタンドアロンアプリにしたもの)を使っている。このsfzを2台並べて(各々にフルートとピアノのSoundFontをセットしてある)演奏させてみた。
sfz
http://www.rgcaudio.com/sfz.htm明日は、こんな感じで「サクラ」で複数のソフト音源を使って演奏させる方法について書いてみたいと思う。、
「サクラ」でアルゴリズム作曲 - 2 -
今日は、昨日やった楽器の変更にちょっと手を加えて三章からなる曲を作ってみる。題して「フルートとピアノのための三章」。
昨日は、前半と後半で音符の種類を変えて変化を付けてみたのだが、今日は
Tempoの指定を変えて変化を作ってみる。一章をTempo=120、二章をTempo=80、三章をTempo=160に設定してみた。
三章にする部分は繰り返し構文( [3 ~~] )でやっているのだが、各章の切り分けは
SWITCH()コマンドを使ってやってみた。
SWITCH()
http://oto.chu.jp/doc/command/127.htmもう一つ、楽器の音域を決めるためのパラメータ(BoN)を加えた。これにより中央「ド」を中心に発生させていた音を、指定の半音数分上下に移動させることができる。
関数
Compose(BoN,RoN,NoN,LoN)BoN・・・・中央「ド」からどのぐらい離れた音程で音を生成するかを指定
RoN・・・・中央「ド」を中心にどのぐらいの範囲で音を生成するかを指定
NoN・・・・音をいくつ作るかを指定
LoN・・・・音符の種類(セット)を指定
//_ フルートとピアノのための三章Function Compose(BoN,RoN,NoN,Array LoN){ STR ML={} [(NoN) ML=ML+{n(}+(NoteNo(ド)+BoN+Random(RoN)-RoN/2)+{)}+RandomSelect(LoN) ] Result=ML}TR(1) P(100) V(120) REV(080) q080 音色(Flute)TR(2) P(020) V(100) REV(100) q100 音色(GrandPiano)TR(3) P(020) V(100) REV(100) q100 音色(GrandPiano)INT Pos INT N=0[3 N++ #Part1=Compose(24,16,50,(1,2,4,8)) #Part2=Compose(0,50,50,(1,2,4,8)) #Part3=Compose(0,50,50,(1,2,4,8)) SWITCH(N){ CASE(1){Tempo(120)} // 一章 CASE(2){Tempo(80)} // 二章 CASE(3){Tempo(160)} // 三章 } TR(1) #Part1 TR(2) #Part2 TR(3) #Part3 Pos=Time TR(1) Time(Pos) r1r1 TR(2) Time(Pos) r1r1 TR(3) Time(Pos) r1r1]//_______ ここまで _______________参考:「ドリトル」による「フルートとピアノのための三章」
http://mugen-blog.blogspot.com/2006/04/oom02.html
「サクラ」でアルゴリズム作曲 - 01.2 -
昨日ちょっとV-UPした「2台のピアノのための dialogue」がなかなかいい感じなので、他の楽器でやってみたらどなるかを試してみた。
Part1をビオラ、Part2をチェロでやってみる。
//_ ビオラとチェロのための dialogueFunction Compose(RoN,NoN,Array LoN){ STR ML={} [(NoN) ML=ML+{n(}+(NoteNo(ド)+Random(RoN)-RoN/2)+{)}+RandomSelect(LoN) ] Result=ML}TR(1) P(000+20) REV(100) q100 音色(Viola)TR(2) P(127-20) REV(100) q100 音色(Cello)#Part1=Compose(40,40,(1,2,4,8))#Part2=Compose(40,40,(1,2,4,8))TR(1) #Part1 TR(2) #Part2Int Pos=Time TR(1) Time(Pos) r1r1 TR(2) Time(Pos) r1r1#Part1=Compose(40,160,(2,4,8,8,16,16))#Part2=Compose(40,160,(2,4,8,8,16,16))TR(1) #Part1 TR(2) #Part2//_______ ここまで _______________
「サクラ」でアルゴリズム作曲 - 01.1 -
「
サクラ」でアルゴリズム作曲の最初の作品「2台のピアノのための dialogue」は、これから始めるシリーズの基本となる関数を定義してある。今日は今後のことも考えて、この関数をちょっとバージョンアップしてみる。
「サクラ」の関数は、
配列(Array)をパラメータとして渡すことができる。そこで、関数 Compose() にパラメータを追加して、生成する音符の種類をパラメータで指定できるようにしてみた。
関数
Compose(RoN,NoN,LoN)RoN・・・・中央「ド」を中心にどのぐらいの範囲で音を生成するかを指定
NoN・・・・音をいくつ作るかを指定
LoN・・・・音符の種類(セット)を指定
ここまでいけば、関数 Compose() も色々と応用が可能だ。作品をちょっと変更して、前半と後半に分け、後半部分は、8部音符と16部音符が多く出現するようにして変化を付けてみた。
//_ 2台のピアノのための dialogueFunction Compose(RoN,NoN,Array LoN){ STR ML={} [(NoN) ML=ML+{n(}+(NoteNo(ド)+Random(RoN)-RoN/2)+{)}+RandomSelect(LoN) ] Result=ML}TR(1) P(000+20) REV(100) q100 音色(GrandPiano)TR(2) P(127-20) REV(100) q100 音色(GrandPiano)#Part1=Compose(50,40,(1,2,4,8))#Part2=Compose(50,40,(1,2,4,8))TR(1) #Part1 TR(2) #Part2Int Pos=Time TR(1) Time(Pos) r1r1 TR(2) Time(Pos) r1r1#Part1=Compose(60,160,(2,4,8,8,16,16))#Part2=Compose(60,160,(2,4,8,8,16,16))TR(1) #Part1 TR(2) #Part2//_______ ここまで _______________
「サクラ」でアルゴリズム作曲 - 01 -
「
サクラ」のすばらしいところは、単なるMMLコンパイラーではなく、自分で関数を定義できたり、一般のプログラミング言語にあるような制御構造が使えたりするところにある。要するに、音楽制作のためのプログラミング言語なのだ。
「サクラ」の開発者(クジラ飛行机さん)による説明
http://journal.mycom.co.jp/column/nihongoprog/039/このプログラミング機能を使えば、コンピュータに自動的に作曲させる「
アルゴリズム作曲」や乱数を使った「
偶然性の音楽」といった「
実験音楽」的なことが簡単にできるのだ。
そこで、今日からは、前にオブジェクト指向の日本語プログラミング言語「ドリトル」を使ったやってみた「実験音楽」シリーズの「アルゴリズム作曲」を「サクラ」を使ってやってみることにする。
「サクラ」では「ドリトル」より細かなMIDIのコントロールが可能なので、「ドリトル」シリーズをちょっとだけ変更して、表現力を多少は上げるようにしてみる。それと、各々の曲で使っているアルゴリズムの部分(関数になっている場合が多いと思う)の解説を簡単に付けることにする。最後に、MP3で録音したものも掲載するので、実際に聴いて楽しんで?もらいたいと思う。
最初の曲は、「2台のピアノのための dialogue」だ。
この曲は、関数
Compose(RoN,NoN) で曲を生成している。
RoN・・・・中央「ド」を中心にどのぐらいの範囲で音を生成するかを指定
NoN・・・・音をいくつ作るかを指定
音符の長さは、1,2,4,8部音符を均等に生成するようになっている。
//_ 2台のピアノのための dialogue
Function Compose(RoN,NoN){
STR ML={}
[(NoN)
ML=ML+{n(}+(NoteNo(ド)+Random(RoN)-RoN/2)+{)}+RandomSelect(1,2,4,8)
]
Result=ML
}
#Part1=Compose(50,200)
#Part2=Compose(50,200)
TR(1) P(000+20) REV(80) @(GrandPiano) #Part1
TR(2) P(127-20) REV(80) @(GrandPiano) #Part2
//_______ ここまで _______________
参考:「ドリトル」による「2台のピアノのための dialogue」
http://mugen-blog.blogspot.com/2006/04/blog-post_17.html
「サクラ」でMML演習5(続き-5)
昨日やってみたように、人の声を内蔵音源で演奏させるにやはり無理なところもあるので、今日はサンプリング音源の
SoundFontを使って演奏させてみる。
方法は、「
サクラ」のMIDI出力を、MIDI-Yokeを使って中継し、sfz(SoundFont Player)を使って鳴らすというものだ。
MIDI Yoke Junction
http://www.midiox.com/index.htm?http://www.midiox.com/myoke.htmsfz
http://www.rgcaudio.com/sfz.htm//_______ ここから _______________
Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N Int N1 Int N2 Int PanR=20 Int PanL=100 Int Pos Int Vol=38
Function SwingS(DF){
STR ML={} [2
ML=ML+O5(0+DF)+{4.}+O5(1+DF)+{8}+O5(2+DF)+{4.}+O5(3+DF)+{8}
ML=ML+O5(4+DF)+{4.}+O5(3+DF)+{8}+O5(2+DF)+{4.}+O5(1+DF)+{8}
] ML=ML+O5(0+DF)+{1}
Result=ML
}
Function SwingR(DF){
#ML1={} #ML2={}[8
N1=Random(0,5) N2=Random(0,5)
#ML1=#ML1+O5(N1)+{4.}+O5(N2)+{8}
#ML2=#ML2+O5(N1+DF)+{4.}+O5(N2+DF)+{8}
]
N=Random(0,5)
#ML1=#ML1+O5(N)+{1} #ML2=#ML2+O5(N+DF)+{1}
Result=#ML1
}
#ML=SwingS(0)
TR(1) v(Vol) o6 [1 #ML]
#ML=SwingR(0)
TR(1) v(Vol) o5 [1 #ML]
Pos=Time TR(2) Time(Pos)
#ML1=SwingS(0) #ML2=SwingS(1)
TR(1) v(Vol) P(PanR) o6 [1 #ML1]
TR(2) v(Vol) P(PanL) o5 [1 #ML2]
SwingR(1)
TR(1) v(Vol) P(PanR) o6 [1 #ML1]
TR(2) v(Vol) P(PanL) o5 [1 #ML2]
#ML1=SwingS(0) #ML2=SwingS(3)
TR(1) v(Vol) P(PanR) o6 [1 #ML1]
TR(2) v(Vol) P(PanL) o5 [1 #ML2]
SwingR(3)
TR(1) v(Vol) P(PanR) o6 [1 #ML1]
TR(2) v(Vol) P(PanL) o5 [1 #ML2]
//_______ ここまで _______________
SoundFontの声にはビブラートがかかっているので、「素敵な即興演奏講座5」で言っている「ふるえ」に相当するかどうかはわからないが、かなりいい感じに聞こえる。「ずり下がり」については、sfzではうまく再現できなかったので、プログラムから除いてある。
「サクラ」でMML演習5(続き-4)
今日は、ピアノのための「素敵な即興演奏講座5」の歌の部分を「
サクラ」のMMLでやてみる。「素敵な即興演奏講座5」の内容については、20日のエントリーを参照してください。
実は、人の歌声をMIDIで再現するのはとても難しい。人間の声というのは非常に複雑で微妙なニュアンスがある。ということで、シンセで音を作るのも難しい。とりあえず、内蔵音源のSynthVoiceでやってみることにする。
「素敵な即興演奏講座5」で要求されている下記の部分をなんとか再現できるように「サクラ」のMMLを作ってみた。
====== ==================== ======フレーズを。歌う時のポイントとしては、各音と音の間に「ずり上がり」「ずり下がり」を入れてください。次の音に移る時にはっきりと移動するのではなく、経過的に滑らかに上下してください。そして伸ばした音には「ふるえ」を入れてください。====== ==================== ======まず、「ずり上がり」「ずり下がり」については、記号「
&」を使って
スラー(モード0)で再現してみた。「ふるえ」については、終止の伸ばす音の部分に
モジュレーションをかけてある。
//_______ ここから _______________
Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N Int N1 Int N2 Int PanR=20 Int PanL=100 Int Pos Int Vol=100
Function SwingS(DF){
STR ML={} [2
ML=ML+O5(0+DF)+{4.&}+O5(1+DF)+{8&}+O5(2+DF)+{4.&}+O5(3+DF)+{8&}
ML=ML+O5(4+DF)+{4.&}+O5(3+DF)+{8&}+O5(2+DF)+{4.&}+O5(1+DF)+{8&}
] ML=ML+{M.W(0,0,!4,0,120,!2.)}+O5(0+DF)+{1}+{M(0)}
Result=ML
}
Function SwingR(DF){
#ML1={} #ML2={}[8
N1=Random(0,5) N2=Random(0,5)
#ML1=#ML1+O5(N1)+{4.&}+O5(N2)+{8&}
#ML2=#ML2+O5(N1+DF)+{4.&}+O5(N2+DF)+{8&}
]
N=Random(0,5)
#ML1=#ML1+{M.W(0,0,!4,0,120,!2.)}+O5(N)+{1}+{M(0)}
#ML2=#ML2+{M.W(0,0,!4,0,120,!2.)}+O5(N+DF)+{1}+{M(0)}
Result=#ML1
}
TR(1) 音色(SynthVoice)
TR(2) 音色(SynthVoice)
#ML=SwingS(0)
TR(1) v(Vol) o5 [1 #ML]
#ML=SwingR(0)
TR(1) v(Vol) o5 [1 #ML]
Pos=Time TR(2) Time(Pos)
#ML1=SwingS(0) #ML2=SwingS(1)
TR(1) v(Vol) P(PanR) o5 [1 #ML1]
TR(2) v(Vol) P(PanL) o4 [1 #ML2]
SwingR(1)
TR(1) v(Vol) P(PanR) o5 [1 #ML1]
TR(2) v(Vol) P(PanL) o4 [1 #ML2]
#ML1=SwingS(0) #ML2=SwingS(3)
TR(1) v(Vol) P(PanR) o5 [1 #ML1]
TR(2) v(Vol) P(PanL) o3 [1 #ML2]
SwingR(3)
TR(1) v(Vol) P(PanR) o5 [1 #ML1]
TR(2) v(Vol) P(PanL) o3 [1 #ML2]
//_______ ここまで _______________
内蔵音源で演奏させるにはょっと無理なところもあるが、まー、それっぽく聞こえます。
「サクラ」でMML演習5(続き-3)
今日は、ピアノのための「素敵な即興演奏講座5」を「
サクラ」のMMLで通しでやってみる。
ほとんど今までのものと同じなのだが、微妙に変えたところもあります。「素敵な即興演奏講座5」の内容については、20日のエントリーを参照してください。
//_______ ここから _______________
Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N Int N1 Int N2 Int PanR=70 Int PanL=50 Int Pos
Function SwingS(DF){
STR ML={} [2
ML=ML+O5(0+DF)+{4.}+O5(1+DF)+{8}+O5(2+DF)+{4.}+O5(3+DF)+{8}
ML=ML+O5(4+DF)+{4.}+O5(3+DF)+{8}+O5(2+DF)+{4.}+O5(1+DF)+{8}
] ML=ML+O5(0+DF)+{1}
Result=ML
}
Function SwingR(DF){
#ML1={} #ML2={}[8
N1=Random(0,5) N2=Random(0,5)
#ML1=#ML1+O5(N1)+{4.}+O5(N2)+{8}
#ML2=#ML2+O5(N1+DF)+{4.}+O5(N2+DF)+{8}
]
N=Random(0,5)
#ML1=#ML1+O5(N)+{1} #ML2=#ML2+O5(N+DF)+{1}
Result=#ML1
}
TR(1) @(GrandPiano) q120
TR(2) @(GrandPiano) q120
//_ Part 1
#ML={} N=0 [4 #ML=#ML+O5(N)+{2} N++] #ML=#ML+O5(4)+{1}
TR(1) [1 #ML] // ☆
#ML={} N=4 [4 #ML=#ML+O5(N)+{2} N--] #ML=#ML+O5(0)+{1}
TR(1) [1 #ML] // ★
#ML=SwingS(0)
TR(1) P(PanR) [1 #ML]
#ML=SwingR(0)
TR(1) P(PanR) [1 #ML]
//_ Part 2
Pos=Time TR(2) Time(Pos)
#ML1=SwingS(0) #ML2=SwingS(1)
TR(1) P(PanR) o5 [1 #ML1]
TR(2) P(PanL) o4 [1 #ML2]
SwingR(1)
TR(1) P(PanR) o5 [1 #ML1]
TR(2) P(PanL) o4 [1 #ML2]
#ML1=SwingS(0) #ML2=SwingS(3)
TR(1) P(PanR) o5 [1 #ML1]
TR(2) P(PanL) o3 [1 #ML2]
SwingR(3)
TR(1) P(PanR) o5 [1 #ML1]
TR(2) P(PanL) o3 [1 #ML2]
//_ Part 3
#ML1={} N=0 [5 #ML1=#ML1+O5(N) N++]
#ML2={} N=4 [5 #ML2=#ML2+O5(N) N--]
TR(1) P(PanR)
[1 ペダル N=5 [4 o(N) l16 #ML1 N++] N=8 [4 o(N) l16 #ML2 N--] r1 放す]
Pos=Time TR(2) Time(Pos)
#ML1=SwingR(0)
#ML2={'}+O5(0)+O5(1)+O5(2)+O5(3)+O5(4)+{'}
TR(1) P(PanR) o7
[1 ペダル #ML1 放す]
TR(2) P(PanR) o5
[1 ペダル q127 l1 #ML2^^^^ 放す]
#ML1=SwingR(0)
#ML2={'}+O5(3)+O5(4)+O5(5)+O5(6)+O5(7)+{'}
TR(1) P(PanR) o6
[1 ペダル q127 l1 #ML2^^^^ 放す]
TR(2) P(PanR) o5
[1 ペダル #ML1 放す]
#ML1=SwingR(0)
#ML2={'}+O5(0)+O5(1)+O5(2)+O5(3)+O5(4)+{'}
TR(1) P(PanR) o6
[1 ペダル #ML1 放す]
TR(2) P(PanR) o5
[1 ペダル q127 l1 #ML2^^^^ 放す]
#ML={} N=1 [4 #ML=#ML+O5(N)+{16} N++] #ML=#ML+O5(5)+{1}
TR(1) P(PanR) o6
ペダル r2 #ML r1 放す
//_______ ここまで _______________
あえて、ロジックで書いたのでプログラムがちょっと長くなってしまいましたが、聞いてみてください。
「サクラ」でMML演習5(続き-2)
今日は、ピアノのための「素敵な即興演奏講座5」の最後の部分(それでも沖縄をピアノでオシャレに弾きたいときは・・・)を「
サクラ」のMMLで書いてみる。「素敵な即興演奏講座5」の内容については、20日のエントリーを参照してください。
☆の音をランダムにパラパラと・・・という部分は、昨日つくったSwingR(DF)関数を使うことにする。
トラックのタイミングを合わせるのに
Timeコマンドを使ってみた。
トラックのタイムポインタを指定する
http://oto.chu.jp/doc/command/26.htm//_______ ここから _______________
Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N Int N1 Int N2 Int PanR=70 Int PanL=50 Int Pos
Function SwingR(DF){
#ML1={} #ML2={}[8
N1=Random(0,5) N2=Random(0,5)
#ML1=#ML1+O5(N1)+{4.}+O5(N2)+{8}
#ML2=#ML2+O5(N1+DF)+{4.}+O5(N2+DF)+{8}
]
N=Random(0,5)
#ML1=#ML1+O5(N)+{1} #ML2=#ML2+O5(N+DF)+{1}
Result=#ML1
}
#ML1={} N=0 [5 #ML1=#ML1+O5(N) N++]
#ML2={} N=4 [5 #ML2=#ML2+O5(N) N--]
TR(1) P(PanR)
ペダル N=5 [4 o(N) l16 #ML1 N++] N=8 [4 o(N) l16 #ML2 N--] r1 放す
Pos=Time
#ML1=SwingR(0)
#ML2={'}+O5(0)+O5(1)+O5(2)+O5(3)+O5(4)+{'}
TR(1) P(PanR) o7
ペダル #ML1 放す
TR(2) P(PanR) o5 Time(Pos)
ペダル q127 l1 #ML2^^^^ 放す
#ML1=SwingR(0)
#ML2={'}+O5(3)+O5(4)+O5(5)+O5(6)+O5(7)+{'}
TR(1) P(PanR) o6
ペダル q127 l1 #ML2^^^^ 放す
TR(2) P(PanR) o5
ペダル #ML1 放す
#ML1=SwingR(0)
#ML2={'}+O5(0)+O5(1)+O5(2)+O5(3)+O5(4)+{'}
TR(1) P(PanR) o6
ペダル #ML1 放す
TR(2) P(PanR) o5
ペダル q127 l1 #ML2^^^^ 放す
#ML={} N=1 [4 #ML=#ML+O5(N)+{16} N++] #ML=#ML+O5(5)+{1}
TR(1) P(PanR) o6
ペダル r2 #ML r1 放す
//_______ ここまで _______________
明日は、もう一度全体を見直し、3つの部分を統合したものを載せてみたいと思います。時間があったらmp3にしたものもアップする予定です。
今回はピアノでやってみたのだが、メロディーを歌ってみるという部分もあるので、これも課題にしておきます。
「サクラ」でMML演習5(続き)
今日は、ピアノのための「素敵な即興演奏講座5」の中程の、和音で平行に弾く部分を「
サクラ」のMMLで書いてみる。「素敵な即興演奏講座5」の内容については、昨日のエントリーを参照してください。
平行ということで、ずれる音程が同じなので、この部分は
関数を作ってみることにした。
SwingS(DF)は、基本の音階からDF分とばした音程を生成する。
SwingR(DF)は、DF分とばしたランダムな音程を生成する。
//_______ ここから _______________
Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N Int N1 Int N2 Int PanR=127-20 Int PanL=0+20
Function SwingS(DF){
STR ML={} [2
ML=ML+O5(0+DF)+{4.}+O5(1+DF)+{8}+O5(2+DF)+{4.}+O5(3+DF)+{8}
ML=ML+O5(4+DF)+{4.}+O5(3+DF)+{8}+O5(2+DF)+{4.}+O5(1+DF)+{8}
] ML=ML+O5(0+DF)+{1}
Result=ML
}
Function SwingR(DF){
#ML1={} #ML2={}[8
N1=Random(0,5) N2=Random(0,5)
#ML1=#ML1+O5(N1)+{4.}+O5(N2)+{8}
#ML2=#ML2+O5(N1+DF)+{4.}+O5(N2+DF)+{8}
]
N=Random(0,5)
#ML1=#ML1+O5(N)+{1} #ML2=#ML2+O5(N+DF)+{1}
Result=#ML1
}
#ML1=SwingS(0) #ML2=SwingS(1)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o4 [2 #ML2]
SwingR(1)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o4 [2 #ML2]
#ML1=SwingS(0) #ML2=SwingS(3)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o3 [2 #ML2]
SwingR(3)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o3 [2 #ML2]
//_______ ここまで _______________
もうちょっと上手く書けそうな気もするのだが、今日のところはこの辺にしておきます。最後の部分(それでも沖縄をピアノでオシャレに弾きたいときは・・・)は明日に続きます。
「サクラ」でMML演習5
ピアノのための「素敵な即興演奏講座」を題材に、「
サクラ」のMMLを演習してみようとする試みも今日で5回目になる。
====== 素敵な即興演奏講座5 ======今回は沖縄をテーマに講座を行いたいと思います。
ピアノの音階的に沖縄風にするのはとても簡単です。
ドレミファソラシの中で、「レ」と「ラ」を抜かして弾いてみましょう。
ここで初めてピアノの運指について触れてみましょう。ギターとかと一緒で「指の運び」の事です。
ピアノを弾く場合は、左右の五指にそれぞれ1~5まで番号がつけられます。
こんな感じ。
右親指→右小指 順に12345
左親指→左小指 順に12345
つまり左右対称に、親指を中心に外側へ1~5と同じ番号です。
では今回のレラ抜きの場合、どんな風に鍵盤上に指を置くと簡単かというと
右:ドミファソシ(12345)
左:ドミファソシ(54321)
この状態で手の形を固定!
和音を弾くときもそうですが、固定することで不要な音を弾かずに済みます。
では右手で弾いてみましょう。
ドミファソシ♪(☆)
あら、沖縄っぽいわ~。逆進行してみましょう。
シソファミド♪(★)
これは大雑把には以前ご紹介した5音音階ですね。
では更に沖縄っぽくするために、リズムを追加してみましょう。そのリズムとはずばり!
スウィングです。
スウィングのリズムは簡単です。
日本のわらべうた
あんたがたどこさ
一度この歌をうたってリズムを感じてください。
そしてこのリズムにのって先ほどの音列を順・逆つづけて弾いてみましょう。
はいっ!
ドーミファーソシーソファーミドーミファーソ…♪(※)
素敵ですね~。沖縄時間に合わせて、ゆったり弾きましょう。
では即興演奏ですが、この音を順にでもランダムにでも良いのでスウィングのリズムにのって弾いてください。
そして時々、一呼吸付きたい場所で適当な音を伸ばしましょう。
その繰り返しでオッケーです。
そして今回は135形を…と言いたいところですが、沖縄民謡に3和音をつけるのはちょっとね。
これは適当な沖縄語で、弾くのではなく歌って欲しいくらいです。
「シーサー」「マンゴー」だけでも良いです。
(例えば先ほどの※にのせてシーサーマンゴーと繰り返す)
歌う時のポイントとしては、各音と音の間に
「ずり上がり」「ずり下がり」を入れてください。
次の音に移る時にはっきりと移動するのではなく、経過的に滑らかに上下してください。
そして伸ばした音には「ふるえ」を入れてください。
これで沖縄の雰囲気バッチリ!
のハズです。民謡分析は専門ではないので。。。
でもハーモニーをつけたい、みんなで演奏したいわ、という場合はこうしてみましょう。
ピアノに戻って
右:ドミファソシ(☆) の音列に対して左をオクターブ下で同じように弾くのではなく、スタートを1つ次の音へずらします。
左:ミファソシド(☆1) と左右の音の対応表ができました。
これを一緒に平行して弾いてみましょう。左手は5音に対し順に54321、と指をおいてください。
歌の場合も同じです。2人で2パートに分かれて歌ってみましょう。
これは少し柔らかくきれいに響きます。
ランダムに弾く場合もそれぞれに対応した音同士を演奏してください。ちょっと頭を使います。
今度は左のスタートを3つずらします。2オクターブ下の音域に左手をおき、今度はソからスタートしましょう。
右:ドミファソシ(☆)
左:ソシドミファ(☆3) 同様に54321の運指
演奏してみましょう。
これは和声的には完全系のハーモニーになるので、スッキリ響きます。
また音は基本的に人間の声帯意識として、「低い音:男性」「高い音:女性」というイメージがありますので、
このぐらい音域を離すと男女で歌っても素敵です。
更に今回は発展形で、それでも沖縄をピアノでオシャレに弾きたいときは
レラ抜きのそれぞれの音列を1つの和音ととらえ、一緒に弾いたり、バラバラに弾いたりしましょう。
例えば、
まず右ペダルを踏んで、真ん中辺りのドの音から☆を素早く弾きましょう。
そして途切れないように左右の手を交互に使い、どんどんオクターブ上に重ねていきます。
鍵盤の右端まで行ったら、今度は同様に★で下へ重ねていきます。
それが終わったら同様に右ペダルを踏んで、左手で真ん中辺りで☆の音を全部一緒に弾きましょう。
そして2オクターブ上に離れた音域で、右手で☆の音をランダムにパラパラと弾きます。
次は右手をそこからちょっと下げて、右ペダルを踏み☆3を全部一緒に弾きましょう。
そして左手は同じ場所で☆をパラパラと弾きます。
その後ふたたび、右ペダルを踏んで左手で真ん中辺りで☆の音を全部一緒に弾きましょう。
その間、右手はその1オクターブ上で☆をパラパラと弾きます。
最後は右手をちょっと右へずらし、右ペダルを踏んで☆1を素早く弾きましょう(左手はナシ)。
====== ==================== ======今回の講座はちょっと長いので、3回に分けることにする。今回の題材は、沖縄の5音階だ。これを、「サクラ」でどうプログラムするかが今日のポイントだ。
いろんな方法があると思うのだが、今回は音階を
配列にするという方法を試してみることにする。
//_______ ここから _______________
Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N
#ML={} N=0 [4 #ML=#ML+O5(N)+{2} N++] #ML=#ML+O5(4)+{1}
[1 #ML] // ☆
#ML={} N=4 [4 #ML=#ML+O5(N)+{2} N--] #ML=#ML+O5(0)+{1}
[1 #ML] // ★
#ML={} [2
#ML=#ML+O5(0)+{4.}+O5(1)+{8}+O5(2)+{4.}+O5(3)+{8}
#ML=#ML+O5(4)+{4.}+O5(3)+{8}+O5(2)+{4.}+O5(1)+{8}
] #ML=#ML+O5(0)+{1}
[2 #ML]
#ML={} [8
#ML=#ML+O5(Random(0,5))+{4.}+O5(Random(0,5))+{8}
] #ML=#ML+O5(Random(0,5))+{1}
[2 #ML]
//_______ ここまで _______________
わざわざ配列にして面倒なことをしているように思うかもしれないが、音階を配列にすることで、この音階からランダムに音を作ることが簡単にできたり、色々と便利なのだ。後半部分は明日に続きます。
「サクラ」 Tips 6 選択範囲の文字補完
「
サクラ」には、プログラムを書くのに便利な機能がたくさんある。今日はそんな機能の一つを紹介する。
「サクラ」の
文字列は{}で囲むことになっているのだが、この{}の入力が結構たへんだ。しかし、これを簡単に行う方法があるのだ。
{}で括りたい範囲を選択状態にして、右クリックメニューを出すと、この中に
選択範囲という項目がある。ここから
文字列化を選択すれば、選択範囲の両側に{}が挿入される。
この選択範囲というメニューでは、この他にも、文字列の両側に[]を挿入したり、/* */を付けてコメントにする等、プログラムの入力を補助する機能がたくさんあるので、せび利用しよう。
「サクラ」 Tips 5 Ctrlでブックマーク
昨日は、「
サクラ」の「しおり」機能を紹介したのだが、同じようなマーキング機能に「
ブックマーク」というのがある。
「ブックマーク」は、
10箇所まで設定でき、使い方はとても簡単だ。
C
trl+Shift+数字1桁(0~9)で、「ブックマーク」を
設定できる。
設定した「ブックマーク」へジャンプする時は、
Ctrl++数字1桁(0~9)で、数字で指定した場所に
ジャンプする。
「サクラ」 Tips 4 しおり作成
「
サクラ」の編集画面には、プログラムの任意の位置にジャンプするための「
しおり」という機能がある。「しおり」を付けた場所は、左側タブに表示しておくことができ、「しおり」の場所にジャンプするには、表示されている「しおり」をダブルクリックすればよい。
「サクラ」では、行の
先頭が//の場合は
コメント行になるのだが、さらに、
行の先頭を//_のようにすると、この行を「
しおり」として認識させることができる。
そこで、いつも使っているプログラムの先頭と末尾のコメントを下記のようにしてみた。
//_______ ここから _______________
#Tlp_1={ドレミードレミーソミレドレミ#?1ー}
#Tlp_2={ソソミソララソーミミレレドーーー}
#Tulip={o5 #Tlp_1(レ) #Tlp_1(ド) #Tlp_2}
#C={'ドミソ'} #Em={'ミソシ'} #G={'ソシ`レ'} #Dm={'レファラ'} #Am={'ラ`ド`ミ'}
#Bans1={#C #Em #C #Em #G #Dm #Dm #?1}
#Bans2={#G #Em #Am #G #Em #Dm #C "ド}
#Banso={o4 l2 #Bans1("レ) #Bans1(#C) #Bans2}
#Konon={o4 l2ドミドミソレレ"レ ドミドミソレレド ソミラソミレド"ド}
Tempo(80) @(GrandPiano)
TR(1) V(100) P(100) q120 #Tulip
TR(2) V(060) P(040) q120 #Banso
TR(3) V(080) P(020) q100 #Konon
//_______ ここまで _______________
これなら、「しおり」機能を使って、プログラムの先頭と末尾に簡単にジャンプすることができる。
「サクラ」 Tips 3 簡単マニュアル参照
今日も、「
サクラ」の小技をもう一つ紹介する。「サクラ」のマニュアルは、
HTML形式になっていて、メニューのヘルプからもコマンドの仕様を調べることができるのだが、このマニュアルの参照が調べたいコマンドを探すのに結構手間がかかる。
調べたいコマンド名がわかっている時は、エディタ画面にコマンドをとりあえず入力してみるとよい。このコマンドをダブルクリックすると、下の画像のように、ツールバーに簡単なコマンドの説明が出る。
さらに、このツールバー(説明の部分)をダブルクリックすると、自動的にブラウザが開き、そのコマンドのHTML形式の詳細な仕様を見ることができる。
「サクラ」 Tips 2 スライダーで数値入力
今日は、「
サクラ」の小技をもう一つ紹介する。MMLで数値を入力しなければならない場合は結構多い。MIDIの仕様では、数値は0~127の範囲といったことが結構多いのだが、こんな数値入力をマウスで簡単に行う方法がある。
下の画像のように、数値を書いてある部分をダブルクリックするとスライダーが出る。ここでマウスで数値を選べば、その数値がエディタに入力できる。
パンポットの数値などは、左から右に0~127になっているから、視覚的に数値の入力ができてとても便利だ。
「サクラ」 Tips 1 途中から演奏
今日は、「
サクラ」の小技を一つ紹介する。MMLのテストをやっている場合、曲の途中から演奏させたいといったことは多い。
演奏させたくない部分をコメントにしてもいいのだが、MMLが長くなると、この方法も大変だ。そんな時に便利なのが記号の「
?」だ。
?を書いたところから演奏を開始
http://oto.chu.jp/doc/command/120.htm下の例の場合、「みふぁそらし」から演奏を開始する。
//---------- ここから ----------
どれみふぁそ
れみふぁそら
?
みふぁそらし
//---------- ここまで ----------
「サクラ」でMML演習4
「素敵な即興演奏講座」シリーズは、ちょっとピアノが弾けるようなった子供(大人でもいいかも)のための講座なのだが、これをMMLで書いてみようとすると、色んなアイデアを試すことができて結構勉強になる。そんな訳で今日は「素敵な即興演奏講座4」を「
サクラ」のMMLで書いてみることにする。
====== 素敵な即興演奏講座4 ======今回はそうです、チューリップを題材にします。
ではまずチューリップのメロディを、右手で真ん中あたりのドから弾いてみましょう、はいっ!
ドーレーミ~ ドーレーミ~ ソーミーレードーレーミーレ~
ドーレーミ~ ドーレーミ~ ソーミーレードーレーミード~
ソーソーミーソーラーラーソ~ ミーミーレーレード~~♪
できましたか?
今回はこのチューリップで、前回の135形を使った簡単な伴奏付けの演奏をします。
ではまずこのメロディを2拍ずつ1単位に分け、その1拍めに左手で伴奏の和音を付けていきます。
単位に分けるとこうなります。
「ドーレー」「ミ~」「ドーレー」「ミ~」…
「ソーソー」「ミーソー」「ラーラー」「ソ~」
「ミーミー」「レーレー」「ド~」(「~」)♪
1拍めはそれぞれ
「ド」「ミ」「ド」「ミ」「ソ」「レ」「レ」「レ」…以下同
となります。これを仮に単1とします。この音が伴奏の手がかりとなります。
今度は左手で伴奏を作っていきます。
まず右手の弾き始め、単1「ド」の音から左へ「シラソファミレド」と、一巡下がったドの音へ左手の小指をおきます。
(この一巡の単位を「オクターブ」と言います。例えば「1オクターブ下」という時は左(低音方向)へ一巡、「2オクターブ上」という時は右へ二巡します。)
そして小指から順に一つとばしの中指、親指とおいて135形を作ります。そして和音を弾いてみましょう。
〔ドミソ〕♪
この和音をシー・メイジャー(C)と言います。
今度は次の単1「ミ」の、1オクターブ下の「ミ」から同じく「ミソシ」と135形を作ります(イー・マイナー(Em))。
同様に単1から1オクターブ下の音に、左手で135形を作っていきましょう。
それが最後までいったら、なんともう伴奏の出来上がりです。
では右手と合わせて弾いてみましょう。
右:ドーレーミ~ドーレーミ~ ソーミーレードーレーミーレ~
左:C Em C Em G Dm Dm Dm
です。上手にできましたか?
このように和音が平行移動する方法は、古典音楽ではあまり使用されませんでした。ロマン派~近代の手法です(のはず)。
ではここで今回のポイント、上記の
「ソーミーレードーレーミーレ~」の部分は3/4回が同じ和音で、少し詰まらないですね。
そこで簡単に素敵にする方法として、最後の「レ」は伴奏として、単1の2オクターブ下の「レ」の音だけを弾いてみましょう。
ちょっとドビュッシーぽく?なります(ならないかな。。。)
曲終わりの「~」も2オクターブ下の「ド」を弾くと、しつこいですが更にそんな雰囲気が出ます。
この単純に横に移動する3和音、ヨコ135形(電車オタク?)は子どもや初心者に、導入として良いのではないかと思います。
====== ==================== ======今日は、特に新しいテクニックは使っていない。ピアノの右と左の手をイメージして、メロディーが右、伴奏が左の方から聞こえるようにパンポットを設定してみた。
//---------- ここから ----------
#Tlp_1={ドレミードレミーソミレドレミ#?1ー}
#Tlp_2={ソソミソララソーミミレレドーーー}
#Tulip={o5 #Tlp_1(レ) #Tlp_1(ド) #Tlp_2}
#C={'ドミソ'} #Em={'ミソシ'} #G={'ソシ`レ'} #Dm={'レファラ'} #Am={'ラ`ド`ミ'}
#Bans1={#C #Em #C #Em #G #Dm #Dm #?1}
#Bans2={#G #Em #Am #G #Em #Dm #C "ド}
#Banso={o4 l2 #Bans1("レ) #Bans1(#C) #Bans2}
#Konon={o4 l2ドミドミソレレ"レ ドミドミソレレド ソミラソミレド"ド}
Tempo(80) @(GrandPiano)
TR(1) V(100) P(100) q120 #Tulip
TR(2) V(060) P(040) q120 #Banso
TR(3) V(080) P(020) q100 #Konon
//---------- ここまで ----------
「和音は基本的に根音を出すと綺麗に響きます。」というアドバイスがあったので、根音のみのパートを作り、伴奏の和音と微妙にボリュームを変えてみた。また、「全体レガートにしてみて下さい。」とう指摘もあったのでトラック毎のゲートタイムを長めに設定してみた。
「サクラ」でMML演習3(修正版)
昨日のMML演習3に使った関数 Chrmlo()がちょっと不満だったので、今日は別の方法でMMLを書いてみる。
昨日の方法は、関数 Chrmlo()で、3度と5度下の音を作ってPlay文で演奏させていたのだが、せっかく和音(#F、#G、#Am)を定義したのだから、これをそのまま使って、文字列マクロ(#Chrmlo)を定義してみた。この方が、やっぱりすっきりします。
もう一つ、「
サクラ」では
MMLの記述に日本語が使える。「ドレミーレド ドレミレドレ~♪」がイメージしやすいように音名をカタカナ表記にしてみた。
//---------- ここから ----------
#Chrmla={l8ドレ l2.ミ l8レド l4r l8ドレ l12ミレド l1レ}
#F={'ド"ラ"ファ'}
#G={'レ"シ"ソ'}
#Am={'ミド"ラ'}
#SP={l1r2}
#Chrmlo={o5 l8#F #G l2.#Am l8#G #F r4 l8#F #G l12#Am #G #F l1#G}
Tempo(96) @(GrandPiano)
o5 #Chrmla #SP
l1 #F #G #Am #SP
#Chrmlo #SP
#Chrmlo r-2. [16 o(RandomSelect(5,6,7)) l12 ソ] #SP
#Chrmlo r-2. l48 o5 レミファソラシ>ドレミファソラシ>ドレミファソラ #SP
#Chrmlo r-2. Int N=NoteNo(o7シ) While(N>=NoteNo(o5シ)){N-- n(N)32} #SP
o6 l1 q100 ド^
//---------- ここまで ----------
MP3ファイルの方は、パソコンの内蔵音源ではなく、Soundfont を使って演奏させたものを掲載しますす。
「サクラ」でMML演習3
「素敵な即興演奏講座」シリーズは、なかなか面白い。MMLの演習にとても良い教材になる。そんな訳で今日は「素敵な即興演奏講座3」をMMLで書いてみることにする。
====== 素敵な即興演奏講座3 ======今日はかの有名な「チャルメラ」(著作権ナシ?)を使った講座です。まずは基本のチャルメラ、真ん中あたりで弾きましょう。ドレミーレド ドレミレドレ~♪できましたか?今日はこのチャルメラに和音をつけ、オリジナリティのある音楽にします。ではまず、最初のドの音に左手の親指をおきます。そして左方向に1つとんでラの音に中指、また1つとんでファの音に小指をおきましょう。そしてこのファとラとドの3つの音を一緒に弾きます。(明るい和音が鳴りましたね。これをコードネームでは「エフ?メイジャー」と呼び「F」と書きます。)この5つ並んだ音に5本の指をおき、小指?中指?親指の場所にあたる音だけを弾く手の形を135形とします。ではその135形のまま右へ1つずれて、次のレの音へ移動しましょう(ソ?シ?レ)。そして一緒に弾く。この和音は「ジー?メイジャー」(G)といいます。今度はその135形のまま、次のミの音へ移動します。また一緒に弾きましょう。この和音は「エー?マイナー」(Am)です。覚えましたか?では少しゆっくりで良いので、チャルメラのリズムにのってこの和音を弾きます。F G AmーG F F G Am G F G~♪できましたか?ちょっと斬新なチャルメラになりました。ではこれだけでは詰まらないので、右手でオマケをつけて更に素敵なチャルメラにしましょう。今できたちょっと斬新なチャルメラをチャルメロとします。まず1度チャルメロを弾きましょう。そして最後のGを鳴らしたまま、右手でその音よりちょっと右方向に離れた高い音域にあるソの音たちをランダムにパラパラと弾きます。次にまたチャルメロを弾き、同様に最後のGを鳴らしたまま、先ほどと同じ高音域の適当な場所から、白鍵の上を左から右に手の甲で滑るように弾きます(この奏法をグリッサンドといいます)。最後にまたチャルメロを弾き最後のGを鳴らしたまま、高音域にあるシの音を適当に選び、そのシの音からGのすぐ右側にあるシの音まで半音階(白鍵と黒鍵を順に全部弾く)で左方向に下がります。ラスト締めとしてGの音から左手を離し、先ほど右手で下がってきたシのとなりドの音を少し長めに弾きます。====== ==================== ======今日は今まで使ったことのない(多分)関数を一つ使っている。MMLの音名をノート番号に変換する関数
NoteNo だ。
mml に書かれたノートのノート番号を返す
http://oto.chu.jp/doc/command/97.htm「
サクラ」などのプログラム言語でロジックを作ろうとすると、どうしても数値にした方が便利な場合が多い。こんな時に、音名をノート番号に変換できればとても便利なのだ。
今回は「高音域にあるシの音を適当に選び、そのシの音からGのすぐ右側にあるシの音まで半音階(白鍵と黒鍵を順に全部弾く)で左方向に下がります」という部分の「シ」の音を求めるのに、この関数を使っている。
Int N=NoteNo(o7b) While(N>=NoteNo(o5b)){N-- n(N)32}
//---------- ここから ----------
#Chrmla={c8d8e2.d8.c8.r4c8d8e12d12c12d1^}
#F={'c"a"f'} #G={'d"b"g'} #Am={'ec"a'} #SP={l1r2}
Function Chrmlo(){
#Chrm_3=Replace(#Chrmla,{c},{"a},on)
#Chrm_3=Replace(#Chrm_3,{d},{"b},on)
#Chrm_3=Replace(#Chrm_3,{e},{c},on)
#Chrm_5=Replace(#Chrmla,{c},{"f},on)
#Chrm_5=Replace(#Chrm_5,{d},{"g},on)
#Chrm_5=Replace(#Chrm_5,{e},{"a},on)
Play(o5+#Chrmla,#Chrm_3,#Chrm_5)
}
Tempo(96) @(GrandPiano)
#Chrmla #SP
l1 #F #G #Am #SP
Chrmlo #SP
Chrmlo r-1 [16 o(RandomSelect(5,6,7)) l12 g] #SP
Chrmlo r-1 l48 o5 defgab>cdefgab>cdefga #SP
Chrmlo r-1 Int N=NoteNo(o7b) While(N>=NoteNo(o5b)){N-- n(N)32} #SP
o6 l1 q100 c^
//---------- ここまで ----------
関数 Chrmlo() はもうちょっと上手く書けそうなのだが、とりあえず次の課題にします。
「サクラ」でMML演習2
昨日書いた「素敵な即興演奏講座1」を使ったMML演習1が、けっこう上手くできたので、今日は「素敵な即興演奏講座2」をMMLで書いてみることにする。
====== 素敵な即興演奏講座2 ======今回は黒鍵のみを使って、エキゾチックなペンタトニックの演奏をしてみましょう。ペンタトニックとはスコットランド民謡などに見られる5音音階のことで、基音から完全5度上にずっと音を採っていくとできあがります。ピアノではこのペンタトニックを簡単に演奏することができます。「素敵な即興演奏講座1」で使用した3つ並んだ黒鍵の、最初の音に親指を置いてみましょう。そして順に3つの音を弾き、そのまま隣にある2つ並んだ黒鍵を弾きましょう。するとアラ不思議、素敵なペンタトニックができあがります。この5つ黒鍵が並んだペンタトニックの形(音列)を仮にPとします。次は両手を鍵盤の上に乗せ、それぞれの手をPの音列の上にのせます。左手の小指を最初の音に置き、そして薬指で2つめの音の上に置いて小指と薬指の音を一緒に弾いてみましょう。するとジャーンと和音が響きます(2つ以上の音が同時に鳴らすことを「和音」と言います)。この和音を仮にAとします。Aを鳴らしたまま、右手でPの音を適当にパラパラ弾いてみましょう。なんと伴奏つきペンタトニック演奏のできあがりです。今度は左手の中指を離し、人差し指下にある4つめの音と小指の音を同時に弾いてみましょう(仮にBとします)。Bを鳴らしたまま同様に右手をパラパラ弾きます。すると更にエキゾチックっぽい伴奏つきペンタトニック演奏になるではありませんか。ここでポイントです。今度は左手の1つめ(小指)と5つめ(親指)を同時に弾きましょう。この和音をCとします。まずBを弾き右手をパラパラ→次にCを弾きパラパラ→またBを弾きパラ…→今度はAを弾きパ…→そしてBを弾き。。。と繰り返すと、和音の性格から流れのある演奏になります。====== ==================== ======せっかく、AとかBとかを指定してくれているので、これを変数名にして、ほぼ指定通りの方法で「
サクラ」のプログラムを作ってみた。
//---------- ここから ----------
Array PE=({f#},{g#},{a#},{`c#},{`d#}) STR PTone
#P={f#g#a#`c#`d#^^^}
#A={'"f#"g#'}
#B={'"f#c#'}
#C={'"f#d#'}
#P1={ペダル Sub{[4 l16 #P]} l1 #?1^ 放す}
#P2={ペダル Sub{l16 #P}l2 #?1 放す}
#P3={ペダル Sub{l16 [8 PTone=PE(Random(1,5)) PTone]}l2 #?1 放す}
Tempo(88) @(GrandPiano)
#P
#P1(#A) #P1(#B)
[2 #P2(#B) #P2(#C) #P2(#B) #P2(#A)]
[4 #P3(#B) #P3(#C) #P3(#B) #P3(#A)]
//---------- ここまで ----------
引数付き文字列マクロを使うと、こんなにすっきりとプログラムが書ける。うーん。これは本当にプログラムの演習のいい教材になります。
「サクラ」でMML演習1
「
サクラ」でだいぶMMLが書けるようになっできたのだが、最近、mixiの友達が「素敵な即興演奏講座」というのを始めた。
「素敵な即興演奏講座」というのは、ピアノを使って簡単なフレーズを弾いて楽しんでみるというものなのだが、これが、「サクラ」のMMLの勉強にちょうどよい教材なのだ。
そこで、今日はこの「素敵な即興演奏講座1」の内容をMMLで書いてみることにする。
まずは、「素敵な即興演奏講座1」を紹介します。
====== 素敵な即興演奏講座1 ======今日は初回という事で、簡単に「ドレミ」でスタートする講座から始めたいと思います。まず真ん中の3つ並んだ「ドレミ」を弾きましょう、白鍵です。その後すぐ斜め右上方向にある3つ並んだ黒鍵を弾きましょう。するとあら、不思議。何だか謎めいた中途半端な音の流れができました。これを一般に音楽用語で全音音階と言います。普通に白鍵を「ドレミファソラシ」と弾いた場合、音の間隔には「ド→全→全→半→全→全→全」と半音が含まれます。しかし全音音階は音の間隔が全て全音で形成されています。さて解説はその位にして、次は右ペダルを踏んで弾いてみましょう。すると各音がずっと延びるので、霧がかかったように適度に音に濁りが生じ、あやしい雰囲気になります。次に同じようにペダルを使用して、速く繰り返して弾いてみましょう。あやしい雰囲気に切迫した感が付加され、異世界に迷い込んだようなイメージを出せます。今度は少し右にずれて、上の音域で弾いてみましょう、ペダルは使用しません。ゆっくり上行(順に弾く)し、次に下行(逆順に弾く)します。すると滑稽な様子に聞こえて、困ったり壊れたりしたような音が出せます。最後に3つの白鍵と3つの黒鍵のそれぞれを、一緒に弾いてみましょう。つぶれたような音が鳴り、圧縮したり萎縮したりする印象が出ます。少し左にずれて低い音域で強く弾いてみましょう。すると今度はくずれるような衝撃音に聞こえるので、ドラマティックな転換時に使えます。====== ==================== ======手元にピアノはないのだが、イメージをふくらませて「サクラ」のMMLにしてみた。
//---------- ここから ----------
#Zenon={cdef#g#a#}
#Zenonr={a#g#f#edc}
#Gaann={'cdef#g#a#'}
Tempo(96) @(GrandPiano)
Play(l4+o5+#Zenon)
ペダル Play(o5+#Zenon) 放す
[4 ペダル Play(l16+o5+#Zenon) 放す]
[2 Play(l4+q20+o6+#Zenon+#Zenonr)]
Play(l1+q120+o5+#Gaann+o3+#Gaann)
//---------- ここまで ----------
けっこう上手くできたと思うのだが、どうだろうか。録音してmp3ににしたものを載せておきます。
「サクラ」のMMLを表計算ソフトで作ってみる
昨日は、「
サクラ」のMMLを関数を作って生成してみたのだが、MMLはテキストなので、テキストを生成するシステムがあればMMLは作ることができる。
プログラムでテキストを簡単に作れるものとしては、awkやperlといったスクリプト言語やエディタのマクロなどが考えられるが、
表計算ソフトのセルの内容をテキスト保存すれば表計算ソフトを使ってもMMLが作れそうだ。
早速OpenOfficeの
Calcを使って実際にやってみた。
見た目は、MMLが書いてあるように見えるが、実際はセルにこんな計算式が入っている。
=CONCATENATE("n";RANDBETWEEN (40; 80);",";RANDBETWEEN (1;2)*4)
このシートの内容を、範囲(A1:V4)を指定してコピー(Ctrl+C)し、「サクラ」のエディタにペースト(Ctrl+V)すると下のようなプログラムになる。
//---------- ここから ----------
#P1={ n64,8 n58,8 n69,4 n59,4 n49,4 n52,4 n47,8 n45,4 n42,4 n63,4 n54,8 n80,4 n73,8 n63,8 n47,8 n42,4 n74,4 n74,8 n70,8 n44,4 }
#P2={ n65,4 n52,8 n75,8 n41,8 n77,4 n75,4 n80,8 n55,4 n49,4 n70,4 n41,8 n61,4 n43,8 n76,4 n78,4 n65,4 n57,8 n65,8 n53,4 n46,8 }
Play(#P1,#P2)
//---------- ここまで ----------
今回はセルに計算式を書いたのだが、マクロを作ったりすればこれは結構おもしろいことができそそうだ。ロジックで音を生成しようとする場合は必ず計算が入るわけだから、表計算ソフトは意外と向いているのかもしれないです。
「サクラ」で文字列を連結する方法
昨日は、Playコマンド用のMML文字列を定数値として記述したのだが、この文字列をプログラミングで作ることができればコンピュータに作曲させるプログラムをかっこよく作ることができそうだ。
この場合必要になるのが、
文字列を連結するという処理だ。MMLは文字列なわけで、この文字連結ができれば、MMLをプログラムで生成できる。
「
サクラ」の文字列連結は、記号'+'を使う。
文字列 + 文字列 + 文字列 + ・・・・それでは早速プログラムを作ってみる。関数Comose()は、引数に指定された個数分、ランダムな音を4分音符と8部音符で作り出す。
Compose(作成するノート数,ノート番号下限,ノート番号上限)
//---------- ここから ----------
Function Compose(Nno,Nmin,Nmax){
STR PW = {}
For(Int I=1; I<=Nno; I++){
PW = PW+"n"+#STR(Random(Nmin,Nmax))+","+#STR(RandomSelect(4,8))+" "
}
Result = PW
}
#P1 = Compose(100,40,90) Print(#P1)
#P2 = Compose(100,40,90) Print(#P2)
Play(#P1,#P2)
//---------- ここまで ----------
デバッグのため、Printコマンドで、Compose()で生成されたMMLを表示してみた。
「サクラ」のPlayコマンドを使う
MMLを記述する処理系には、たいていPlayコマンドというのがある。「
サクラ」にも
Playコマンドがあるのだが、仕様は次のようになっている。
Play({a},{b},{c}...) 複数トラックを1度に書き込む
http://oto.chu.jp/doc/command/28.htmどういうことかというと、Playコマンドの引数に複数の文字列を指定すると、この文字列をMMLと見なして、TR(0),TR(1),TR(2)・・・・TR(n)の順にMMLを書き込んでくれるというものだ。早速試してみよう。
//---------- ここから ----------
#Part1={cdefgab`c^^^}
#Part2={rrcdefgab`c^}
Play(#Part1,#Part2)
//---------- ここまで ----------
これは、以外に便利かもしれない。プログラムで曲を自動生成する場合に、プログラムがすっきりと書けそうだ。
「サクラ」のリズムパターンからMMLを作成
「
サクラ」の
リズムボックス機能で作ったデータは、当然ながら「サクラ」の
MMLに変換することができる。
リズムボックス入力画面のメニューで、出力→エディタへ貼り付けを実行してみる。
画像のように「サクラ」の文字列マクロに展開される。これで、リズムパターンの入力は格段に楽になる。
「サクラ」のリズムパターン管理
昨日は、「
サクラ」の
リズムボックス機能を試してみたのだが、ここで作ったリズムパターンは
CSV形式で保存しておくことができる。
試しに、昨日作ったパターンをtest.csvという名前で保存してみる。これをExcelで読み込んでみたのが下の画像だ。
リズムボックス入力画面の升目の内容が、そのままセルの内容になっている。試しにセルB1の内容を50に変えて保存し、リズムボックス入力画面に読み込んでみる。メニューの設定で音量を表示にしてみたのが下の画像だ。
この、セルの値は音量であるのがわかる。ということは、このリズムパターンはExcelでも作れるっていうことですね。
「サクラ」のリズムボックス機能
リズムパートのMMLを書こうとすると、これが結構むずかしい。「
サクラ」には、
リズムボックスというリズムパートのMMLを簡単に入力できる機能がある。
メニューから、
入力支援→リズムボックスを選ぶと下のような画面が出る。
初期状態では、16部音符16コマ(つまり1小節)分の入力エリアが出るが、これは下の方にある数字を変えれば任意に変更することができる。
この画面は、X軸方向に時間、Y軸方向に楽器が配置されている。この升目の中にパーカッション楽器が発音するタイミングを配置していく。これは、まさにシーケンサーだ。
ところで、Y軸方向に並んでいる、「ばちつと・・・」というものだが、これはパーカッション楽器を表す文字で、次のように定義されている(各文字をクリックすると音が出て確認することができる)。
ぱ = n49 //Crash cymbal
ち = n46 //Hi-hat open
つ = n42 //Hi-hat close
と = n50 //low-Tom
む = n47 //Mid-Tom
ろ = n43 //High-Tom
た = n38 //snare
ず = n36 //bass drum
メニューの編集のところに、指定行をランダムに配置というのがある。これを各楽器に対してやってみたのが下の画像だ。
メニューの再生を選ぶと、繰返で指定した回数分の音が出る。これは、結構楽しい。こんな感じで、オリジナルのリズムマシーンが簡単に作れてしまいます。
「サクラ」の五線譜入力機能
「
サクラ」には、
五線譜入力というMML入力機能もある。「サクラ」の編集画面で、五線譜入力アイコンか
Ctrl+Gを押すと、五線譜入力用のウィンドーが出る。
この五線譜をト音記号で使うか、ヘ音記号で使うかを指定して、五線譜上の位置をクリックすると、押した五線譜の位置に相当する音が出て音名がエディタに入力される。音名をかな表記にするかMML表記にするかは、メニューの出力の選択でで切り替えることが可能だ。なお、右クリックでは、発音はするがエディタには入力されない。
シフトキーを押しながらクリックすると半音上の音が入力される。また、音符の長さのアイコンを押しておくと、音符属性として値が同時に入力される。休符やタイ、三連符といった指定も簡単にできる。
楽譜があって、これを見ながら入力するような場合は、五線譜入力が断然便利だ。
「サクラ」の鍵盤入力機能
「
サクラ」ではプログラムに音名を入力する場合に便利な機能がたくさんある。最初に紹介するのは、
鍵盤入力という機能だ。
「サクラ」の編集画面で、鍵盤入力アイコンか
Ctrl+Kを押すと、鍵盤入力用のウィンドーが出る。この画面には3オクターブの鍵盤が表示される。
ここで、鍵盤を左クリックすると押した鍵盤に相当する音が出て音名がエディタに入力される。音名をかな表記にするかMML表記にするかは、メニューの出力の選択で切り替えることが可能だ。なお、右クリックでは、発音はするがエディタには入力されない。
貼り付けのメニューからは、音符の長さや音量といった音符属性の入力も可能だ。ただ、こちらの方はMML表記にはならないようだ。