はじめに
今回はAbleton Live11のLFOを改造します。
Albeton Live11のSuite版 + Max 8の30日体験or製品版が必要です。
2023年04月09日追記
こちらのパッチに改良を加えたものをGumRoadで販売しました。
導入~使い方はこちらで解説。
※Ableton付属LFOの規約について、Ableton公式にお問合せして確認して確認済み。
「独自の要素を追加した自作デバイスの公開、販売等は問題ございません」との回答でした。
Maxの勉強をしたい方は、この記事を元に自分で作ってみてください。
マップ数を64個にする処理”以外”を解説してます。
この記事でする事
◆する事
・Map数を16まで増加
・LFOの波を4つ重ねた形にする

狙いはドラムラックの全ディケイ操作です。
ディケイを変えることでハイハットなどの叩き方の違いを表現できます。

マップ数を増やす理由は、1ラックの16素材全部にとりあえず割り当てたいからです。
割り当てた状態をテンプレとして保存 → 上手く行ってないところを外すようにしたい。

また、通のLFOではできない強~弱の間の表現やランダム性を出したい。
そのために波を4つ合成する。
これで、ベタ打ちでもドラムが良い感じになる… はず(?)

そのためのモジュールを作っていきます。
Map数を増やす
まず、マップ数を16に増やします。

Maxの基本操作
Ableton Liveを立ち上げ。
LFOで検索。
LFOモジュールを見つけます。

Abletonの適当なラックに刺します。
刺したら右上3つ目のボタンをクリック。

すると… Max 8の編集画面が出てきます。
右側の画面を×ボタンで閉じます。

左に合った画面を拡大します。

画面左下のプレゼンテーションモードをクリック。
すると、編集する用の画面に切り替わります。

Maxを立ち上げ中は、AbletonのLFOの動作が止まります。
これは、右下の||||ボタンで直せます。

||||をオフにすると、Maxの方が動かなくなります。
なので、編集中はオンにしてください。

左下のフリーズボタンを押して凍結を無効化。
これで、編集できるようになります。

Ctrl+Eキーを押します。
すると、画面左下のロックモードを切り替えれます。
・ロックモードオン → ボタンの動作を確認するモード
・ロックモードオフ → ボタンそのものを操作し編集するモード

p**** など、pから始まるモジュールは、中にもう1つ回路が入ってます。
ロックモードオンでクリック。
すると、画面が出てきます。

以上が基本操作です。
bpatcherを編集する
bpatcher=別ファイルで作られたMaxパッチを読み込む処理。
Mapが書かれたものは… 編集モードでも触れません。
1つのカタマリになってます。

これは「bpatcher」というモジュールです。
他の.maxpatのプログラムが読み込まれてます。
確認の為、選択 → インスペクタを表示。

Patcher Fileを見ます。
ここで、multimap.maxpatが読み込まれてる事を確認。
編集する為、これを頑張って探します。

私は下記の場所にありました。
\Users\ “ユーザーID” \Documents\Max 8\Max for Live Devices\LFO Project\patchers

見つけられない方はWindowsキー+Eキー。
PC全体に「multimap.maxpat」で検索をかけて探します。

multimap.maxpatをMax 8で開きます。

すると… multimap.maxpatの画面が出てきます。

画面がややこしくなるので、Windowsキー+Tabキーでデスクトップを分けるのがおすすめ。
・デスクトップ1に「LFO」
・デスクトップ2に「multimap.maxpat」を表示。

multimap.maxpatを編集する
「multimap.maxpat」を編集していきます。
編集モードでpak i i i i i i iをダブルクリック。

iを16個に増やします。
( pak i i i i i i i i i i i i i i i i )

次に、画面上部のMapを16個に増やします。
選択 → Ctrl+C → Ctrl+Vで複製。

増やしたMapの「In」と「out」に配線を行います。
i → map in / map out → pakの左側の開いてる所にin。

これを、全てのMapで繰り返します。

配線をクリック。
Ctrl+Shift+Yキーで線を綺麗にできます。

あとは… このMapを編集します。
こちらも「bpatcher」で「Map Button.maxpat」が読み込まれてます。

こちらを16個配置するので、横幅が長くなります。
少しでも短くしたいので%の表示を消す編集をします。

