![見出し画像](https://assets.st-note.com/production/uploads/images/110643595/rectangle_large_type_2_8b6940a37903feb7a4415db0aa75f4fb.png?width=1200)
Max8 Max/msp Max for Live Building Max Devices 解読 1
fendoapです。 max/mspについて入門的な記事を箇条書き的にリストアップして書いていこうと思います。
gumroadでMax for liveをリリースしています。
![](https://assets.st-note.com/img/1689084682757-VFifPf7vJ3.png?width=1200)
M4L Note Doubler
Building Max DevicesからいくつかのM4Lの中身を見ていきます。
M4L Note DoublerはMidi ディレイの一種です。入ってきたmidiにディレイをかけて出力します。中身はこんな感じです。
まずmidiinからそのままmidioutにパッチコードが接続されています。これで入力がそのまま出力されています。
次にmidiparseでNote on offを取得しています。これをnote情報とvelocity情報に分割しています。
次にpipeでディレイをかけています。そしてvelocityを調節して再びpackで結合してmidiformatでmidi形式にしてmidioutで出力しています。
![](https://assets.st-note.com/img/1689087031762-XtduXyHpPN.png?width=1200)
Octave Adder
Octave AdderはMidiエフェクトで、指定した範囲までのオクターブの音を重ねるエフェクトです。
例えばC3が入ってきて+2とした場合 C3 C4 C5が発音されます。
これが中身です。上からmidiin→midiparseでnote on offを取得しています。
次にunpackでnoteとvelocityにメッセージを分割しています。
noteナンバーはp AddOctavesに入力されています。p AddOctavesには Octave Copiesから数字が送られています。
![](https://assets.st-note.com/img/1689088586815-FINdrWzjrt.png?width=1200)
ひとまずここからサブパッチの中身を見ていきます。
下が p AddOctavesの中身です。 左からノートナンバーが入ってきます。右からオクターブに+1されたものが入ってきます。
ひとまず2が入ってくると仮定します。すると2+1=3で3がuziに入力されます。これはuziのbang回数を示しています。
ノートナンバーが入ってくるとノートナンバーはintに保持されuziがトリガーされます。uziの右からは1~3のインデックスが出力されます。これに-1して×12すると元のピッチに対してどれだけノートを足したら良いかが計算できます。今回は0 12 24という数字になります。uziはbangするたびintで保持した値を出力するので元のピッチ +1オクターブ +2オクターブの3つがアウトレットから出力されます。
![](https://assets.st-note.com/img/1689088728331-hclZHRrz5t.png?width=1200)
ここで元のパッチに戻ります。サブパッチでオクターブ分のボイスが重ねられて出力されたものはパックされflushに送られます。flushはbangされると今発音しているノートをすべてoffにします。octaveのパラメータが変更されると一旦ノートがoffにされます。それ以外はflushはノートを通過させます。
通過したノートはpackされmidiformatでmidi形式にされ出力されます。
![](https://assets.st-note.com/img/1689089038887-1Jjbx1pCkH.png?width=1200)
Basic Saw
Basic Sawはシンプルなモノフォニックの、のこぎり波シンセです。
パッチの中身を見ていきます。まずmidiin→midiparse→unpackで分割されています。次にpitchの部分に+がありますがこれはピッチシフトの改造余地です。ひとまずそれを抜けるとmtofで周波数に変換されてsaw~に入力されています。
![](https://assets.st-note.com/img/1689089943251-QWdI1LZcmJ.png?width=1200)
右はエンベロープにつながっています。/127されて0~1の間にスケーリングされています。decayはappend 5でline~に入力するリストメッセージを作成しています。5msかけて目標の値に滑らかに移動するランプ化の処理が行われています。adsr~は0以外が入力されるとトリガーされ0が入力されるとリリースされます。これが*~にかかってエンベロープとなっています。
Noise Adder
入力された信号に合わせてノイズを追加するエフェクトです。
パーカッションサウンド、スネアなどと相性が良さそうです。
パラメータはハイパス、ディケイ、ノイズゲインです。
![](https://assets.st-note.com/img/1689142595017-LZARtgmdQs.png?width=1200)
中身を見ていきます。まず入力は左右を結合してcascade~に送られます。cascade~は係数などを指定してフィルターを作成するオブジェクトです。cascadeにはfilterdesignというオブジェクトが繋がっています。これはフィルターの仕様を指定するとcascade~にパラメータを送ってフィルターを制作してくれるオブジェクトです。ハイパスが指定されていて周波数の情報を送るとパラメータが決定されcascade~に送られます。
次はp GetAmplitudeというサブパッチに信号が送られています。ここでエンベロープを制作しています。
![](https://assets.st-note.com/img/1689142700108-jpEdeyVbv1.png?width=1200)
サブパッチの中身を見ていきます。左インレットからはシグナルが、右からはディケイタイムの数字が入ってきます。シグナルは絶対値にされてrampsmooth~に送られています。rampsmooth~はサンプル単位でランプ化を行うオブジェクトです。上りは短い時間が指定されています。メインは下りでこの下りのサンプル数をディケイタイムから計算しています。
まずサンプリングレートをdsprate~で取得しています。
これを/1000しています。例えば48000→48となります。この数字とディケイタイムのmsを掛けるとサンプル数になります。この処理はmstosamps~で代用できます。ここで求めたサンプル数をrampsmooth~に送っています。
ランプ化された信号が出力されます。
![](https://assets.st-note.com/img/1689142908999-ikCvaR45yo.png?width=1200)
再び元のパッチに戻ります。
![](https://assets.st-note.com/img/1689143136325-PhwOSo3KI5.png?width=1200)
ランプ化された信号はエンベロープとして使われます。エンベロープはノイズゲインによって振幅が調整されます。live.scope~によってエンベロープを表示すると同時に、ノイズと*~によって掛けられて出力されます。
Human LFO
少しランダムなサイン波をLFO波形に持ち他のデバイスにマッピングできるLFOのデバイスです。
live_set viewとはソングビューとアレンジメントビューの一番上のpathです。
Max for Live
max/mspによる制作
pure dataによる制作
よろしければサポートお願いします!