目次
[matrixctrl]とは
[matrixctrl]は[matrix~]と組み合わせると、信号のイン・アウトを自由に分配できる便利なオブジェクトです。ですが等間隔なグリットとオン/オフの機能が便利なので、シーケンサーのUIとして使われることも多いです。今回はこれを使ってドラムマシンを作ってみましょう。
作ってみる
今回は[matrixctrl]を使って16ステップのドラムマシンを作ってみます。ハイハット、スネア、キックのサンプルを用意してください。もし無くても機能の理解はできるようになります。
[matrixctrl]の設定
[matrixctrl]オブジェクトは、ボタンのメニューの中にあります。新しいオブジェクトを作り「matrixctrl」と入力しても生成されます。
[matrixctrol]オブジェクトを選択し、インスペクタで16*3になるように設定します。
Behaviorから
Number of Columnsを16、
Number of Rowsを3にします。
このままだと潰れた表示になるので、セルが真円になるよう調整してください。
[matrixctrl]からデータを取り出す
上記のようにオブジェクトを繋いでください。
[matrixctrol]に「getcolumn 番号」のメッセージを送ると、その番号列のデータを第2アウトレットから出力します。
この図では「3」を指定していますが、0始まりで数えるので、4列目のデータを参照しています。4列目は真ん中のみオンになっているので「0 1 0」と出力されます(ちなみに出力されるデータは左から、列の上から順です)。
各サンプルが発音するよう振り分ける
[matrixctrl]の横軸をステップ数、縦軸を音色と捉えてドラムマシンを作るとします。上からハイハット、スネア、キックに振り分けましょう。
unpackを接続
先程[matrixctrl]の出力にメッセージボックスを繋いでましたが、リストメッセージを分解できるよう[unpack 0 0 0]を接続しましょう。
サンプルを配置
サンプルを配置したら「1」のナンバーボックスを接続します。この[playlist~]オブジェクトは「1」を送ると再生開始します。あとでこのメッセージボックスにbangを送るようにします。
サンプルを用意できなかった方は、とりあえず左メニューの音符マークから適当なサンプルを置いてみてください。
オンの状態だけ取り出す
[matrixctrl]-[unpack]からは0か1が出力されます。0がオフで1をオンとします。
[sel 1]を接続します。[sel 数値]で指定した数値が来た時に、第1アウトレットからbangを出力します。それ以外の数値が来たときには第2アウトレットからbangを出力します。今回はオンの時だけサンプルを鳴らしたいので第1アウトレットのみ接続します。
その後に[bang]オブジェクトを接続してください。
matrixctrlとサンプルを接続する
先程の2つを連結させます。bangと「1」のメッセージボックスを接続しました。
他のサンプルも接続する
スネアとキックも同様に作りました。
音が出るようにする
3つのサンプルが同時再生された場合クリップしてしまうので、それぞれを[*~ 0.5]に接続し、その後[ezdac~]にステレオで入力しました。
ここまでで[matrixctrl]をいくつかオンにし、一番上のナンバーボックスを0~15の範囲で変化させると音が出るようになりました。
自動でカウントする処理を作る
0~15の数値を送ることで[matrixctrl]に設定したデータを出力させることができるようになったので、今度はそれを自動的でカウントする処理を作りましょう。
[tempo]でタイミングを出力
[tempo]は[metro]に近いオブジェクトですが、Global Transportを使用せずに、設定したテンポや音価のタイミングでbangを出力します。図のようにテンポだけ設定すれば、テンポ120の16分音符のタイミングでbangを出力します。
今回は1小節を16ステップで作っているので、特に細かいアーギュメントを設定せずに使用できます。
0~15のループ
bangが来たらカウントアップし、15を越えたら0に戻るような処理が必要です。これは[counter]のみで作れます。
[counter 最大値]のように設定すると、0で始まり15までカウントし、その次は0に戻ります。
つなげる
先程の2つの処理をつなげることで、toggleをオンにすると0~15のループでカウントアップする処理ができました。
完成
最後に0~15のループ処理と「getcolumn $1」前のナンバーボックスを接続し、ドラムマシンが完成しました。