MapButton.maxpatを編集する
さきほど、multimap.maxpatがあった場所に戻ります。
こちらの「MapButton.maxpat」を開きます。

%が表示された所を選択。

Inspector → Basic → Unit Styleを「%」から「Int」に変更。

%が消えた分、横幅を狭めて配置を調整。

あとは…その気になればAllから色を変えれます。
(おすすめはしません)

色変えはバグが起こりやすいので、今やる事では無いです。
まず一度、全体が完成してから挑戦してください。

bpatcherとLFOをを別名保存する
編集した「MapButton.maxpat」などのbpatcherを保存するために…
一度、“LFO”を別名で保存します。
LFOに戻り、Ctrl+Shict+S。

Sig_LFOなどの名前を付け、Abletonで読み込める場所に保存。
(User Libaryフォルダーの中など)

そしたら、MapButton.maxpatに戻ります。
こちらもCtrl+Shift+Sで名前を付けて保存。

先ほど別名保存した名前+Projectのファイルを探します。
私は、\Users\ユーザーID\Documents\Max 8\Max for Live Devicesにありました。
LFOを別名保存すると、自動でSig_LFO Projectが作成されます。
こちらを開きます。

この中の”patchers”を開きます。
中にあるMapButton.maxpatをクリックして名前を読み込み。
保存(S)で上書き保存。

あとは…2番目に開いた「multimap.maxpat」に戻ります。
こちらを、プレゼンテーションモードでレイアウト調整。

プレゼンテーションモードはここをクリックして有効化できます。

調整できましたら、別名保存します。
Ctrl+Shift+Sキー。

Sig_LFO Projectのpatchersを開きます。
multimap.maxpatをクリックして名前を読み込み。
保存(S)で上書き保存。

以上がbpather+LFOを別名保存する方法です。
LFOのレイアウト調整
Sig_LFOに戻ります。(別名保存したLFOのパッチです)
すると、Mapの表記が変わったことが分かります。

はみ出てるので、編集モードで伸ばします。

プレゼンテーションモードに入ります。

下地のグレー板を横に延ばします。
これで、Ableton上に表示されるUIの幅が決まります。

あとは、レイアウト調整。

拡張したMapも拡大して伸ばしますが…

ボタンをオンオフすると、元の大きさに戻ります。

そこで、まず理想の大きさをインスペクターで確認。
理想の大きさに拡大 → Presentation Rectangleの値を記録してください。

この値をダブルクリック。
Ctrl+Cでコピー。

プレゼンテーションモードをクリックして解除。

Sel 1の出力先を確認。(2段目のメッセージボックス)
ここの~~~~ rect の所に先ほどの数値を打ち込み。

これで、ボタンを押した時に理想の大きさになります。

あとは、Abletonで動作確認。

これで、Map数を16にする処理が完了です。
LFOを複雑にする
このモジュールはドラムのディケイ操作を目的に作られてます。
なので、複数の波形を重ね4泊に違った強弱を入れれるようにします。

これを実現するために、LFOで4つの波形を重ねれるようにします。
さらに4つの波形の強度を変えれるようにもします。

ここからは、1回失敗した回路を作ります。
その後で、修正していきます。
1回無駄な事をしますが… 開発の雰囲気はMaxの使い方などが伝わりましたら幸いです。

初手から理想的な回路を作るのは難しい。
記事として、構成が悪くなりますが… お許しください。
波が無い状態を作る
複数の波を混ぜるので… 混ぜたくない時に使う”無”の波を用意します。

あとから分かった事ですが…
この回路、不要でした。
修正パートで全消ししてます。
Sig_LFOに戻ります。
波形の生成は「p sync」と「p waveform_select」で行われてます。

まず「p waveform_select」をダブルクリックで開きます。
(ロックモードでダブルクリック)

すると、波形生成の回路が出てきます。

selector~の数値を7から8に変更。
すると、差込口が増えます。

5▼を選択 → Ctrl+Cコピー。
ペーストで5より”右側”に配置。
6▼を増えた差込口に刺します。

LFOに戻ります。
すると「p waveform_select」

iから増えた差込口に配線します。

次に、編集モードで波形を選択するボタンをクリック。

インスペクタ → Range/Eunmの(edit)をクリック。

“1つスペースを空けて” Nullを追加。
OKで確定。

