「サクラ」で音に残響をかけてみる
GM音源のシンセサイザーには、音に残響を付ける
リバーブの機能がある。
「
サクラ」からリバーブを指定する場合は、次のように書く。
REV(n) n=0~127
残響を0~127まで、3段階に変化させてフルートの音を聞いてみる。
//---------- ここから ----------
REV(000) [20 @(Flute) l2 q100 n(Random(060,090))]
REV(063) [20 @(Flute) l2 q100 n(Random(060,090))]
REV(127) [20 @(Flute) l2 q100 n(Random(060,090))]
//---------- ここまで ----------
パソコンの内蔵音源にはリバーブの機能がないようなので、sfzで試して欲しい。残響がかかると、ちょっと神秘的で美しい音に聞こえる。
「サクラ」の絶妙なビブラートテクニック
昨日は「
サクラ」で
ビブラートをかける方法を試してみたのだが、ビブラートのかかりかたがちょっと単純だ。
ところで、「サクラ」にはモジュレーションのかかり具合を音符の長さの単位で微妙に変化させることができるコマンドが用意されている。
M.W(始まりの幅,終わりの幅,!音符の長さ)これを使って、ビブラートをかける時間とかかりかたを微妙に変化させてみる。
//---------- ここから ----------
[100 @(Viola)
M.W(Random(0,64),Random(64,127),!RandomSelect(1,2,4))
l2 q100 n(Random(040,080))
]
//---------- ここまで ----------
なんか人間が演奏しているような感じになる。sfzのモジュレーションホイールが絶妙に動くのを眺めているのも楽しい。
「サクラ」で音にビブラートをかけてみる
シンセサイザーには、ピッチベンドの他に
モジュレーションというコントローラが付いている。モジュレーションというのは
ビブラートのことで、演奏表現としては重要な機能だ。
SaviHostで作ったソフトシンセ(SFZ.EXE)の画面を見ると、鍵盤の左側にスライダーが2つ並んでいる。
標準では、右側のスライダーがモジュレーションにアサインされている。
実際に、操作してみて欲しいのだが(マウスで操作することもできるし、Homeキーで上の方に、Endキーで下に動かせる)上の方に動かすほどビブラートが強くかかる。
このどのぐらいの強さでビブラートを掛けるかは「
サクラ」のコマンドでも指定できる。書き方はこうだ。
M(n) n=0~127
モジュレーションを0~127まで、5段階に変化させてみる。
//---------- ここから ----------
For(Int I=0; I=<4; I++){
M(I*32)
[20 @(Oboe) n(Random(040,080))]
}
//---------- ここまで ----------
演奏モニターのモジュレーションのバーが変化するのを確認して欲しい。
「サクラ」で純正律のハーモニー(ピッチベンド版)
今日は前にFineTuneを使ってやってみた純正律のハーモニーを、
ピッチベンドを使って「
サクラ」で作ってみる。
12平均律と純正律のセント値の違いは、Eが-13.69、Gが+1.96だ。これを100セントで4096段階の値になるように計算してみる。
Eの補正値 -13.69 * (4096 / 100) = -560.7424
Gの補正値 1.96 * (4096 / 100) = 80.2816
この値で、EやGの音にピッチベンドをかければ、純正律に近い響きが聞けるはずだ。
最初にド・ミの和音を、12平均律と純正律で鳴らしてみる。次に、ド・ソの和音を、12平均律と純正律で鳴らしてみる。最後にド・ミ・ソの和音を、12平均律と純正律で鳴らしてみる。
//---------- ここから ----------
Tempo=40; TR(1)@(Clarinet)l1; TR(2)@(Clarinet)l1; TR(3)@(Clarinet)l1
TR(1)
p%0 c p%+000 c p%0 c p%+000 c p%0 c p%+000 c
TR(2)
p%0 e p%-561 e r r p%0 e p%-561 e
TR(3)
r r p%0 g p%+080 g p%0 g p%+080 g
//---------- ここまで ----------
FineTuneは、SaviHostでは有効にならなかったが、ピッチベンド使った場合はSoundFontを使うsfzでも試してみることができる。
「サクラ」からピッチベンドをかけてみる
昨日はピッチベンドホイールを人が動かして操作したわけなのだが、このホイールは「
サクラ」のプログラムからも動かすことができる。
ピッチベンドは、無段階になめらかにかかるように聞こえる。しかし、実際は
上下に8192段階に変化させているのだ。このぐらいの分解能があれば、聴覚上は間違いなくなめらかに聞こえる。
「サクラ」でピッチベンドを動かすには次のように指定する。
p%n n=-8192~8191
早速試してみよう。標準のピッチベンド幅は1音なので、次のようなプログラムを書けば、上下に半音の幅で音が生成される。
//---------- ここから ----------
[100 @(GrandPiano) p%Random(-4096,4096) ド]
//---------- ここまで ----------
実行してみるとわかると思うが、ピッチベンドホイールがランダムに生成された値により自動的に上下するのがわかる。
前に、FineTuneを使って微分音を出してみたが、FineTuneでは半音を64段階にしか変更できない。BR(1)のように設定してピッチベンドを指定すれば、半音で8192段階もの微分音を作ることが可能だ。
「サクラ」でピッチベンドの幅を変更する
シンセサイザーには、
ピッチベンドというコントローラが付いている。ピッチベンド(Pitch-Bend)というのは、「音程を曲げる」という意味で、シンセサイザーやMIDI音源などで音程を連続的に滑らかに変化させる機能だ。
昨日試してみた「
サクラ」のスラーのモード0の機能は、このピッチベンドの機能を使って実現されている。
ピッチ
http://oto.chu.jp/doc/faq/help16.htmSaviHostで作ったソフトシンセ(SFZ.EXE)の画面を見ると、鍵盤の左側にスライダーが2つ並んでいる。
このスライダーをどういう機能にアサインするかはカスタマイズができるのだが、標準では左側のスライダーがPitch-Bendになっている。(本物のシンセサイザーではピッチベンドホイールと言う)
実際に、操作してみて欲しいのだが(マウスで操作することもできるし、Insertキーで上、Deleteキーで下に動かせる)上下に1音、なめらかに音を上下させることができる。
実は、この上下に1音というのは変えることができるのだ。「サクラ」では次のように書く。
BR(n)標準ではピッチの変更範囲の値(n)が
2に設定されている。半音が1だから、例えばnの値を12にすれば上下に1オクターブ動かすことができる。
では、早速試してみよう。
//---------- ここから ----------
BR(12)
//---------- ここまで ----------
これを実行しても当然音は出ない。ソフトシンセの方で音を出してスライダーを操作してみて欲しい。確かに、1オクターブ上下に音が変化する。
「サクラ」でスラーの機能を使ってみる
今日から、「
サクラ」で
音符を修飾する手法についていくつか試してみることにする。
最初は、音符を繋げる
スラーだ。スラーと言っても色んな手法がある。「サクラ」では、この手法を次のようなコマンドで宣言する。
Slur(n) ・・・・ n=0,1,2,3
スラー (レガート奏法)
http://oto.chu.jp/doc/faq/help01.htmnの値により、
グリッサンドや
アルペジオのような効果を表現することもできる。
実際いスラーを使う場合は、スラーで結ぶ音符の間に記号&を書く。
//---------- ここから ----------
@(Shamisen)
Slur(0)
o4 l4 ファ&ラシシ シファミ&レ ミ l1 "シ
@(Koto)
Slur(3)
o4 l16 ファ&ラ&シ&`レ& l1 `ミ
//---------- ここまで ----------
こんなテクニックを使えば、三味線や琴の奏法もMIDIで再現できそうだ。
「サクラ」で沖縄音階を作ってみる
「
サクラ」には、「サクラ」のシステムが初期状態で持っている設定値を一時的に変更する
Systemオプションというのがある。
Systemオプション
http://oto.chu.jp/doc/reference/system.htmこの中に、
System.KeyFlagというのがある。System.KeyFlagというのは、「サクラ」でシステム的に決めている音階(ラ,シ,ド,レ,ミ,フ,ァ,ソ)を一時的に変更してしまうというコマンドだ。-1で半音、-2で全音下げることができるのだ。
例えば次のように定義してみる。
System.KeyFlag=(-2,0,0,-2,0,0,0)
これで標準の音階を。下のような音階に変更したことになるのだ。
ラ・シ・ド・レ・ミ・ファ・ソ
↓
ソ・シ・ド・ド・ミ・ファ・ソ
つまり、ド・ミ・ファ・ソ・シの5つの音しかない5音階になるのだ。これは、いわゆる沖縄音階になる。
そこで、昨日のプログラムを変更して、このSystem.KeyFlagを定義してみる。
//---------- ここから ----------
Array Scale = ({ド},{レ},{ミ},{ファ},{ソ},{ラ},{シ})
Str Note
System.KeyFlag=(-2,0,0,-2,0,0,0)
[100 @(Shamisen)
o(RandomSelect(4,5)) l(RandomSelect(4,4)) Note=Scale(Random(1,7)) Note
]
//---------- ここまで ----------
確かに沖縄風の音だ。このSystem.KeyFlagを使えば、いろんな民族音楽で使われている音列を簡単に生成できるかもしれない。
「サクラ」で配列を使ってみる
プログラムで音を自動的に作り出す方法として、今まではRandom関数でノート番号を作り出していた。12音階のような曲はこれでもいいのだが、音階が決まっているような場合にはノートナンバーによる指定は面倒だ。
「
サクラ」では、一般のプログラミング言語のように
配列を使うことができるので、今日は、音階の配列を作り、この配列の中からランダムに音を選ぶ方法を試してみる。
まず、長音階の7つの音を配列名Scaleに定義する。標準から3オクターブの範囲でこの7音からランダムに音を100個作ってみる。
//---------- ここから ----------
Array Scale = ({ド},{レ},{ミ},{ファ},{ソ},{ラ},{シ})
Str Note
[100 @(01)
o(RandomSelect(4,5,6)) l(RandomSelect(4,8)) Note=Scale(Random(1,7)) Note
]
//---------- ここまで ----------
音階や旋法を決めて作曲する場合は、配列を使う方が便利そうだ。
「サクラ」で純正律のハーモニーを聞く
シンセサイザーは標準では
12平均律に調律されている。ところで、12平均律が考案される前は、各音程の幅が
整数の比で表せる
純正律という調律が使われていた。純正律ではド:ミ:ソの周波数の比率が3:4:5になる。
整数の比で表せる音程というのは、和音がよく調和する。12平均律では、ド:ミ:ソの周波数比率が3:4:5から少しずれているので12平均律の和音は響きが悪い。
この、ずれている値を、昨日までにやった「サクラ」の
FineTuneの機能を使って補正してやれば、純正律の響きが「サクラ」で再現できるかもしれない。
FineTune(mm) ・・・・ m=0-64-127 (-100 - 0 - +99.99セント)
で、どのぐらいずれているのかというと、例えば、純正律のEの音は平均律より14セント低い。この分をmmの値で補正すれば純正律のEの音になるはずだ。mmは100セントで64になるように換算する。
Eの補正値(mm) = 64-(14*0.64) = 55
同様にGの補正値も計算してみる。
Gの補正値(mm) = 64+(2*0.64) = 65
この値で、EやGの音をチューニングすれば、純正律に近い響きが聞けるはずだ。
//---------- ここから ----------
Tempo=40; TR(1)@(Clarinet)l1; TR(2)@(Clarinet)l1; TR(3)@(Clarinet)l1
TR(1)
c FineTune(64)c FineTune(64)c FineTune(64)c FineTune(64)c FineTune(64)c
TR(2)
e FineTune(55)e FineTune(64)g FineTune(65)g FineTune(64)e FineTune(55)e
TR(3)
r FineTune(64)r FineTune(64)r FineTune(64)r FineTune(64)g FineTune(65)g
//---------- ここまで ----------
最初にド・ミの和音を、12平均律と純正律で鳴らしてみる。次に、ド・ソの和音を、12平均律と純正律で鳴らしてみる。最後にド・ミ・ソの和音を、12平均律と純正律で鳴らしてみる。
聞いたみてどうだろうか。ちょっとわかりにくいかもしれないが、確かに微妙に和音の響きが違う。
「サクラ」で作ったMIDIフィルを携帯電話で再生
最近の
携帯電話には、かなり高機能な
MIDI音源が搭載されている。
着メロ発展史(音源ICチップ年表)
http://www.redstar.co.jp/chakumelo.htm私が持ってる機種には、ローム製の64和音PCM音源が使われている。
主な仕様
・128音色+ドラムセット47音色+32効果音
・最大64和音までの同時再生
・イコライザ機能
・リバーブ機能
・テンポ調整機能
・音程調整機能
もうこれは立派なMIDI音源だ。
昨日「サクラ」で作った四分音の曲を、
MIDI形式で保存し、このファイルを
メールに添付して携帯に送り、
携帯電話で再生してみた。
驚いたことに、四分音がきっちり再生される。FineTuneの機能が使えるということだ。これはひょっとすると、
携帯をチューナー代わりに利用するなんていうことができるかもしれない。
「サクラ」で四分音で曲を作ってみる
「
サクラ」で微分音が出せることがわかったので、半音をさらに半分に割った
四分音を使って曲を作ってみる。
FineTuneでは、パラメータの値が64で平均率の中央の音になるので、この半分の32を指定すれば四分音低い音がでる。半音と四分音が均等に出現するようにして100個の音を作ってみる。
//---------- ここから ----------
[100 @(Glockenspiel) FineTune(RandomSelect(32,64)) n(Random(40,80))8]
//---------- ここまで ----------
なんか不思議な音階の音楽ができあがる。でも、ちょっと美しくないですか。
「サクラ」で微分音を出してみる
鍵盤付きの
シンセサイザーは、普通は
12平均率に調律?されているのだが、音源によっては、この平均率の周波数から微妙に音程をずらすMIDIコマンドが用意されている。
このコマンドを上手く使えば、半音のさらに半音といったような、いわゆる微分音を出すことが可能だ。
微分音
http://ja.wikipedia.org/wiki/%E5%BE%AE%E5%88%86%E9%9F%B3Windowsに標準で付いてくるMIDI音源は、一応
GS音源の仕様になっているので、この機能が使える。
「
サクラ」には、
FineTuneというチューニングを微調整するコマンドがある。
FineTune
http://oto.chu.jp/doc/command/index2.htm#cmd16このコマンドの仕様をみると、半音を64段階に細かくすることができるようだ。早速試してみよう。
半音を4等分し、微調整の度合いを4段階に変えながらドレミファソと鳴らしてみる。音程の差がわかりやすいように、Track1に12平均率の音程、Track2に微調整した音程を出して重ねてみる。
最初の音階は、FineTune(0)になるから完全に半音ずれている。最後の音階は、FineTune(64)になって、Track1の平均率の音程と重なる。
//---------- ここから ----------
For(Int I=0; I<=64; I=I+(64/4)){
TR(1) cdefgr
TR(2) FineTune(I) cdefgr
}
//---------- ここまで ----------
微分音程が出せれば、コンピュータ音楽でしかできないような面白い曲を作ることができるかもしれない。
「サクラ」で関数を定義してみる
「
サクラ」では、一般のプログラミング言語のように
関数が定義できる。関数の使い方は、他の言語とほとんど同じだ。
Function 関数名(型 引数1=省略値,型 引数2=省略値,型 引数3=省略値...){ 定義内容}変数と関数
http://oto.chu.jp/doc/kouza/mml4.htm昨日の作ったプログラムの引数付き文字列マクロの部分を関数に置き換えて、関数Composeを作ってみる。生成する音の数、楽器、音域をパラメータとして与えられるようにしてみた。
//---------- ここから ----------
Function Compose(Nno,Vno,Nmin,Nmax){
For(Int I=1; I<=Nno; I=I+1){
@(Vno) n(Random(Nmin,Nmax))(RandomSelect(4,8))
}
}
TR(1) Compose(100,GrandPiano,30,90)
TR(2) Compose(100,GrandPiano,30,90)
TR(3) Compose(100,Violin,40,80)
//---------- ここまで ----------
関数が使えるようになれば、プログラムによる作曲のテクニックの範囲もかなり広がってくる。
「サクラ」で引数付き文字列マクロを使う
「
サクラ」の
文字列マクロは、マクロという名前から想像できるようにパラメータを使うことができる。
パラメータはの使い方は、実行時に変更したい文字列の位置に、
#?1 #?2 #?3 ...というようにパラメータの番号を書いておく。
昨日のプログラムをちょっと変更して、ノートの繰り返し回数と楽器名をパラメータにして文字列マクロを使ってみる。
//---------- ここから ----------
#part1 = {[#?1 @(#?2) n(Random(040,080))(RandomSelect(4,8))]}
#part2 = {[#?1 @(#?2) n(Random(040,080))(RandomSelect(4,8))]}
TR(1) #part1(100,GrandPiano) TR(2) #part2(100,Violin)
//---------- ここまで ----------
「サクラ」では、GMの楽器名が予め定義されているので、これを変数名のようにして使える。
GMレベルの楽器定義
http://oto.chu.jp/doc/command/index2.htm#cmd17
「サクラ」で文字列マクロを使う
「
サクラ」には、
文字列マクロという非常に便利な機能がある。これは文字列変数と同じように使えるのだが、変数宣言をしなくても使える。
文字列マクロは次のように定義する。
#マクロ名 = { 文字列 }2つのパートを文字列マクロで定義して、これをTrack1とTrack2で演奏させてみる。
//---------- ここから ----------
#piano = {[100 @(01) n(Random(040,080))(RandomSelect(4,8))]}
#violin = {[100 @(41) n(Random(040,080))(RandomSelect(4,8))]}
TR(1) #piano TR(2) #violin
//---------- ここまで ----------
文字列マクロを使えば、MMLをデータのように扱える。プログラミングで音楽を作るには非常に便利な機能だ。
「サクラ」でランダムに音量を変える
「
サクラ」には、
音符属性オプションという機能がある。音符属性というのは、今までに説明してきた l q v などのコマンドだ。
音符属性オプション
http://oto.chu.jp/doc/reference/note-option.htmこの音符属性オプション指定の方法に、値をランダムで曖昧にする(
.Random)というのがある。これを、ベロシティー(v)に適用すれば、音量をランダムに変化させることができる。
指定方法は、次のようにする。
v.Random(n)nを0以上に設定すると、それ以降の値をランダムに上下する。音量の初期値を100に設定して、以後の発音を音符毎に音量をランダムに変化(100から上下)させてみる。
//---------- ここから ----------
v100 v.Random(50)
[100 @(1) n(Random(40,80))]
//---------- ここまで ----------
モニター画面でベロシティーの値を確認すると、確かに値がノート毎にランダムに変化する。
「サクラ」でCresc & Decresc
「
サクラ」には音量を変える方法として、徐々に音を大きくする
クレッシェンドや、その逆の
デクレッシェンドというコマンドもある。
だんだん音を大きく
http://oto.chu.jp/doc/command/118.htm指定できる 音量の範囲は、ベロシティと同じ 0~127 までの値となる。
音色をバイオリンにして、1小節毎に音を大きくしてみる。
//---------- ここから ----------
TR(1)
[10 Cresc(1,20,100)[4 @(41) n(Random(40,80))]]
TR(2)
[10 Cresc(1,20,100)[4 @(41) n(Random(40,80))]]
//---------- ここまで ----------
デクレッシェンドの方も同じように使える。
だんだん音を小さく
http://oto.chu.jp/doc/command/119.htm
「サクラ」で音符毎の音量を指定するには
今までやった例では、音量を指定していないので全て標準の音量で演奏されている。ところで、「
サクラ」で
音量を変える方法が3つある。
ベロシティ・フェーダ
http://oto.chu.jp/doc/faq/help13.htm音符毎の音量を指定する場合は、
v(n) のように指定する。
ベロシティ(音の強さ)を指定
http://oto.chu.jp/doc/command/3.htm指定できる n の範囲は、0~127 までとなる。なお、ベロシティを省略した場合は、初期値 100 が指定されたことになる。
また、ベロシティ指定は、ノート指定と一緒に、
n(NoteNo)[,(l),(q),(v),(t),(o)] のように書くことも可能だ。(vの位置がベロシティ指定)
ノート番号を指定して発音
http://oto.chu.jp/doc/command/21.htmそれでは、早速やってみることにする。ベロシティを、40、80、120の中からランダムに選び、ノート番号40~80までの音で鳴らしてみる。
//---------- ここから ----------
[100 @(1) n(Random(40,80)),,,(RandomSelect(40,80,120))]
//---------- ここまで ----------
演奏モニターで、ベロシティの値が変化するのを確認できる。
「サクラ」でゲートタイムを指定するには
MIDIの仕様に
ゲートタイム情報というのがある。ゲートタイムというのは、音を出すノートオンの情報が送られてから、ノートオフの情報が送られるまでの時間のことで、デュレーションとも呼ばれる。ゲートタイム情報を使えば、
スタッカートやタイのような表現や、前の音を発音させながら次の音も発音させるといっったことが可能だ。
「
サクラ」でゲートタイムを指定する場合は、
q(n) のように指定する。
ゲートタイム(発音時間)の割合を指定
http://oto.chu.jp/doc/command/2.htm割合指定になるので、指定できる n の範囲は、0~100 までとなる。なお、ゲートタイムを省略した場合は、初期値 80 が指定されたことになる。
数値 n の値を100以上にすると、前の音が次の音に重なる。これを積極的に利用すれば面白い効果も出せそうだ。
また、ゲートタイム指定は、ノート指定と一緒に、
n(NoteNo)[,(l),(q),(v),(t),(o)] のように書くことも可能だ。(qの位置がゲートタイム指定)
ノート番号を指定して発音
http://oto.chu.jp/doc/command/21.htmそれでは、早速やってみることにする。ゲートタイムの割合を、20%、80%、100%の中からランダムに選び、ノート番号40~80までの音で鳴らしてみる。
//---------- ここから ----------
[100 @(74) n(Random(40,80)),,(RandomSelect(20,80,100))]
//---------- ここまで ----------
ゲートタイムの値に100以上を指定すると、次の音に重ねることがでできる。
//---------- ここから ----------
[100 @(74) n(Random(40,80)),,200]
//---------- ここまで ----------
「サクラ」で和音を作るには
今まで試した「サクラ」のプログラムでは、各トラックは同時に一つの音だけしか出していない。
「
サクラ」で同時に複数の音を指定する(
和音の作る)方法は色々あるのだが、一番簡単な方法は、発音する音を複数指定して、それを記号「'」で囲むという方法だ。
和音を鳴らす例
http://oto.chu.jp/doc/faq/faq02.htm#1それでは、早速やってみることにする。ノート番号40~80までの音をランダムに2つ選び、同時にピアノの音で鳴らしてみる。
//---------- ここから ----------
[100 @(1) 'n(Random(40,80))n(Random(40,80))']
//---------- ここまで ----------
楽器を変えて音を3つにしたバージョンも試してみよう。
//---------- ここから ----------
[100 @(72) 'n(Random(40,80))n(Random(40,80))n(Random(40,80))']
//---------- ここまで ----------
「サクラ」でMIDI形式ファイルを読み込む
「サクラ」には、MIDIファイルを読み込んでMMLに変換するという機能が実装されている。いわばコンパイルの逆のこと(
逆コンパイル)ができるのだ。
方法は、「
サクラ」のメニューから、
入力支援→MIDIファイルをMMLへ変換を選ぶ。
試しに、昨日保存したMIDIファイルを変換してみる。
変換が完了すると自動的に演奏が始まる。
これは、いわゆるリバースエンジニアリングだなー。ネット上にたくさん公開されているすばらしいいMIDIデータを読み込んで、どんな造りになっているのか研究してみるのも勉強になるかもしれないです。
「サクラ」でMIDI形式ファイルで保存する
「
サクラ」は、いわば
MMLコンパイラーだ。MMLで書かれたプログラムをコンパイルしてMIDIデータを生成する。
いままで「サクラ」から直接MIDI音源にデータを送って演奏させてきたのだが、実際の「サクラ」の動作としては、演奏ボタンを押すと、まず編集画面にあるMMLをコンパイルし、エラーがなければMIDIデータを作成して、このMIDIデータを音源に送っていたのだ。
ということで、当然このMIDIデータは保存できるのだ。下のプログラムを
MIDIデータとして保存してみる。
//---------- ここから ----------
Track(1)
[100 @(1) n(Random(40,80))(RandomSelect(4,8))]
Track(2)
[100 @(1) n(Random(40,80))(RandomSelect(4,8))]
//---------- ここまで ----------
方法は、「サクラ」のメニュー画面から、
ファイル→MIDI形式で保存を選ぶ。
保存するファイル名を指定する画面が出るので、ファイル名(拡張子
.mid)を付けて保存する。
こうして保存したMIDIデータは、
SMF(Standard MIDI File)という形式のファイルだ。
SMFとは
http://www.b-sharp.com/midi/spec1/smf001.htmlMIDIファイル(SMF)は、MIDIプレーヤーに読み込んでMIDI音源を使って演奏させることができるのだが、最近の携帯電話はMIDIファイルを再生できるものが多いから、携帯電話でだって演奏させることができる。
下の画像は、
IrfanViewに読み込んで、再生しているところだ。IrfanViewは、MIDIデータの再生までできる便利なソフトなのだ。
ところで、SMFにはデータの記録形式によって、フォーマット0、フォーマット1、フォーマット2の3種類のフォーマットがある。
SMFのフォーマット
http://www.b-sharp.com/midi/spec1/smf002.htmlそして、MIDファイルの構造はこんな感じなっているのだ。
SMFの構造
http://www.b-sharp.com/midi/spec1/smf004.htmlMIDIファイルの先頭には、フォーマットの種類やトラック数、時間単位の情報が記録されている
ヘッダチャンクという部分がある。
IrfanViewでは、読み込んでいるファイルを16進表示で見ることができる。IrfanViewに、保存したMIDIデータを読み込んで、F3キーを押してみる。
チャンクタイプ“MThd”や“MTrk”の文字を確認することができる。これをみると「サクラ」のMIDIファイルはフォーマット1で保存されている。
「サクラ」でチャンネル毎に別の音源を割当
今まで「
サクラ」から出力されたMIDIデータを、savihostでスタンドアロン化した
ソフトシンセに送って音を出してきた。この場合、「サクラ」のMIDIの出力先とソフトシンセのMIDIの入力先を同じにすることで、ソフトシンセ側でMIDI信号を受けることができたわけだ。
ということは、下の画像のように二つの別のソフトシンセを立ち上げて、MIDIの入力先を同じにすれば両方のソフトシンセをならすことができる。
この状態で下のプログラムを実行すると、確かに2つのパートの音が両方のソフトシンセで鳴る。
//---------- ここから ----------
Track(1)
[100 @(1) n(Random(40,80))(RandomSelect(4,8))]
Track(2)
[100 @(1) n(Random(40,80))(RandomSelect(4,8))]
//---------- ここまで ----------
ところで、せっかくパートを分けてあるのだから、Track1とTrack2を別々のソフトシンセで鳴らせてみたいところだ。
savihostは、
標準の設定では1~16の全てチャンネルを受信するようになっている。そのため両方のソフトシンセでTrack1とTrack2が鳴ってしまうわけだ。
では、どうしたらいいのかというと、それぞれのソフトシンセで受信するチャンネルを制限してしまえばいいのだ。
方法は、ソフトシンセのメニューで
Effect→Filtersを選択する。すると下のような
Filter Settingsという設定画面が出る。
Channelsのところを見ると全てのチャンネルを受信する(フィルターが掛かっていない)状態になっている。このセッティングを、受信するチャンネル以外にチェックを入れてフィルターを掛ける。
Pipe Organがチャンネル1だけを受信、4Front Pianoがチャンネル2だけを受信するよに設定して、もう一度演奏させてみる。
Track1がPipe Organ、Track2が4Front Pianoで演奏される。
「サクラ」でパンポットを指定するには
昨日は、色んなパーカッションの音色を聴いてみたのだが、楽器により音が中央から聞こえたり、左や右の方から聞こえたりしたと思う。
MIDIの規格では、ステレオの左右の定位(
パンポット)の値を
0~127で指定できるようになっており、左が0、右が127、中央が64のようになっている。
左 0<------------->64<-------------->127 右
パンポット
http://www.cakewalk.jp/MC/glos/html/glos15is.shtmlパーカションの場合、このパンポットの値は初期値が次のように決められている。
スタンダードのドラムセット
http://www.tim.hi-ho.ne.jp/t-inukai/gmtones.html#drumsこのパンポットの値を「サクラ」で指定する場合の書式は次のようになっている。
パンポットを書き込む
http://oto.chu.jp/doc/command/50.htmPanpot(n)は、省略して
P(n)のように書いても良い。
それでは、早速試してみよう。前に書いた2台のピアノの演奏を左と右から音が出るようにしてみる。
//---------- ここから ----------
Track(1) P(0)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
Track(2) P(127)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
//---------- ここまで ----------
まるで、本当にステージにピアノが並んでいるように聞こえないだろうか。
「サクラ」でGSのドラムセットも聴いてみる
昨日聴いていたパーカッションの音はGM規格の音だと思っていたのだが、実際は
GS規格の音だ。内蔵MIDI音源の名前がMicrosoft GS Wavetableだから当然そういうことになる。
ところで、GM規格とGS規格の音色マップはほとんど同じ(楽器の名前が微妙に違っている)だ。さらにGS規格では、
ノート番号27~87までのの音程に各々のパーカッションの音色が定義されている。
Percussion Key Map
http://odasan.s48.xrea.com/dtm/drummap.htmlということで、昨日のプログラムのノート番号の範囲を27~87に変えれば全部の音を聴くことができる。
ところで、GMの新しい規格では、基本(STANDRD)のパーカッションセットの他に、JAZZやORCHETRAといった8種類の音色セットが使えるようになっている。
この音色セットの切り替えは、プログラムチェンジ(Voice番号)で行うようになっている。sfzで確認するとBNAK128のPROGRAMの内容が下の画像のようになっているのがわかる。
それでは、「サクラ」のメニューにある設定→マルチメディアの設定で、MIDIの既定のデバイスをMidiYokeに戻してからsfzを起動し、GM/GSのSoundFontを読み込んで見る。
CHANNELを10、BANKを128にセットし、PROGRAMを適当に選んで、「サクラ」のプログラムを実行してみる。
PROGRAMをELECTRONICやORCHESTRAに変更して聴いてみると、これが結構面白い。各音色セットで微妙に楽器の種類が異なっている。ORCHETRAセットにはティンパニーの音色なんていうのが入っているのがわかる。
「サクラ」でGMのドラムセットを聴いてみる
GM規格では、今まで聴いて確かめたように128の楽器の音色が定義されているのだが、他に
パーカッションについても、
47の音色が定義されている。
で、このパーカッションの音をどうやって区別して出すのかというと、ピアノの音色などのようにプログラムチェンジ(Voice番号)で指定するのではなく、ドレミのような音程(
ノート番号)を指定して区別するのだ。
GM規格では、
ノート番号35~81までの音程に各々のパーカッションの音色が定義されている。
GM パーカッション音色とノート・ナンバー対応一覧
http://dspss.iamas.ac.jp/files/GM-percussions.pdf実際には、チャンネル10に、このノート番号の音を出力すると対応するパーカッションの音がでる。早速ためしてみよう。
//---------- ここから ----------
CH(10)
For(Int Vno=35; Vno=<81; Vno++){[4 n(Vno)]}
//---------- ここまで ----------
結構いろんな打楽器の音が入っている。
「サクラ」のトラックとチャンネル指定
昨日は「
サクラ」のTrack番号を使って複数のパートを作る方法を試してみたのだが、MIDIには複数パートを演奏させる方法として、もう一つ
チャンネルという重要な仕組みがある。
MIDIチャンネル
http://www.b-sharp.com/midi/spec1/midi004.html今日は「サクラ」のチャンネルの使い方を試してみる。まず、今までsfzなどのソフトシンセを使っていた場合は、「サクラ」のメニューにある設定→マルチメディアの設定で、MIDIの既定のデバイスを、Windowsの内蔵MIDI音源であるMicrosoft GS Wavetable SW Synthに設定を戻して欲しい。
そして、昨日までやったRandomに音を作るプログラムをTrack10に書いてみる。
//---------- ここから ----------
Track(10)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
//---------- ここまで ----------
ピアノの音ではなく、
パーカッションの音が鳴ったと思う。実はMIDIのGM規格では、
MIDIチャンネル10はリズム演奏用と決められているのだ。
では、何でTrack(10)がMIDIチャンネルの10になるのかというと、「サクラ」では
チャンネルの指定を省略した場合は、トラック番号と同じチャンネル番号を指定したことになるのだ。
「サクラ」でチャンネル指定を明示的に行う場合は、
Channel(n)のように指定(n=1~16)する。ChannelはCHという省略型も使える。
トラックにチャンネルを設定
http://oto.chu.jp/doc/command/24.htm要するに、
チャンネルはトラックと1対1の関係だ。トラックをどのチャンネルに出力するかを指定するわけだ。
Track(1) CH(10) と書けば、トラック1の音をチャンネル10で鳴らす指定になる。
シーケンサートラックとMIDIチャンネルの関係
http://music.web-sun.com/dtm/dtm4.htmlということで、今まで「サクラ」でトラック指定もチャンネル指定も省略した場合はTrack(1) CH(1)を指定したことになっていたのだ。
ところで、sfzでSoundeFontを使ってGM/GS音源を鳴らす場合、チャンネル10は自動的にリズム楽器にならなかった。sfzでGM規格のMIDIを鳴らす場合は、もしチャンネル10が使われている場合は、手動でチャンネル10の音色をBANK128のドラムセット(Standaard)に切り替えておく必要があるようだ。
「サクラ」で複数のパートを作るには
今日は、合奏やオーケストラのように
複数のパートを指定する方法を説明する。「
サクラ」で複数のパートを作るのはすごく簡単だ。MMLの前に
Track番号を指定すればよい。
トラック番号を指定する
http://oto.chu.jp/doc/command/23.htmTrack(パート)はいくつ作ってもよく、各パートはトラック番号で区別される。Track指定を省略した場合はTrak1を指定したことになる。いままでは、Track指定をしていなかったから、Track1の音が鳴っていたわけだ。
そこで、昨日と同じプログラムをTrack1とTrack2に書いてみる。演奏モニターをみるとわかるが、Track1とTrack2の両方に音が出ているのがわかる。これで2台のピアノによる演奏になる。
//---------- ここから ----------
Track(1)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
Track(2)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
//---------- ここまで ----------
うーん、だんだん音楽っぽくなってきました。
ということで4台のピアノにしてみたらどうなるかを実験してみた。Track1,3,5,7の4つのTrackを使ってみる。
//---------- ここから ----------
Track(1)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
Track(3)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
Track(5)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
Track(7)
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
//---------- ここまで ----------
「サクラ」を使えば、こんな曲?だって簡単にできるのだ。
「サクラ」で音符の長さを指定するは
昨日までは乱数を使って音程を作り、これを「
サクラ」にノート番号指定で演奏させてみた。これだと、音の高さは色んな音になるのだが、音符の長さはみな同じになっている。
ところで、ノート番号を指定して発音するコマンド「
n」の構文は次のような書式になっている。ノート番号に続けて色んな音符属性を指定できるのだ。
n(NoteNo)[,(l),(q),(v),(t),(o)]
http://oto.chu.jp/doc/command/21.html・・・・・音の長さをn分音符で指定(初期値4)
http://oto.chu.jp/doc/command/21.htmq・・・・・音の長さに対するゲートタイムの割合をパーセントで指定(初期値80)
http://oto.chu.jp/doc/command/2.htmv・・・・・ベロシティ(音の強さ)を指定(0~127の範囲)(初期値100)
http://oto.chu.jp/doc/command/3.htmt・・・・・発音のタイミングをステップ単位で指定(初期値0)
http://oto.chu.jp/doc/command/4.htmo・・・・・オクターブ(音階)を指定(0~10の範囲)(初期値5)
http://oto.chu.jp/doc/command/1.htmということで、今まで実験したノート番号指定の演奏は、これらの値を全て省略した状態(初期値が指定された状態)ということだったのだ。だから、音符の長さは4分音符を指定したことになっていた。
そこで、今日は音の長さ
l を任意に指定してみることにする。昨日のプログラムをちょっと修正して、音符の長さを4部音符と8部音符がランダムになるようにしてみる。演奏する楽器は、音色番号1のピアノに固定してみた。
//---------- ここから ----------
[100 @(1) n(Random(021,108))(RandomSelect(4,8))]
//---------- ここまで ----------
これで、さらに現代音楽っぽい雰囲気になってた。
「サクラ」でランダムに音を作るには(Random)
今日は、コンピュータの作曲には欠かせない
ランダムに音を生成する方法を試してみる。
「
サクラ」には普通のプログラミング言語にあるような
Random関数が用意されている。
指定された範囲の乱数を返す
http://oto.chu.jp/doc/command/94.htmこの乱数を作る関数を使って、ピアノ系の音色(音色番号1~5)でピアノで出せる音域の音を100個作り演奏させてみる。
//---------- ここから ----------
[100 @Random(1,5) n(Random(021,108))]
//---------- ここまで ----------
ちょっと現代音楽っぽい雰囲気になってきました。