チュートリアル19

MIDIコントロール:シンセサイザ

標準MIDIメッセージの実装

この章では、MSPでつくられるシンセシス・インストゥルメントのMIDIコントロールをどのように実装するかについて説明します。実例のインストゥルメントは、ベロシティセンス、ピッチベンド、モデュレーションホイールによる音色のMIDIコントロールが可能なFMシンセサイザです。実例を比較的シンプルにしておくために、単純FMサウンドといわれるタイプ(シンセサイザ用語で、「シングルパッチという」)で、2声のポリフォニ−によるものを使用します。

MSPシンセサイザのMIDIコントロールに関する主な問題点は、第1に、MIDIキーナンバを適当な該当する周波数に変換すること;第2に、MIDIピッチベンド値をふさわしい周波数-スケールファクタ(係数)に変換すること;第3に、MIDIコントローラ値をモデュレータのパラメータに(例えばビブラートレート、ビブラートデプス、その他)に変換すること;さらに、与えられたMSPオブジェクトは1度に1つの音しか演奏できないので、同時に発生するMIDIノートメッセージをうまく取り扱う必要があること、などがあります。

ポリフォニー

MSPのサウンド生成オブジェクト(cycle~やphasor~のようなオシレータ、またはgroove~やplay~のようなサンプルプレーヤ)は、1度に1つの音だけしか演奏できません。従って、MSPで1度に2つ以上の音を演奏するためには、2つ以上のサウンド生成オブジェクトを有する必要があります。このチュートリアルパッチでは、基本的なシンセシス・シグナルネットワークの同一な2つの複写を作り、そのどちらか一方にMIDIノートメッセージを送ります。この2声ポリフォニーは、メロディーのレガートなキーボード演奏で通常起こっている、連続する音のオーバーラップを可能にします。

ポリフォニック音楽を演奏するpolyはボイスナンバをアサイン(割当て)します

polyオブジェクトは入ってくる個々のノートメッセージにボイスナンバ(この場合1または2)をアサインします。そして、2つ以上のキーが1度に押したままにされた場合、polyは最初の音のノートオフメッセージを送り、後の音を演奏することができるようにします。ボイスナンバ、キーナンバそして、ベロシティは3項目によるリストとして一緒にパックされ、routeオブジェクトはボイスナンバを使用して、キーナンバとベロシティを一方の(または他方の)シンセサイザ「ボイス」に送り出します。(コンピュータが十分に速い場合、当然より多くのボイスによるシンセサイザを設計することが可能です。ボイスを加算しながら”DSP Status”ウィンドウの”CPU Utilization”を観察することによって、コンピュータの能力をテストすることができます。)

ピッチベンド

このインストゥルメントでは、MIDIピッチベンド値0から127までを使用して、ピッチを半音2個分上下にベンドさせます。音のピッチをベンドするためには、その(キャリア)周波数に適当な値を掛けることが必要です。±2半音のピッチベンドのためには、ベンドの係数を2の-2/12乗(およそ0.891)から2の2/12乗(およそ1.1225)の範囲で計算する必要があります。

MIDIピッチベンドは、独特なマッピングの問題を提示します。それは、MIDIプロトコルによって64という値は「ベンドなし」の意味で使用されますが、64は厳密には0〜127の中央値ではないということです。(厳密な中央値は63.5のはずです。)64の下には64個の値(0〜63)がありますが、上には63個の値(65〜127)しかありません。従って、上方へのベンドは、下方へのベンドとわずかに違った扱いをする必要があります。

下方へのベンドは、上方へのベンドとわずかに違った方法で計算されます

下方のベンドの最大値(ピッチベンド値0)は指数-64/384(-2/12と等しい)になるので、下方のベンド値(0から63)は-64でオフセットされ384で割られます。上方のベンドは0から63/378(2/12に等しい)の範囲の指数になるので、上方のベンド値(64から127)は-64でオフセットされ、378で割られます。packオブジェクトとline~オブジェクトは、周波数が不連続な階段状の変化をするのを避けるために、20ミリ秒間で徐々に変化するような周波数の係数を生じさせる目的で使用されます。

モデュレーションホイール

モデュレーション・ホイールは、ここではFMシンセシスパッチの変調指数を変えるために用いられます。マッピングは、”リニア”です;単純に、MIDIコントローラ値を16で割り、0から(ほとんど)8の範囲にマッピングします。シンセシス・インストゥルメント自体を見てもらうことで、この範囲が使用される明確な方法が解ると思います。

コントローラ値は0から7.9375の範囲にマップされます

FMシンセサイザ

*synthFMvoice~サブパッチのオブジェクトのうちの1つをダブルクリックして、パッチャーウィンドウをオープンして下さい。

このFMシンセシスサブパッチの基となるのは、MSPチュートリアル11で紹介され(そして、説明され)た、simpleFM~サブパッチです。タイプされた引き数はharmonicityの比を1にセットするために使用され、倍音のスペクトルを生み出します。MIDIメッセージは、このFMサウンドの周波数と変調指数に影響を及ぼします。最初に、MIDIノート、及びピッチベンド情報が、周波数を決定するために使用されるところを見てみましょう。

MIDIの周波数への変換

オブジェクトmtofはシグナルオブジェクトではありませんが、MSPでは非常に扱いやすいものです。これは、MIDIキーナンバを該当する周波数に変換します。