すると、Null(波無し)が増えます。

+~を追加。
~は音を合成する時に必要な記号です。

「+~」を「p waveform_select」と「p jitter and sooth」の間に配線。

Nキー → live.dialと打ち込み。
live.dialを作成。

エンターキーで確定するとダイアルが出てきます。
InspectorでRange/Enumを-100, 100に設定。
Short NameをValueなどに設定。
このValueは、波がNullの時に上下させるためのモノです。

“M”キー → 「0.」のメッセージを作成。
“N”キー → 「*0.005」と「+ 1.」を作成。

Fキーで数字を確認できるものを追加。

さらに…
・Nキー → 「sel 7」と入力しselectorを追加。
・Mキー → 「0.」のメッセージを追加。

下図のように配線。

波形選択ボタン → Sel 7の左側に配線。
最後の数字確認 → +~の右側に配線。

あとは、挙動を見ながらデバッグ。
Null=7なので、sel 7で条件分岐して、Nullの時は左側の回路が使われます。
「+ 1.」だと波の線が一番上に行きました。
そこで、「+ 0.5」で調整して、真ん中にしました。

Valueが動かなかったので、Valueにも右側の0.を配線。

これで… sel 7の意味が無くなりました。
が、Valueの値は0に戻ります。

このValueは、波がNullの時に上下させるためのモノ。
なので… sel 7の時だけ倍率が0.5になる処理を入れます。
これは… 「if $1 == 7. then 0.5. else 0.」で設定できます。
もし、[入力が1]が[7.]ならば… [0.5]を出力、それ以外なら[0.]を出力という意味です。

これで、Null選択時に、Valueを動かすと波形が上下するようになりました。

あとで消えますが、無の波っぽい回路が完成です。
デバッグの際に使える技
デバッグはこんな感じで行います。
Iキーで整数、Fキーで少数を追加。
小数の入力は整数に対応しないことがあるので、この方法でミスが無いか確認。
…少数と整数の違い、[ .]だけなのでよく間違えます。

あとはNキー → 「print」モジュールを追加。

これに配線して、何か動作させます。
Max Consoleを開きます。
すると、そこに送られた数字や文字を確認できます。

以上がデバッグに使える技です。
プレゼンテーションモードに追加
Valueなどの追加したモジュールを選択。
Ctrl + Shift + Pでプレゼンテーションモードに追加できます。

プレゼンテーションモードを有効化。

すると、Valueが増えました。
…Live.dialがデカすぎぃ!

Live.dialが大きいのでFキーの少数に変更。
注釈テキストを追加。

こちらを配置。
前後関係が上手く行かない時は、Ctrl + Shift + Fで最前面表示。

これで、live.dialを小型化できます。
…それでもちょっと大きい。

そこで、既存の数値入力ボタンを選択。
Ctrl+Shift+Hでヘルプを開きます。

Ctrl+Eで編集モード。
良さそうなデザインのモノを選択 → Ctrl+Cでコピー。

Helpを閉じ、LFOに戻り、Ctrl+Vでペースト。
InspectorでRange/Enum(数字の範囲)やInitial Value(初期値)を設定。

7つ目の、波が無い状態を入れた回路が完成(?)です。

たぶん、何かがおかしい。
何かが間違ってる。
ただ、それが何かは私には分からない。
わかる人が見たら、多分直せる設計ミスがある。
…ただ私には難しかったので、とりあえず動いた回路の作り方をまとめて進めます。
波形を4回路+合成化
クリック → ドラッグで波生成回路の全体を選択。
「p TimeMode」~「+~」まで。
こちらをCtrl+Cでコピー。

ペーストして右側に配置。
iから出る配線や、下の方の配線を追加修正します。

こちらの+~は新規で追加しました。

試しに動かします。
2つの波が合わさった波形になりました。

波の強度を変えれる機構を追加。
「* ~1.」を追加。
「数字入力」 → 「* 0.01」を作成して配線。
「* 0.01」の出力を「* ~1.」の右側に追加。

2つ目の波生成回路にもコピーペーストで追加。

左側の初期値を100に設定。

これで、最初の波は100%の影響。
それ以外は初期状態で0=波の影響を消せます。

「0=波の影響を消せる」…?
そして、このブログをまとめながら
Nullの波回路不要だった事に気づく。
そしたら、2つの波合成回路を選択。

