パラダイス

Max9をはじめよう#5-4:ADswap

2026.06.02

この連載ではノウハウ0の状態からMax9で制作に関するプログラムの自作を目指します!試行錯誤をしながら一緒に無限の可能性を探っていきましょう。※Max for Liveについてはこちらの過去記事をご覧ください。


こんにちわ。タムラです。
引つづきナイスでクールなM4Lデバイスを作っていきます。

シリーズ前回記事:#5-1 #5-2 #5-3

前回の記事ではTransformを使ってオクターブ上げることに成功しました。ここまで来たらあと少しな気がしてます。

準備は人間が

まず特定のピッチから狙ったピッチに移動するコードをAI様に書いてもらうために私人間は、スプレッドシートにまとめました。

ところどころ歯抜けになっているので注意です。

『元ピッチ』にノートがある場合、ボタン一発で『処理後のピッチ』にノートが移動するようなコードを書いていただきます。

スプレッドシートを投げた後、何度かキャッチボールして完成したコードがこちらです。

inlets = 1;
outlets = 1;

// 元ピッチ → 処理後のピッチ の対応表
var pitchMap = {
    36: 36,
    37: 42,
    38: 38,
    40: 37,
    41: 65,
    42: 49,
    43: 67,
    44: 48,
    45: 68,
    46: 55,
    47: 69,
    48: 70,
    49: 77,
    50: 71,
    51: 60,
    52: 62,
    53: 61,
    55: 81,
    56: 47,
    57: 79,
    59: 60
};

function dictionary(dictName) {
    var inDict = new Dict(dictName);
    var jsonObj = JSON.parse(inDict.stringify());

    var notes = jsonObj.notes;

    if (notes) {
        if (Array.isArray(notes)) {
            for (var i = 0; i < notes.length; i++) {
                var p = notes[i].pitch;
                if (pitchMap[p] !== undefined) {
                    notes[i].pitch = pitchMap[p];
                }
                // マップにないピッチはそのまま
            }
        } else if (notes.pitch !== undefined) {
            var p = notes.pitch;
            if (pitchMap[p] !== undefined) {
                notes.pitch = pitchMap[p];
            }
        }
    }

    var outDict = new Dict();
    outDict.parse(JSON.stringify(jsonObj));
    outlet(0, "dictionary", outDict.name);
}

あとは少し見た目を整えて….

完成です!
あやかって『AD swap』と名付けました。

これが….


こう!!

同じ音が出ました。大満足です!


AD → GMマップにスイッチできる機能の実装も考えましたが、実際の運用から必要性を感じなかったので今回は漢の単機能M4Lです。シンプル is ベスト。

AIと仲良くなろう

AIは利用の仕方によってセンシティブな面があるかもしれませんが、自分がふと思いついたアイデアを実現してくれるツールとして非常に便利だと本件で改めて感じました。

SNSでも自作プラグインなどよく見かけるようになった印象がありますし、『こんなのやってみたいんだけど』の出発点としてAIに投げかけてみるのもいいかもしれません。

チームRock oN
渋谷店と梅田店からスタッフの個性全開のマニアックなコンテンツを発信!
記事内に掲載されている価格は 2026年6月02日 時点での価格となります