【ドラムマシンを作る1】matrixctrlでドラムマシンを作る

記事をシェアする:

[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」前のナンバーボックスを接続し、ドラムマシンが完成しました。

次の記事:【Max】matrixctrlのパラメータをランダムにする

記事をシェアする: