非公式チュートリアル01 note chord chord-seq
ここでは基本的なクラスであるnote, chord, chord-seqおよびそれらを統括するファンクションom+, list, x-append, flatについて扱う。
ここで扱うnote, chord, chord-seqは、いずれも音程(およびそれらのゲート、ヴェロシティ、MIDIチャンネルなど)を格納するための『入れ物』である。これをクラスと呼ぶ。これに対し、それらの値について計算を行うためのオブジェクトをファンクションと呼ぶ。
まず左上から。noteを作成する。オブジェクトの新規作成はcommand+クリックで行う。またはメニューにあるclass, functionから任意のオブジェクトを選ぶ。
以下の画像は上よりそれぞれnote, chord, chord-seqを並べたものである。noteを作成すると、まず左側のように緑のクラスが表示される。これの中身を見たい場合は、そのクラスをクリックして選択しmキーを押すと、中身が表示される。さらにnキーを押すと、オブジェクトの名前が表示される。note, chord, chord-seqは最初のうちは見分けづらいので、初心者のうちはオブジェクト名を表示させておくのも良いだろう。
デフォルトではC4が入力されているが、これをダブルクリックすると別ウィンドウが開き編集できる。クリックして上下キーでも編集できる。chordで音を追加する場合はcommand+クリック。一度適当な位置で入力してから上下キーで修正すると良いだろう。
さてこのパッチでは最初のnoteはC4のまま使用するので、別ウィンドウを閉じる。すると左上に×マークがつく(上記画像右上を参照)。この状態をブロックという。ブロックを指定・解除するときはbキーで行う。またブロック状態になったまま×マークをクリックすると、『×』(ブロック)→『1』(ワンスモード)→『λ』(ラムダモード)→『↓』(スルーモード)とマークが変化する。これはいずれまた解説するので、今はうっかりクリックして×以外のマークになってしまったら、クリックし続けるか一旦bキーでブロックを解除してから再度ブロックして『×』(ブロック)に戻しておこう。
さていよいよパッチ解説に入る。command+クリックしてからom+と入力し、ファンクションom+を作成する。これは足し算のためのオブジェクトである。ただの+を入力すると+という異なるオブジェクトが出てくる。これには画像でLISPと書いてある(これはそもそもOpenMusicがLISPという開発言語をベースに製作されているためである)。今回は単純な足し算なのでこれでも良いが、om+はリストに対しても均等な足し算を行うので、OpenMusicではなるべくom+やom-などomの名のついた計算ファンクションを使うように心がけよう。
先ほど作ったnoteの下の左から2番目のアウトプット(1番目ではない!)をcommand+クリックしてみよう。何も起こらない?いや、これはエヴァリュエートevaluate(評価)という行為で、このアウトプットを「評価した」事になる。
(Max/MSPではインレット、アウトレットという呼び方をするが、OpenMusicではインプット、アウトプットである。またLISPは0からものを数えるので、一番左はinput 0であり、input 1は左から2番目にあたる。)
command+shift+Lを押すと、LISPウィンドウと呼ばれるものが現れる(ウィンドウ名にはOM Listenerと書いてある)。このLISPウィンドウに、先ほどクリックして評価した結果の数値が出力されているはずである。6000という数値が出ていれば、正しく評価されている。
この6000という数値は、C4(中央ド)を表すものである。他のシーケンサソフトなどでMIDIに詳しい人は、C4がMIDIナンバーで60を表すということを知っている人もいるだろう。(ソフトの規格によってはC3と表現するものもある。とにかくここでは中央ドのこと。正確な日本語で言うなら「一点ハ音」である)OpenMusicでは、半音よりもさらに狭い微分音をセント(100分の1)単位で記述できる。したがってC#4は6100となるが、例えば6050と表記することでその間の四分音を扱える。
またこの左から2番目のアウトプットをクリックしたままドラッグすると線が延びるので、それをom+の左側のインプットに繋ぐ。
今度はom+の右側のアウトプットをshift+クリックする。すると上に線で繋がった四角いボックスが現れる。shiftを伴わない単なるクリックだけでもボックスは現れるが、これは数値を入力した後それが見えない(インプットをクリックすれば確認できる)。よってこのshift+クリックで常にボックスを表示させておくやり方を標準的にお勧めする。
そのボックスに400と入力しよう。ここで一旦om+をクリックし、(ここで日本語入力がオンになっていたら必ずオフにすること)vキーを押す。するとこのom+ファンクションが評価される。LISPウィンドウを見てみると(command+shift+L)、この計算結果として6400が表示されているはずである。つまり6000+400=6400である。
そのom+の下にnoteを作成し、mキーで中身を確認しよう(パッチ画像参照)。ここではまだ新しく作ったnoteはC4のままである。このnoteの左から2番目のインプットに、先ほどのom+のアウトプットからコードを繋ぐ。そしてそのnoteをvキーでevaluateすると、E4(ミ)が表示されるはずである。
さらにもう一つ同じものを作ろう。同じ部分はドラッグで囲ってcommand+dキーを押せばコピーできる(パッチ画像参照)。同じようにコードを繋ぎ、今度は700を入力して6400, G4(ソ)の音を作ろう。
さて、これで元の音のC4およびom+によって得られたE4, G4があるので、これらをまとめてドミソの和音を作ってみよう。
まずファンクションlistを作成する。しかし最初に作った状態ではインプットが1つしか現れない。>キー(日本語キーボードではshift+.)を押すごとにインプットの数を増やすことができる。逆に減らすには<キーを使う。これは他のオブジェクトでも求められる重要な操作方法だから、よく覚えておこう。ここではlistのインプットを3つにする。またわかりやすいように幅を広げてみよう。幅を広げるときにはクラスと同様にオブジェクトの左下をドラッグして動かす。
listのインプットを3つにしたら、それぞれのインプットに先ほどのnoteのクラスの左から2番目のアウトプット(LISPは0からものを数えるのでoutput 1)からコードを繫ぐ。(画像参照)
この状態でlistをvキーでevaluateしてみると、LISPウィンドウには (6000 6400 6700) と括弧に入った3つの数字が表示される。
今度はlistの下にクラスchordを作成する。先ほどのnoteと同じようにmキーで中身を表示し、見やすいように広げておこう。
このchordの左から2番目のインプット(しつこいが0から数えるのでinput 1)に上のlistのアウトプットからコードをつなぐ。ここでchordをevaluateすると、ドミソの和音が表示されるはずである。chordをダブルクリックで開き、別ウィンドウに出てきた再生ボタンを押して音を鳴らしてみよう。
今度は左下のchordと書いてある部分をクリックし、orderに変えてみよう。和音の棒(符幹)が消え、それぞれの音符が並べられた表示になる。この状態で再生ボタンを押すと、ド、ミ、ソと一音ずつ順番に鳴る。
今度はchord-seqを作る。seqとはシークエンスの略である。これの左から2番目のインプット(0から数えるのでinput 1)に先ほどのlistからの(6000 6400 6700)を入れてevaluateしてみると、四分音符3つに分かれてド、ミ、ソが表示される。再生してみると、一音ごとに分かれて再生される。
ではchord-seqで和音を扱うにはどうするかというと、2重の括弧を入力する必要がある。先ほどのlistからの出力は(6000 6400 6700)となっているわけだが、これの下にもう一つlistを作る(インプットの数はデフォルトの1つのままで良い)。これの出力結果は ((6000 6400 6700)) という2重括弧になる。先ほどの1つの括弧にlistを通すことでもう1つ括弧が足されるのである。ここでchord-seqをもう一つ作ってそこから繋げると、この2重括弧によってchord-seq内で和音として表示される。
まとめると、
- noteには1つの数値のみが入る。
- chordには1つの括弧で囲まれた複数の数値(和音)が入る。(サンプルパッチでは触れなかったが、単体の数値(単音)を入れるときにも括弧をつける必要がある。この時はlistを通せば良い。)
- chord-seqには2重の括弧、つまり1つめの括弧で囲まれた2つめの括弧で囲まれた複数の数値(和音)または単体の数値(単音)が入る。1つの括弧で囲まれた複数の数値はchord-seqではすべて単音として認識される。
今回のチュートリアルではこのことを覚えておこう。
ではもう一歩進んでみよう。
今度は右側の空いたスペースにnoteを作る。今度はA4(ラ)を作ってみよう。ダブルクリックで中を開いてマウスのドラッグまたは上下キーで編集する。編集後にウィンドウを閉じると自動的にブロックされるが、もしブロックされていなかったらブロックしておくのを忘れずに。
先ほどドミソを作ったchordと今回のA4(ラ)のnoteのそれぞれ左から2番目のインプット(0から数えるのでinput 1)をlistでまとめる。(画像参照)このlistをevaluateすると、LISPウィンドウには ((6000 6400 6700) 6900) と表示される。
これをchord-seqに繋げてevaluateすると、ドミソとラが分かれて表示される。
ではこのドミソ(6000 6400 6700)とラ6900を一つの括弧の中に納めるにはどうするかというと、x-appendというファンクションを使う。x-appendを作成するとデフォルトでは2つのインプットがあるが、listと同じように<キーや>キーでインプットの数を増減できる。ここでは2つのままでよい。
ドミソのchordとラのnoteをx-appendに繋ぐ(画像参照)。これをevaluateすると (6000 6400 6700 6900) という一つの括弧の中にA4(ラ、6900)が収まっている。これをchordに繋げばドミソラの和音となる。
(サンプルパッチでは触れていないが、ここからさらにchord-seqに和音として繋ぎたい場合は、先ほどと同じようにlistを通して2重括弧にすればよい。)
今度は括弧を取り去る方法も覚えておこう。先ほどの ((6000 6400 6700) 6900) としてまとめたlistからの出力の後に、ファンクションflatを作って繋ぐ。すると2重括弧が取り去られ、 (6000 6400 6700 6900) という一つの括弧のみになる。この状態でchord-seqに繋ぐと、一音ずつが分かれてド、ミ、ソ、ラと表示される。
これで括弧の数とnote, chord, chord-seqそれぞれのクラス、括弧(和音または単音)同士の繋ぎ方list, x-append, 括弧の除去の仕方flatを覚えた。
今回はここまで。
今回はここまで。