Thursday, May 8, 2014

第4回シンセサイザープログラムの制作 (音の発振と合成)

今回は、Pdでシンセサイザー(音を合成するマシン)のパッチを作ります。
具体的には、ローランドのTB303という伝説のベースシンセサイザーをPdでリメイクしてみます。
TB303 (http://www.enatsu.net/enatsu_music/yomoyama/tb303から転載)
※今回のパッチはTokyo Max Users Groupのチュートリアル「MaxMSPで作るベースシーケンサー」を参考にしてPd用にチューニングしてみました。
※元のMaxパッチを制作した首藤陽太郎さんにチューニングの許可を頂きました!


TB303とは

Rolandが発売したアナログベースシンセサイザー。発売直後はあまり話題にならなかったが、クセの強いアシッドな音色がHardfloor、電気グルーブ、Richie Hawtinを始め、多数のテクノミュージシャンに好まれて愛用された結果、大ブレークした。
現在も根強い人気を誇り、オリジナルモデルはプレミアがついたため、非常に高額である。

ゴールのPdパッチ

最終的にはこんなパッチができます。

こみいったパーツは用意してあるので、手順に従って組んでいきましょう。
制作のステップは以下の通りです。

  1. メトロノームパートを作る。
  2. ノコギリ波([phasor~])の音が出るパートを作る。
  3. ピッチ(音高)を変更するシーケンサーを作る。
  4. オクターブを変更するシーケンサーを作る。
  5. ポルタメントを実現するシーケンサーを作る。
  6. 音のON/OFFのシーケンサーを作る。
  7. フィルターパートを作る。

まず、以下の資料をダウンロードしてください。


メトロノームパート

解凍したフォルダの中のpd_lesson04_PB303_1.pdのパッチを開いてください。


これは前回作った0〜15の数値をループで出力するメトロノームを少し改良したものです。
1分間に何拍打つかを表すBPM(Beat Per a Minute)の数値が[metro]の間隔(ミリ秒)に変換される計算を[expr]というオブジェクトで行なっています。[expr]内の「$f1」は入力される数値が代入されます。

右側にある[;pd dsp 1( というメッセージボックスはDSPの機能をONにします。(逆にOFFにするのは[;pd dsp 0(です )[loadbang]はパッチを開いた時にbangシグナルを出力します。
これで、パッチを開くと自動的にDSP機能がONになる仕掛けです。

ノコギリ波の音が出るパート

pd_lesson04_PB303_2.pdを開いてください。


それぞれのオブジェクトの機能はコメントに書かれている通りです。

右下は[phasor~]からの出力を視覚化する、オシレータの役割です。
Array「wave」に50ミリ秒ごとに音の数値データを書き込んでいます。
横軸が時間、縦軸が音量で波形が見えます。
このパッチに音量を変更する機能を追加します。

垂直スライダーの設定は以下のようになっています。最大値は1です。

実行モードで上下にドラッグして、MIDIノートナンバーを変更してみましょう。
実行モードで音量スライダーを上下に動かすと、音量が変更されます。
ポルタメント(音高から音高が緩やかに変化する)のかかったノコギリ波の音が聴こえます。
視角的にも確認できます。

このパッチ全体を⌘+Aで選択し、pd_lesson04_PB303_1.pdにコピペしてください。
※コピペしたら、コピー元のpd_lesson04_PB303_2.pdは閉じてください。




ピッチ(音高)を制御するシーケンサー

pd_lesson04_PB303_3.pdを開いてください。

これは0〜15までのアレイのそれぞれの箱の中に、0〜12までの数値を格納するパッチです。
垂直スライダーやアレイ「note」の設定をプロパティで確認してみてください。
スライダーの後に[int]があるのは小数点以下の数値を切り捨てて整数(integer)にするためです。

これも全体を選択してpd_lesson04_PB303_1.pdにコピペしてください。
※コピペが終わったら、コピー元のpd_lesson04_PB303_3.pdは閉じてください。



アレイ「note」の中身を呼び出す[tabread]を以下のように、[mod 16]と[mtof]の間に加えます。[+ 36]は下から3オクターブのC(ド)のMIDIノートナンバーを基準とするためです。
[t f f f f]は[trigger float float float float]の省略形です。これは上から入ってきた数値を複数に振り分ける機能です。後で使います。


ピッチを適当に変更してからメトロノームを動かせば、音のシーケンスが鳴ります。

オクターブを制御するシーケンサー

ピッチに対してオクターブ上と下を変更できるシーケンサー機能を加えましょう。

pd_lesson04_PB303_4.pdを開いてください。

さきほどのpd_lesson04_PB303_3.pdと違うのは、アレイのサイズと最大値と最小値、スライダーがナンバーボックス(-1〜1の範囲)になっているところです。プロパティを開いて確認しましょう。

これの全体選択をしてpd_lesson04_PB303_1.pdにコピペしましょう。

※コピペが終わったら、コピー元のpd_lesson04_PB303_4.pdは閉じてください。

オクターブの変更を反映するパートを以下のように追加します。

[tabread octave]から1、0、-1が出力されるので、[* 12]で12音=1オクターブに変更した数値がMIDIノートナンバーに足し算されます。

※そろそろpd_lesson04_PB303_1.pdを保存しておいた方が安全かもしれません。
※pd_lesson_PB303_final.pdと名前をつけて保存しましょう。

ポルタメントを実現するシーケンサー

ポルタメントとは、あるピッチ(音高)から別のピッチに変更するときに、スライドして変化する機能です。
一般的に、ほとんどのシンセサイザーにはポルタメントの機能が付いています。それをPdで再現するには[line~]とメッセージボックスを使います。

アレイ「octave」とその付属パートを選択し、⌘+Dで複製します。
※複製したものが青く選択されている状態で、下にドラッグして移動してください。うっかり他をクリックすると、配置が確定してしまうので注意。
※操作の取り消しは⌘+Z
※波形の表示アレイは適宜、移動します。


選択

⌘+Dで複製

ドラッグ


アレイ「octave」の名前を「slide」に変更します。その他の設定も変更します。
ナンバーボックスはすべてToggleボタン(⌘+Shift+T)に置き換えます。
[tabwrite slide]に変更します。


以下のように、ポルタメントを組み込みます。


[metro]のbangシグナルの間隔時間(ミリ秒)を[/ 2]で割り算した数値、つまり1/2拍の時間が、[send halfbpm]に送られます。
[tabread slide]からは0または1が出力されます。それに[* 100]に格納された1/2拍の時間をかけ算すると、0のときは0が、1のときは1/2拍時間が[pack f f]の右インレットに送られて格納されます。[pack]は複数の数値を合わせてリストとして出力するオブジェクトです。
[line~]には「周波数 1/2拍時間(または0)」のリストが入力されるのでポルタメントが実現します。


音のON/OFFのシーケンサー

これが最後のシーケンサーパートです。
「slide」のアレイとその付属物を複製してから、アレイの名前と[tabwrite]の宛先を「ONOFF」にします。
※アレイの名前の大文字と小文字は区別されるので同じにしてください。



以下のようにON/OFFのパートを組み込みます。
※接続するアウトレットをわかりやすいように[t f f f f]を横に移動させています。
※[vline~]の上の[1 0, 0 5 $1( はメッセージボックスです。



Bangボタンのショートカットキーは⌘+Shift+Bです。

[tabread ONOFF]からも0か1が出力されます。[sel 1]で数値1の入力の時だけbangシグナルを出力します。[t b b]はこの後のフィルターにも使います。
[f]は[float]で右インレットから入力される数値を格納します。bangシグナルが左インレットに入ると格納した数値を出力します。
[1 0, 0 5 $1( の「$1」に「1/2拍の時間」が代入されて[vline~]に入ります。[vline~]は[line~]とほぼ同じ機能で、複数のポイント間のなだらかな変化を出力します。
例えば、メッセージボックスからの出力が [1 0, 0 5 75( だと、

  1. 0ミリ秒で音量1.0になる。
  2. 5ミリ秒経過後に音量0に向かって75ミリ秒かけて変化。

となります。これで音量の変化(エンベロープ)を実現しています。

フィルターパート

pd_lesson04_PB303_5.pdを開いてください。

これをpd_lesson04_PB303_final.pdにコピペして以下のようにつなぎます。




[lores~]はローレゾナンスフィルターで、中心周波数(Cut Off Frequency)より下を通過させつつ、レゾナンス(Resonance)で中心周波数付近に「クセ」をつけることができます。
[lores~]の左のインレットは音の入力、真ん中は中心周波数、右インレットはレゾナンス(Q)の設定です。
丸いカラフルなダイアルは[knob]というオブジェクトです。⌘+1でオブジェクトを出して[knob]で配置できます。色や出力数値の範囲はプロパティで設定できます。
エンベロープモジュレーター(ENV_mod)は中心周波数を、1/2拍時間で上昇させる変化の幅を変更できるようにしています。
ここでは[Line~]を使っていますが、これは[vline~]でも構いません。
また、このENV_modのパートを改造して中心周波数が上がって下がるような変化にしても面白いかもしれません。
設定している数値はとりあえず設定したもので、これを自分好みにいろいろ変更させてみると良いでしょう。

これでパッチは完成ですので保存してください。

正確には本物のTB303とは構造も音も違いますが、それっぽいミョンミョンしたベース音を楽しむことができます。

チャレンジ

サブパッチやAbstractionを使って、スッキリ見せるようなパッチに改造してみましょう。

私はこんなパッチにしてみました。インターフェイスもPdで作っています。

また、TR-808のようなドラムマシンパッチを作成して組み合わせるのも面白いと思います。
アイデア次第でいろいろな発展があると思います。

No comments:

Post a Comment