MIDI チュートリアル 4:
基本的なMIDI シーケンシング

イントロダクション

このチュートリアルは、Max の seq オブジェクトを使ったシーケンシングをテーマに進めていきます。ここでは、基本的なシーケンス設定、再生(プレイバック)のスタート、ストップの機能について説明します。さらに、読み込んだシーケンスの再生速度をコントロールする方法についても調べます。

MIDI をベースとして作成される、数多くのMaxプログラムでは、MIDIイベントのレコーディングと再生(一般的には、シーケンシングと呼ばれます)は重要な処理になります。Max には MIDIシーケンシング処理を実現するためのオブジェクトがいくつかあります。その中でも、ノート情報やコントローラ情報、そしてそれ以外のMIDIメッセージのレコーディングや再生が可能であるにもかかわらず、最も扱いやすいインターフェイスを提供してくれるオブジェクトが seq オブジェクトです。

MIDIシーケンシングの非常に便利な点の1つは、出力するサウンドにほとんど影響を与えずに再生速度を変更できるということです。MIDIの受信側はサウンドの生成に対する責任を持ち、単にシーケンサから提供されるデータストリームに応答するだけです。このように、再生速度の変更は、MIDIシーケンシングの非常に重要な部分を占めています。このチュートリアルではこの点について深く追求します。

seqを使った基本的なシーケンシング

チュートリアルを開いて下さい

このチュートリアルパッチには、パッチのロジック部分による3つの領域があり、1つのseq オブジェクトに接続されています。左端の領域(1 と表示されています)は最も基本的なMIDIシーケンシングを示しています。seq オブジェクトは、アーギュメントとして指定されたMIDI シーケンスの名前を使って初期化されます。このシーケンスはパッチが開かれた際に読み込まれ、再生に使用されます。seq オブジェクトの左の出力が再生出力です。このアウトレットは生のMIDIデータをmidiflush オブジェクトに送信し、これが midiout オブジェクトに送られます。

midiflush オブジェクトは、生のMIDIストリームの中でのノートオン/ノートオフメッセージの対応を維持するために使用され、bang を受信するとノートオフメッセージを送信します。midiflush を使うと、シーケンスの再生の途中であっても、そのとき鳴っているすべてのノートを停止させることができます。パッチの上部にある stop メッセージをクリックすると、シーケンスをストップさせるだけではなく、midiflush に bang を送って、シンセサイザで鳴っているすべての音を停止させます。

midiout オブジェクトをダブルクリックして、システムに登録されている有効なMIDI出力デバイスを選んで下さい。button または start メッセージボックスをクリックして、シーケンスの最初から再生をスタートさせて下さい。seq オブジェクトに読み込まれたMIDI シーケンスは「通常のスピード」で再生されます。シーケンスの演奏が追ると、seq オブジェクトの右アウトレットからbang が出力されます。ここでは、この右アウトレットをbutton オブジェクトに接続し、シーケンスの終了が視覚的に表示されるようになっています。seq オブジェクトに接続されている各々のメッセージボックスをテストしてみて下さい。再生中に停止させて、midiflush オブジェクトによってどのような結果がもたらされるかを聴いてみて下さい。再生が常にシーケンスの最初からスタートすることにも注意して下さい。

再生速度の変更

次の領域(2 と表示されています)には、シーケンスの再生速度を変更する小さなプログラムがあります。これは、start メッセージへのアーギュメントを利用したものです。start メッセージに付け加えられた整数によって、再生速度が変更されます。再生速度の値が1024 の場合、通常の速さになります。したがって、512 では半分の速さ、2048 では2倍の速さになります。これは(最初から浮動小数点数による「速さの比」を使う場合に比べて)複雑に感じられるかもしれませんが、再生のために適切な値を計算することは簡単です。

