PureDataでポリフォニックシンセを作る時など同時に処理を複数パターンで使う時に便利な[clone]オブジェクト
ナカジ(@cp_nakajun)です。
今回紹介するのは「clone」というオブジェクトなんですが
こんな便利なオブジェクトがあることを知らなかった自分が悔しいです。
いままではポリフォニックシンセにするときに「アブストラクション」という使い方で作っていたのですが「clone」を使った方が簡単です。
MIDIの形式で入力するなら「clone」だと思います。
ちなみに「アブストラクション」については以下の記事を書いてます。
では、さっそく「clone」についてご紹介。
cloneオブジェクトの簡単な使い方
まずは簡単に使い方を紹介します。
とりあえず説明用に簡単なパッチをつくりました。
- cloneオブジェクトで呼び出す側のパッチ(main.pd)
- 同時に複数行いたい処理を記述したパッチ(Multiply.pd)
です。
[2]の処理内容は入力された数字どうしを掛け算する、2乗するだけのものです。
呼び出し側のパッチで[clone]オブジェクトの引数に処理内容を記述したパッチを指定して使います。
[clone クローンするpatchのパス クローンする数]
です。
呼び出す側のパッチ(main.pd)の[clone Multiply 5]のところです。
これでMultiply.pdの処理を同時に5つ行えるようになります。
では、実際その5つをどのように使うかですが
インレットに対して[クローンID 入力値]のリストを入力します。
※クローンIDという呼び名は便宜上、僕がつけたので正式ではありませんのでご了承ください。
もう少し説明すると、「クローンする数」で指定した数だけ仮想的にパッチが生成されます。
その仮想パッチには0から番号が割り振られていて、その番号に対して入力値を送るという使い方です。
なのでクローンした数以上のID番号をつけて送るとエラーになります。
ポリフォニックシンセにcloneを使う理由
あくまでも僕の現時点の認識というところでお願いします。
「DAWのシーケンスでPureDataのシンセを鳴らす」っていうのはまだやってないのです…
シンセ部分を作るにあたって「MIDIの形式」で作っておけば後々使いまわせるなと思ってます。
となると、例えば鍵盤を「押した」「離した」というようなオン・オフの情報を以下のように受け取るのですが
- 押した(Note On):[NoteNumber velocity]
- 離した(Note Off):[NoteNumber 0]
このオンとオフの情報を同じ発音部に入力しなければなりません。
ポリフォニックにする場合、発音部が複数あることになるのでその制御が必要になります。
そこで先に説明したcloneオブジェクトのIDの仕組みが便利に使えます。
例えば、ノートナンバー[60]はID[0]、ノートナンバー[62]はID[1]となるような感じです。
ex)
- ノートオン:[0 60 velocity]
- ノートオフ:[0 60 0]
というリストを作る感じです。
かなり乱暴ですがクローン数を「127」にしてIDをノートナンバーにすると同時発音数=127音を実現できることになります。
ただし、必要以上の同時発音数は不必要な負荷を生むことになるので工夫が必要です。
クローンとアブストラクション
アブストラクションで作るにしてもこのID管理の部分を自身で作れば同様のことができると思います。
でも、アブストラクションだと発音数を増やすには「オブジェクトをコピーして、パッチングして」という作業がいちいち必要です。
その点、クローンオブジェクトであれば引数を変えるだけで済みます。
なのでポリフォニックシンセのようなものを作るにはこのクローンオブジェクトは有効だと思います。
もちろんアブストラクションが有効なケースもあって
僕としては今のところUIがあるような部分とか単純なパーツとかはアブストラクションで利用する感じになってます。
突き詰めていくと変わるかもしれませんが…個人的な見解なので参考になればというところです。