こちらをコピーペースト。
右側に配置。
2つの「+~」を「+~」で結びます。
…なんと脳筋な回路。

あとは… 3つ目のInitial Valueを0に戻します。

これで、この回路が完成です。

あとは…プレゼンテーションモードを頑張ってデザインします。

…数字だけ切り出されると、何が何だか分かりません。
そこで、次紹介する技を使います。
プレゼンテーションのデザインに役立つ技
プレゼンテーションモードを解除。
この状態で、気になるダイアルを選択。

プレゼンテーションモードに戻ります。
すると、ダイアルは選択されたままになります。
これが、ダイアル確認に便利です。

また、4つ並んだものの場合…
プレゼンテーションモードを解除。
6 → 13 → 21 → 45などの仮の数字を入れます。

プレゼンテーションモードに戻ります。
数値情報は残ってるので、並び順の整理がしやすくなります。

あとは… がんばってデザインします。

動作を確認。
100点では無いですが、とりあえず動きました。

…とりあえず、このパラメーターで私が思ってる挙動になる事が分かりました。

ひとまず完成です。
おまけ:回路の改良
頑張って回路を修正します。
有効なバグ発見と修正のアイデアを出す方法
有効なバグ発見方法は下記の3つ。
・ブログなどにまとめる
・日を空ける
・人に聞く
・ブログなどにまとめる
やったことを文字化する事で思考を整理できます。
情報発信にもなるのでおすすめ。
私もこの方法でバグを見つけたり、思考をまとめてます。
そのためのブログ。
・日を空ける(寝かせる)
バグがある回路を作った時点で脳は疲れてます。
その状態で作業しても、有効な方法は思いつきません。
・人に聞く
どうしようもない時は、人に頼ります。
…こんな内容、頼れる人の方が少ない事案。
なので、コミュニティなどに参加するのがおすすめ。
現状の問題
・Null回路が不要(倍率0で動く)
・Sineなどの波形を選択しないと動かない
・初期値が不便
Nullという波形無しの波を作ろうとした時期がありました。
これは…倍率0で何とかなるのでは?と思い不要と気付きました。
これのせいで謎のパラメータが1つ増えて制御困難になってます。
君消す。

もう1つ、初期状態でSineの波が読み込まれてない問題があります。
Sineと表示されていても、Sineを再選択する必要があり手間。

あとは、初期時がHz、Rate1.00 Hzと不便です。
功徳を積むために、最初から良い感じの波になるパラメーターを入れます。

この3つを修正します。
バージョン差分作成
改善するためにバックアップを取ります。
Sig_LFOを開きます。
Ctrl+Shift+Sで別名保存。

Sig_LFO_v1などの名前を付け、別名保存。

Max 8のドキュメント内に、新しいフォルダができたことを確認。

これで、バージョン差分作成が完了です。
Null回路、君消す
申し訳ないですが、Null回路は不要でした。
消します。
選択 → Deleteキー。

途切れた線を繋ぎなおします。

これを4回繰り返します。

適当に数値を動かし、動作を確認。
問題無さそうです。

全体の移動はOffsetを使ってください。

そしたら… Null回路用に組んだ設定を戻します。
Shift+クリックで、波形選択のボタン全てを複数選択。

インスペクター → Range/Enumの(edit)を選択。

Nullの一文を削除。

これで、波形選択からNullの項目が消えました。

p waveform_selectも改造したので治します。
Ctrl+Eでロック → クリックして開きます。

selector~ の値を7に戻します。
▼6を選択 → Deleteキーで削除。

これで、6個目の穴が消えます。
消えた穴の配線は自動で消えるので、これで1つのwaveformの修正が完了です。

これを4回繰り返します。

上書き保存。

これで、Nullを消す処理が完了です。
最初からSine波を読み込ませる
Nullを消した状態で、Abltonで読み込ませてみました。
…よくわかりませんが、Null回路消したら治りました。

…次に進みます。
初期値を整え功徳を積む
まず、設定したい初期値を知る
Sig_LFOを2つ刺します。

左で設定したい初期値を決めます。

ドラムラックなどを用意。

実験用に、ベタ打ちでハイハットを鳴らします。

あとは… ディケイの代わりにFace Outを使います。
こちらに、Sig_LFO_v1のMapを割り当て。