ここでは、再生速度を指定するために、浮動小数点ナンバーボックスを使っています。そして、この値に 1024 を掛け、seq オブジェクトにとって適切な値を求めています。この値は int オブジェクトに格納されます。そして、Go! というメッセージボックスをクリックしてbutton をトリガすると、格納されている数値が start というメッセージボックスで適切なメッセージにフォーマットされ、seq に送信されます。button オブジェクトがあらゆるメッセージを bang に変換するということを思い出して下さい。そのため、Go! というメッセージボックス内のテキストは任意のもので構いません。

浮動小数点ナンバーボックスを0.5 に変更し、Go! というメッセージボックスをクリックして、これををテストしてみて下さい。さらに、浮動小数点ナンバーボックスを 2.0 にして、再び Go! をクリックして下さい。start メッセージへのアーギュメントを使用すると、簡単に再生速度をコントロールすることができます。しかし、これが使えるのは、再生のスタート時から速度を変更する場合に限られます。再生の途中で速度を変更するためには、tick メッセージを使用する必要があります。

tick メッセージを使った再生

右端の領域(3 と表示されています)では、再生中にシーケンスの再生速度を変更する方法を示しています。2つのメッセージによってこれを行なっています。その2つとは、startメッセージのヴァリエーション(アーギュメントとして -1 を指定したもの)、および tick メッセージです。start メッセージにアーギュメント -1 を指定した場合、seq オブジェクトの送信は内部クロックから切り離され、入力される tick メッセージに基づいてシーケンスを進めるようになります。

この例では、tempo オブジェクトを使ってbpm(beats per minute)の値を適切な tick に変換しています。tempo オブジェクトのアーギュメントはデフォルトの速さ(ここでは 120 bpm)、デフォルトのビート乗数(1)、全音符あたりのパルス数(96、24 パルスが4分音符に相当します)を設定しています。start -1 というメッセージボックスをクリックし、その後、toggle ボックスによってtempo オブジェクトをオンにすると、120 bpm の速さで再生されるシーケンスが聞こえます。次に、tempo オブジェクトの第2インレットに接続されたナンバーボックスを使って、より速い(例えば、200 bpm)テンポに変更して下さい。シーケンスを再スタートさせると、より速く再生されるシーケンスが聞こえます。tempo オブジェクトの速度を遅く(例えば 50 bpm)すると、非常に遅く再生されるシーケンスが聞こえます。シーケンスの再生中に tempo オブジェクトに変更を与えることも可能です。指定したスピードに合わせて、再生速度が変化します。

再生クロックとして tick メッセージを使用する場合、多くのクリエイティブなオプションがあります。line オブジェクトを使って tempo オブジェクトを変更すると、シーケンスの再生中に再生スピードを徐々に速くすることができます。別の方法として、再生中に再生スピードにゆらぎを生じさせるようなカーブを作ることもできます。また、tempo オブジェクトを(チェックボックスを使って)ストップさせることによって、一時的に再生を停止させることもできます。再びスタートさせると、停止した位置から再生が再開されます。独自のクロックを使った場合には、単に start メッセージのアーギュメントを変更する場合に比べ、より多くの柔軟性を持たせることができます。

結び

seq オブジェクトは強力なシーケンシングツールです。このオブジェクトにより、様々なスピードでMIDI シーケンスの再生を行なうことができます。特に、内部クロックをオーバーライドし、tick メッセージを使ってリアルタイムで再生速度を変更する場合には、より強力なものになります。seq オブジェクトの出力は midiflush オブジェクトを経由させなければなりません。このようにすると、再生を停止した場合、そのとき鳴っているすべての音もストップします。seq オブジェクトは短いループ、ノート/コントローラによるフレーズ、あるいは完全なシーケンスの再生も完璧に行なうオブジェクトです。

参照

seq MIDIシーケンサ。
midiflush 生のMIDI データで、鳴り止まないノートオンに対するノートオフを送信します。
tempo B.P.M によってコントロールされるメトロノーム。