与えられたピッチの周波数を計算します

周波数値は、メインパッチで計算されたベンド係数を掛けられ、その結果は、simpleFM~サブパッチのキャリア周波数として使用されます。

キーナンバとピッチベンドデータによって計算された音の周波数値

振幅エンベロープのベロシティ・コントロール

大部分のシンセサイザのように、このパッチでは振幅エンベロープを制御するために、MIDIノートオンベロシティが用いられます。これを達成するために必要なことは、1)ノートオフベロシティとノートオンベロシティを切り離すこと、2)ノートオンベロシティの範囲(1から127)を、0から1までの振幅の範囲にマップ(ほとんどの場合、非線形マッピングが最もよい)すること、そしてこのケースでは、3)エンベロープのアタック、ディケイのレートにノートオンベロシティをマップすること、です。

最初の仕事は、select 0オブジェクトによって簡単に成し遂げられます。ノートオンベロシティはfunctionオブジェクトをトリガし、アタックとディケイの形を送り出します。そして、以下の例で示すように、ノートオフベロシティは振幅を0に戻します。

MIDIノートオンベロシティは振幅エンベロープの領域、範囲をセットします

functionがトリガされる前に、ノートオンベロシティを使用して領域と範囲をセットします。これは、エンベロープの持続期間と振幅を決定します。右のexprオブジェクトはエンベロープのアタックそしてディケイの部分の時間を計算します。ベロシティの最大値127はそれらを100ミリ秒間に行います。それに対してより小さいベロシティ60は496ミリ秒で行います。このように、よりソフトに演奏される音は、多くの管楽器の場合のように、より遅いアタックを持ちます。

左のexprオブジェクトは、振幅を決定するためにベロシティを指数曲線にマップします

ベロシティは4の指数関数による振幅値にマップされます

直線的な線形写像を使用する場合、127から64(大部分のノートが演奏される範囲)のMIDIベロシティは、およそ6dBの振幅範囲しかカバーしません。指数関数へのマッピングは、これをおよそ24dBに増加させます。そのため、ベロシティの上の方の範囲は、振幅のより大きい変化を作り出します。

音色のMIDIコントロール

アコースティック楽器が大きな音で演奏される場合に、より明るく(より高い周波数を含む)聞こえる場合がよくあります。このため、ノートオン・ベロシティがラウドネスと同様にサウンドの音色に影響を及ぼすことは意味があります。金管楽器の場合、音色は振幅と相関して非常に大きく変化するので、このパッチではFMインストゥルメントの振幅と変調指数のコントロールに同じエンベロープを使用します。エンベロープは、*~オブジェクトに送られて、適当な範囲にスケールされます。+~ 8オブジェクトは変調指数が0から8(最大のベロシティで演奏された場合)までのベロシティ・レンジによって影響を受けることを保証します。これまで見たように、メインパッチではモデュレーションホイールはより大きく変調指数を増加させる(変調指数レンジに少なくとも8以上を加算する)ことができます。このように、ベロシティとモデュレーションホイールのポジションの組み合わせで、十分に変調指数に影響を及ぼすことができます。

エンベロープとモデュレーションホイールは変調指数をコントロールします

*MSPからのサウンドだけ(キーボード・シンセサイザのボリュームを切って)を聴くようにして、MIDIキーボードの単旋律のメロディーを演奏して下さい。演奏するとき、ベロシティが振幅、音色、アタックのレートに及ぼす効果に注意して下さい。モデュレーションホイールを上へ動かして、音色の全体のブライトネスを増加させて下さい。モデュレーションホイールを用いて、音のサステイン(持続)部分で音色をモデュレートすることも可能です。ピッチベンドホイールが、周波数上で、意図した効果を引き起こすことを確かめてみて下さい。

まとめ

MIDIデータは、ほとんどの他のシンセサイザと同様に、MSPシンセシスパッチをコントロールするために使用できます。標準的なインストゥルメント設計で、MIDIキーナンバとピッチベンドホイールポジションは、両方とも演奏された音のピッチを決定するために使用されます。キーナンバは、mtofオブジェクトによって周波数データに変換されます。ピッチベンド値は適当な周波数のベンド係数(平均律の半音1つにつき2の12乗根に基づく)に変換されます。「ベンド無し」の値は64として設計されていますが、これは0〜127の正確な中央の値ではないので、上方へのベンドは下方へのベンドとわずかに違った式で計算しなければなりません。

ノートオンベロシティは、一般に音の振幅を決定するために使用されます。これは、振幅エンベロープのアタック部分をトリガします。ノートオフメッセージは、エンベロープのリリース部分をトリガします。ベロシティ値は、エンベロープのレンジを変換(または、振幅のスケーリングのための係数を提供)するために使用できます。ベロシティの振幅へのマッピングは、一般に、線形ではなく指数的である方がベストです。ベロシティはまた、エンベロープや他のパラメーター(例えば変調指数)のレートを変えるために使用することもできます。

MSPオブジェクトは1度に1つのサウンドを作ることしかできません。そのため、MIDIを通して同時に2つ以上の音を演奏しようとする場合、各々の音をpolyのボイスナンバによってアサイン(割当て)し、各々のボイスを異なったMSPオブジェクトに送らなければなりません。

<-前の章 次の章->