鳴らしながら、良さそうな値を探します。
下記の設定が良さそうでした。
・1 – Random – 10 – Rate 1/16
・2 – Sine – 30 – Rate 1/8
・3 – Sine – 40 – Rate 1/4
・4 – Sine – 10 – Rate 1

こちらで、初期値の確認が完了です。
初期値を設定する
編集用のSig_LFO_v1を開きます。

まず、波形を設定します。

こちらは、Sine~Binまで0~6の数値が割り当てられてます。

Iキーで整数表示を追加。
下記のように配線し、動作確認。

下記の2つが分かれば大丈夫です。
・Sine = 0
・Random = 5
インスペクタ → Initial Valueで、この数字を設定します。

Initial Valueを下図のように設定。
これで、波形の初期値設定が完了です。

つぎは、Rateを調整します。
音符ボタンをクリック。
これで/4などの表記になります。

Fキーで小数を追加。
下図のように配線。

これで、必要なInitial Valueの値を特定。

特定したら、少数の表示を削除。
Initial Valueを入力していきます。

私は下図のように設定しました。
・4 = 1/16
・6 = 1/8
・9 = 1/4
・15 = 1

次に初期の数値を設定します。
先ほど調整したこの値です。

これを、Initial Valueに打ち込みます。

左から順に、決めた値を打ち込み。
これで、初期の数字設定が完了です。

最後に、音符ボタンを初期状態でオンにします。
これは0と1で管理されてるようです。

なので、このボタンのInitial Valueを1にします。
これで、設定が完了です。

他の所では、loadbang → メッセージで数字を飛ばしてる事もあります。
時と場合に応じて使い分けてください。

以上が初期値の調整です。
さらなる調整
見た目や、Hz設定の見え方を調整します。
まず、Rateを最大にまで上げてSing波で幅を確認。
この幅に合わせたバーを設定(「live.line」オブジェクト)。

Hzは一度、1 → 0 → 0 → 0のInitial Valueに設定。

Hzと音符を切り替えた際に、数字が変わるように配線。
・「sel 0」を作成 → Mキーで「0」と「100」のメッセージを作成。
・「sel 0」にHzと音符ボタンをつなぐ。
・「sel 0」左側の出力をメッセージに繋ぐ
・メッセージ100を一番左、それ以外を残りの3つの数値に繋ぐ

…これだと、見づらい配線になります。
そこで、「s」と「r」を使います。
・s=send(送信) / r=receive(受信)
・「s Num_1~4」とそれに合わせた「r Num_1~4」を作成
・元の配線を削除

100をNum_1に接続。
0をNum_2~4に接続。

数値入力の所に「r Num_1~4」をつなぎます。

これで、この配線と同じ効果が得られます。

次に「Sel 0 1」に書き換え。
これは、Hzから音符表示に戻した時の初期値設定です。

Mキー → 10,30,40,20を作成。
10を「s Num_1」に繋ぎます。

同様に、「S Num_2~4」も繋いでいきます。

これで、Hzと♪切り替えで、初期値が入るのですが…
Hzの際、「100」を1に差し込むと、Randomの波形であまり綺麗ではありません。

そこで、100をs Num_3に差し替え、0をs Num_1に差し替えました。

これに合わせて、Hz時のRateのInitial Valueの値を変更。

これでHzにした際は、wave3の影響度が100になります。
♪⇔Hz切り替えで綺麗なSine波が出ます。

Hzの際はwave1をSineに変える案もありましたが…
wave波形の並びは変えず、wave3を有効化する方が、
個人的に認識しやすく、使いやすいと感じました。

これで、Max/Mspを使ったLFO改造が完了です。
まとめ
今回はAbleton LiveのLFOを強化改造する方法を紹介しました。
・Max8があれば改造できる
・pやbpatheは別の回路が隠れてる
・bpatherはMax 8のドキュメント内にある可能性が高い
・bpatherのドキュメントは、元のパッチを別名保存すると自動生成される
・あとは… 目次で記事を振り返りながら、気が済むまで調整
・正直、モジュラーシンセ、Voltageで何とかした方が楽(ただし重い)
また、他にもMax/Mspや音楽についてまとめてます。
ぜひ、こちらもご覧ください。
コメント