昔からMaxのトップクラスβテスタであり、直前までIRCAMの「中の人」だった後藤さんにしか書けない、とても「濃い」資料なのだった。string」とか、伝説の物理モデル音源もGenでスマートに実装されている。今回の夏休みお勉強シリーズの最後あたりに、またザッと眺めてみることにした。・・・ということで、午後には気持ち良く、JoyJoyヒトカラに出かけることにしよう。2022年8月11日(木)昨日はJoyJoyヒトカラ6時間59曲を完走してヘロヘロになったが、なんと今日は祝日だという。昔は無かったけど新たに作られた「海の日」は知っていたが、「山の日」なんて祝日も出来ていたらしい。東京オリンピックに合わせて夏季の祝日を増設して、さらにオリンピック開催年には開会式とかの日に移動するために作ったのだろうが、COVID-19のために僕にとっては「幻の東京オリンピック」に終わったし、祝日感はまるで無い。2022」とのアナウンスが届いた。ページは、ぜひ学生にも精読して欲しいところだ。昨日は、自宅に届いたCQ出版「トランジスタ技術」誌の今月の特集が「3Dプリンティング」だったのを契機に、大きな決断をした。KAWAIにいた時には「インターフェース」誌とともに毎月必ず職場に届いていた「トラ技」を、翌年1993年の退社独立を視野に、1992年の秋ぐらいから地元の谷島屋書店外商部に定期購読を契約して自宅に配達してもらって、なんと30年間も続いてきた。AKI-80」・「コンピュータサウンドの世界」と4冊を出していた。特集記事を書いて、それが現在まで共同研究が続く、辻下先生との出会いに繋がったのだから、まぁCQ出版社に足を向けて寝ることは出来ない。して、20年分ぐらいをバッサリと捨てていた。今回、「トラ技」というにはあまりにも情けない「3Dプリンティング」特集だったのを契機に、定期購読の解除、つまり「トラ技」との別れを決断したのである。このところ約10年間、研究室の本棚を占領していた「トラ技」を取り出して開くということが皆無だったのも後押ししている。2024年3月まででサヨナラとなる1106研究室の本棚には現在、2013年1月号からの約10年分がズラリと並んでいるが、おそらくこれは自宅に引き取らずに「断捨離part2」ということで廃棄することになる。1106研究室にある雑誌以外の書籍類は厖大で、とうてい自宅に持っていけないので、どこかで全てSUAC図書館に寄贈する予定(市内在住なので読みたければSUAC図書館に来ればいい)なのだ。このページはザザーッといちばん下までスクロールしてみたところ、それで終わってしまった(^_^;)。上のパッチは最後に出てくる例であるが、要するに記述言語で信号処理を記述する「Codebox」のお話なのだが、僕はここにあまり深入りするつもりはないのだった。サイトに行って、記述言語系のスクリプトを拾ってきて、自前のCodeboxの中に貼り込んで、実際に動くまでメンテするほど深入りするのは、ちょっと躊躇しているのだ。行ってみることにした。Codebox」である。上のように、重要な概念である「history」が中核のテーマなので読み流すわけにもいかないが、「Codeboxを書かない」という姿勢の僕としては、どこかに拘泥することなく、しかしサラッといきたいという悩ましいパートだった。History...」という部分なのだった。注意して斜め読みしたところ、「Codeboxを書かない」という姿勢の僕としては、上の左側のGenを記述するのが右側のCodeboxだ、ということでとりあえず「理解」しておけば、中身の詳細はBlackBoxとして、このあたりのGenも活用出来そうだ・・・という気になった。要は「使えるgen~」、そしてさらには「使えるjit.gen」や「使えるjit.pix」があればいいので、ここの深入りはまた時間がある時に(実際はそんな時間は無いのだが(^_^;))・・・という切り分けをした。historyの概念は全くノータッチのままだが、内部にhistoryがあるGenがとりあえず使える状態であれば。中の詳細は問わずにGenの実戦的な実験に入りたいのだ。タイトルからちょっと期待していたのだが、中身はあまり使い出のないサンプルぐらいで、これもあっさりと通過した。Tutorials」というシリーズに進むことになった。明日はもうSUACも「お盆休み」に突入している時期だが、そういう邪魔の入らない時間はとても貴重なので、さらに明日、そして週末にもお勉強を進めていくことにしよう。Tutorials」に進む。いうことで、DeepL翻訳によれば意味としては「地上の楽園」であり、冒頭のコメントは以下だった。簡単なチュートリアルを行った後、多くの人々が、gen~オブジェクトを楽しむために超天才である必要はないことを発見して、本当に驚き、喜んでいることが明らかになりました。新しいGenのものは、日がな一日エレガントでパワフルですが、非常に少数のオブジェクトで非常に多くの楽しみを得ることができます。そこで、ここでは、あなたを怖がらせることなく、オーディオを楽しむための窓を提供することを望む、一連の小さなパッチを紹介します。これらのパッチは、どうしようもなく複雑なものでも、効率的でエレガントなものでもありません。あなたが遊び心を刺激されることを願っています。あなたの想像力を刺激するような、シンプルなプリセットもいくつか加えてあります。「これらのパッチを見るときに知っておくと役に立つ、いくつかの簡単なことがあります」として、かなり的確にGenをまとめた記述として以下の4点を指摘しているので、ここでもDeepL翻訳丸投げで転載しておこう。gen~オブジェクトの中のデータの流れは、MSPのように同期的ですが、サンプルのブロックに対して何らかのアクションを実行しようと考えるのではなく、一度に1つのサンプルに対して作業をしていますgen~オブジェクトの中のデータの流れは一定です。トリガーのようなものは存在しません。gen~のオペレータは常に何かを送信しています。シグナルのサンプル値、パラメータの値、またはある種のテストの結果などです。"からのメッセージでパッチをコントロールできるような特別なものが必要なのです。Genの世界では、そのためにparam(パラメータ)オペレータがあります。ここでは、その使い方を紹介しますデータは常に同期しているので、フィードバックループは実際には不可能です。その代わり、historyという演算子があります。これは1サンプルの遅延のような役割を果たし、データの平滑化やフィードバックなど、有用なフィードバックループを作成することができます。オペレータに対するアーギュメントとオペレータが持つインレットの数との関係に関係していることです。オペレータの初期値を指定するためにアーギュメントを使用すると、オブジェクトが持つインレットの数が変わります。それは、一度指定した初期値は変更できないからです。上の第4項目の説明として、以下の図があった。納得できるスマートなサンプルである。(^_^)そしてここから、大きく4種類のテーマでの解説が始まった。Tones」というタイトルで、「このチュートリアルでは、ディレイラインを操作することについて説明します。gen~オブジェクトはサンプル単位でオーディオにアクセスすることができるので、MSPが提供するシグナルベクトルよりもタイトなフィードバックループを設定することができ、新しいサウンドを作成する余地がたくさんあるのです」とのことだった。以下は最初のサンプル「drive-by1a.maxpat」をアレンジした例だが、まさになかなか凄いレゾンナスのエフェクトを軽々と(CPU=3%で)実現していた。中心となるdelayオペレータは、可能な最大ディレイの長さを指定する引数(サンプル数)を取るところがポイントである。上のパッチのもう1つの重要な部分は、ミックスオペレータである。これは、ウェットシグナルとドライシグナルをミックスして出力させるだけでなく、「Gen~の愛好家がどこでも使っているデータの平滑化の方法」を導入しているという。mix演算子は、最初の2つのインプットに2つの入力値を受け取り、右インレットで受け取った0.0から1.0までの値を元に補間された値を出力するが、もちろん一度に1つのサンプルに対して動作しているのだ。sig~によって内部の演算周期(遅延)を与えているのも、実用的に改訂する際の重要なサンプルになっている。ウェットドライミックスは、かなり分かりやすいはずですが、ここでは、フィードバックとデータスムージングにミックスオペレータを使用する一般的な例について、少し考えてみたいと思います。上は、フィードバック効果を追加する一般化された例です。パッチのフィードバック部分でも、mixオペレータとparamオペレータを使用して、現在の信号値と以前の信号値のバランスを制御しています。Gen環境は同期式なので、mixオペレータの出力を直接その入力の1つに接続してフィードバックループを作ることはできません。心配しないでください。演算子に引数を入力すると、フィードバックループの開始値をゼロに指定することもできます)。オブジェクトを完全にスキップすることができます。この例では、このフィードバックループを左右のチャンネルで2回使用しています。この例では、平均化されたサンプル値をウェット/ドライミックスの出力として送るとともに、ディレイオペレーターに再投入しています。その結果、ダンピングコントロール付きの典型的なリンギングディレイラインができあがります。このようなパッチは、あらゆる種類の有用なタスクに使用することができます。以下は2番目のサンプル「drive-by1b.maxpat」をアレンジした例だが、いくつかの簡単な拡張を加えて構築されている。line〜オブジェクトをパッチ内に追加)、さらに全体の出力にミキサヒストリーフィードバックモジュールを追加し、結合した信号に多少のリンギングを追加してみましょう。私は、チューニングやハーモニック効果を得るために、遅延させるサンプル数について数学的に関連した入力値を使うようになりました。このパッチの厳しくも心地よい音と付き合ってみてください」とあったが、これまた「CPU=4%」程度で、軽々とツセの強いレゾナンスサウンドを生成してくれた。Practice」であり、まぁここは簡単なところなのだった。以下は3番目のサンプル「drive-by1c.maxpat」をアレンジした例だが、gen~オブジェクト自体の外側で作業をしている。パッチ内の2つのMIDIキーボードを使って、鳴っているディレイラインを調整できるようにする、というシンプルで小さなサブパッチ「midi2period」を追加してある。適当に両方の鍵盤をクリックすると、なかなか素晴らしいサウンドが鳴ってくれた。mtofオブジェクトが生成する均整のとれた音程と暮らすのではなく、すでに単なる音程(単純な整数の周波数比として表現できる音楽の音程)について考えている人がいるかもしれませんね。自分で自由に変更してみてください(とても素晴らしいサウンドになります、私を信じてください)」とあったので、さらに以下のようにアレンジしてみた。これはさらにさらに面白い世界となった。どこかでこれを是非、使いたくなった。Silly....」(ネットワークだ、バカヤロー......)であり、以下は4番目のサンプル「drive-by1d.maxpat」をアレンジした例である。ここでは、「マイナーなバリエーションを追加し、控えめながら印象的な大きな変換を管理することができるようになりました」とあったが、Gen~の内部に「feeder」というパラメータで4種類のエフェクトの切り替えをしており、「フィーダーと呼ばれるパラマウント・オペレーターによって中継された着信メッセージは、ディレイラインに再投入するために、私たちが設定した4つのディレイラインのうちの1つにディレイシグナルを送るために使用されます。信号をそれ自身に戻す(ずっとそうしてきた)ことも、同じオーディオチャンネル上の2番目にチューニングされたディレイラインに戻すことも、反対側のチャンネルの1番目または2番目のディレイラインに戻すこともできるのです。ダンピングとピッチの相互作用、そしてディレイ信号のルーティングによって、実に興味深いサウンドが生み出されるのです」とあるように、MIDI鍵盤をあれこれ弾くまでもなく放置しても、いつまでも聞き飽きない面白いサウンドが、これまた「CPU=6%」以下で実現できた。「もちろん、他の可能性もあります。これは、このパッチで遊んでもらうための、恥知らずな試みです(正直なところ、最後の2つの例でウェット/ドライミキサーのロジックを省略したのもそうです)。いやー、なかなかに素晴らしい。関係が、「この2つは密接に関連していますが、まったく異なるものです。Gen環境での作業に関する基本的なコンセプトを、Maxの世界での経験に近い形で紹介するつもりです。環境のベクター特性を利用することによって、より効率的に書き直します」と述べられていて、この2つのセクションはペアの関係にある、と分かった。Land」には、またまた「Genオブジェクトの内部で行なうプログラミングは、通常のMaxのパッチング(データの流れを示す方法でオブジェクトボックスをパッチコードで接続する)と同じように見えますが、始めるときに知っておくと便利ないくつかの重要な違いがあります。Genオブジェクトも例外ではありません。それらは、実際、あなたがオーディオ処理に使用するgen~オブジェクトとは少し異なっています。」とあり、以下の4点が指摘されていたので、ここでもDeepL翻訳丸投げで転載しておこう。Genオブジェクトの内部で起こることは同期です。トリガはありませんし、物事が起こる順序についての概念もありません。Jitterの世界では、データの基本単位はベクター(vector)です。今のところ、このベクトルはビデオのフレームではなく、1つのピクセルのグループをまとめて記述する方法だと考えてください。実際には、マトリックス全体の個々のピクセル(データの単位)に対して、一度に同じ操作を行っていると考えた方が正しいのです。paramオペレータを使用します。JitterファミリーのGenオブジェクトのほとんどは、オブジェクトに対して1つのアウトレットしか持つことができません。好きなだけ多くのシングルマトリックス入力(それぞれがシングルマトリックスを表します)を持つことができますが、アウトプットは1つだけです。jit.genオブジェクトはこのルールの唯一の例外です。ある操作から次の操作まで、作業しているピクセルの値を保持する方法はありません。Genオブジェクトの履歴演算子というものはありません(心配しないでください。履歴オブジェクトを使うような方法はありますが、それは別のチュートリアルでお話します)。family」では、Genの冒頭で(後藤さんのレクチャーでも)紹介されていた、「Jitterの世界でGenを使うにあたって最初に気がつくことは、オブジェクトが1つではなく3つあることです。これらがどのように異なるかを説明します。オブジェクトは標準的なJitterの2Dイメージ処理用に作られたものです。これらは、1〜4プレーンの入力マトリックスで動作し、入力されたデータをイメージデータのように扱います。Unit)ですべての作業を行う点でjit.pixオブジェクトとは異なります。jit.genオブジェクトは、マトリックスが含むことができるあらゆるタイプのデータ(例えば、OpenGLなど)を扱う一般的なマトリックス処理オブジェクトです。オブジェクトを使用します」という確認から始まった。Genオブジェクトを扱う場合、マトリックス全体の個々のピクセル(データの単位)に対して一度に同じ処理を実行すると考えるのが最も簡単です。非常に低いレベルでは、jit.opやjit.exprオブジェクトのようなものがそのように動作します。Genオブジェクト内部の計算結果がオブジェクトの出口から一つのマトリックスとして飛び出してくるのです。Genパッチから始めてみましょう。私は、視覚的な多様性を生み出す方法としてカラーマッピングの大ファンです。1.0の範囲にある浮動小数点値です。GENLANDでは、色は常に浮動小数点数で指定されます」、「各入力画素に入力値を乗算し、コサイン関数の入力として使用します。コサイン関数は-1.0から1.0の範囲の値を出力することが分かっているので、コサイン関数の出力に0.5を掛け、さらに0.5を加えて、色に期待する0から1.0の範囲の値を生成することにします。その結果、迅速かつ簡単にカラーリマップを行うことができます。アンプパラメータに大きな値を使用することで得られるような結果が気に入っています」、「もちろん、cos演算子を他の演算子で置き換えることもできます(sin演算子も出力がcos演算子と同じ範囲になるので、うまくいきます)」、「このパッチは、出力を変更せずに渡す機能、コサインまたはサインマッピングのどちらかを選択する機能を追加するだけでなく、データを変更せずに渡すか、渡されたまたは処理されたイメージの出力を反転させるかを選択することができます」と説明が続いて、以下のようなファンキーなサンプルを楽しく体験することになった。オペレータを使用してマッピングと反転を処理しています。演算子は、その左インレットにテストの結果を取ります。入力が正(1)の場合、オブジェクトの第2インレットへの入力がアウトレットに渡されます。ない場合は、右インレットの入力が渡されます。パラメータを使用して設定します。サイン関数処理を使用します。パラメータは出力する色値を反転させるために使用されます。演算子を使用して、反転を行うことができます。このパッチへの小さな追加により、出力のバリエーションが大幅に増えました」との解説も、だいたい分かったものとして次に進めそうだ。Swizzle」を前にして、今日はここまでにしよう。後半あたりからである。昨日の最後の実験(すぐ上のスクリーンショット)で分かったのは、「jit.grab」のWebカメラからのjitterライン出力が「jit.pix」というGenに入って、その出力のjitterラインは単に「jit.window」に出て表示されている。0.5」、つまり同じ変域(0.0から1.0まで)の実数値を得てカラーテーブルを参照したものが、入力それぞれの画素に対応した出力の画素データになる、と『一気にまとめて』演算してくれる、というものだった。Swizzle」では、まず以下のようにポイントをまとめていた。これはまさにjitterそのものの考え方だ。各セルの行列の個々の平面に関するデータを取り出すことができます(ビデオ用語では、画像の赤、緑、青、アルファチャンネルの値を意味します。OpenGLのデータを扱うのであれば、OpenGLオブジェクトに関連する各頂点の12個の属性にそれぞれアクセスすることになります行列の各セルの位置に関するデータ(x、y座標)を取得することができます行列内の他の個々の画素の位置を指定することで、その画素からデータを取り出すことができます現在の画素にデータを書き込むことができます技術的なコンピュータグラフィックスの言い方としては、入力されるピクセルデータは、ベクトルと呼ばれる現在のピクセルに関する情報を表す数値のグループとして表示されます。Maxの用語では、MaxオブジェクトのJitterファミリーは、マトリックス(結局のところ、イメージ/OpenGLなどに関する情報を表す数値のグループとして)を入力として受け取り、それをデータのベクトルとして処理し、標準のJitterマトリクスを出力します。次のパッチでは、個々のピクセルに関連するカラーバリューを扱うことに注目し、それをいくつかの簡単なGenロジックと組み合わせて、前回のパッチの拡張バリエーションを作成する予定です。紹介したいと思います。Genオブジェクトを使い始めたとき、swizはunpackと同等、vecはpackと同等と考えるのが最も簡単だと思いました。注:演算子の名前は明白ではないかもしれませんが、ベクトルの個々の部分にアクセスして再結合することができるこの2つの演算の用語は、コンピュータグラフィックス界で広く使われています。swiz(swizzleの略)演算子では、名前を指定してベクトルの一部を取り出すことができます。swiz演算子に与える引数によって、個々の項目を取得することも、単一の項目のみを取得することもできます。vec(vectorの略)演算子は、出力用に構成要素から1つのベクトルを連結して出力します。Genオブジェクトで画像を扱うとき、入力ベクトルを分解して個々の色値を扱うときに使う名前は、r(赤)、g(緑)、b(青)、a(アルファチャンネル)と覚えやすい名前になっています。「前回のパッチのコサイントリックにひねりを加え、RGBの各値に対して独立して操作できるようにします」という「colormap_3a.maxpat」を改訂して実験したのが、以下の模様である。RGBそれぞれに分けて、昨日の実験の画素処理を実現するために、入力のjitter画素情報に対して、「swiz(swizzleの略)演算子で、名前を指定してベクトルの一部を取り出す」というのをやっている事になる。YouTubeパッチが3つのセクションからなり、それぞれのセクションの一番上にスウィズオペレータがあることにお気づきでしょう。入力演算子に新しい行列/ベクトルが到着すると、赤、緑、青の値がアンパック/スウィズルされます。範囲の浮動小数点数で、パッチの3つの部分は、前回のパッチでお分かりののと同じロジックで、それぞれの色の値を他の色とは独立に処理します。パッチの一番下に、vecオペレータがあります。オペレータを作成するときにオブジェクトボックスに入力される引数(デフォルト値)の数に依存します。vecオペレータのインレットのうち3つだけがパッチ内の他の場所に接続されていることに気づくでしょう。これは、このパッチではアルファチャンネル処理を行っていないためで、4番目の(アルファチャンネル)インレットの初期引数としてデフォルト値の1.0を用意すればよいのです。追加されたチャンネル処理に対応するために必要なことは、以前のチュートリアルパッチから機能を複製する際に、パラメータオブジェクトの名前を変更することだけでした。色値を渡すか処理するか(Rmode/Gmode/Bmodeパラメータに基づいて)、出力を反転するかどうか(Rinv/Ginv/Binvパラメータに基づいて)選択できるようになりました。swizというのは「unpack」みたいなものであり、これを最後にまとめる「pack」みたいなものがvec(vectorの略)なのだ。これは昨日のにも増してファンキーモンキーベイビー(死語)であり(^_^;)、つい、これだけでパフォーマンスをしたい気になってしまう。」では、RGBの色でなくて、2次元の座標(x,y)を取り扱うことになる。「jit.pix2次元画像の世界では、個々のピクセルの位置はxとyの座標位置で識別されます。xとyの座標は0.-1.0の範囲の浮動小数点数(我々の色値と同じ値域)です」・「jit.exprオブジェクトに関するチュートリアルで、我々が正規化された数値と呼んでいるものを扱っていることはすでにご存じでしょう。Genオブジェクトは、norm演算子(入力マトリックスの正規化された座標にアクセスする方法を提供します)と、画像内の別のセルからのベクトルにアクセスできるsample演算子を組み合わせて、オブジェクトの位置を操作したい場合にこれらを使用します」とあるように、これまでjitterの画像はいろいろなサイズのために座標で苦労してきたのだが、ここでは「norm」で正規化されているので、別途にjitter入力した座標系(スケール)にはsampleで合わせることが出来るのだった。以下のように確認できたが、これは素晴らしい改良である。値を含むベクトルが入力として渡されます。ゼロのペアを含むベクトルを送信すると、入力と同じセルがサンプリングされ、出力に渡されます。座標を返します(デフォルトでは、作業中のセルの位置が表示されます)。swiz出力値に何らかの値を加えると、元の入力からオフセットした別のセルをサンプリングすることになります。オフセット値を加えると、入力行列の半分の長さのセルが右側に配置されることになります。入力マトリックスの半分の高さのセルを下方向に配置します(負の浮動小数点値は上/左へのオフセットを示します)。演算子に与えると、そのセルのベクトル値(アルファ、赤、緑、青)が取り出され、出力されます。ノルム値とオフセット値の合計が0より小さい、あるいは1.0より大きい場合、どうなるのだろうかと思うかもしれません。Genのサンプルオブジェクトは、すべての合計を安全に境界内に保つために、期待される範囲にない入力値を自動的にラップします。演算子のこの機能を利用します。遊ぶのだが、これがGenでサクッと出来るとすれば嬉しいことだ。浮動小数点データ範囲を扱うことの1つの興味深い特徴は、x軸またはy軸にイメージを反映させるためにその範囲内でデータを修正することができるということです。swizしたxとyの値とオフセットを使って単純な万華鏡の効果を作り出します。位置の値をswizしてオフセットを与え、そのオフセット値を使って入力を水平方向と垂直方向にミラーリングしています」とのことだったが、どうもこの「xyswizzle_2a.maxpat」は僕は気に入らなかった。いうのも、万華鏡効果の4つのプレーンをミックスしてしまっているので、全体にモワッと/ゴチャッとした感じで、肝心の万華鏡効果が薄れてしまっていたのだ。まとめだという「swizzlemap_1a.maxpat」も、RGBの加工との合体なのだが、こちらも万華鏡効果が相殺されていたので、一念発起、自分なりのオリジナル化を目指した。YouTubeそして、自分なりに「反転万華鏡」の部分を切り出したGen(jit.pix)と、上でやったRGB操作のGen(jit.pix)と、2つのGen(jit.pix)ボックスを持ったオリジナルのパッチを使って遊んでみたのが、上のサンプルである。これはもう、完全にここのTutorialの中身が身に付いた感じとなった。終わりということで、ここを区切りにする事にした。台風は関東地方に向けてまっしぐらで進んでいる。ネットニュースでは、「国内最大の同人誌即売会『コミックマーケット100』が13日、東京都江東区の東京ビッグサイトで開幕した。支えてきたサブカルチャーの祭典。2020年の新型コロナウイルス禍による開催中止などを乗り越え、100回目を迎えた」というのが流れてきた。「台風がコミケを直撃した」という上の画像も流れてきたのだが、実はこれはフェイクで、AIに「台風が直撃したコミケの様子」というお題を与えて、お任せの自動で描かせたのだという。凄い時代になったものだ。2022年8月14日(日)台風一過のお盆の猛暑のこの日、研究室に出て来れば空調が快適である。Genの世界でベクターからデータをswizzleするという考えを導入しています。それらはパッチとしてうまく機能します。Genの世界では、ベクトルが頂点に君臨しています。とほとんど同じ名前のパッチばかりであり、新たな内容の紹介というよりも、vectorの本質的な使い方で同じパッチを再構築しよう・・・というもののようだ。初心者の場合、ベクターの観点で考えることは、パッチを作成する際にどのようにデータを組み合わせたり、分割したり、再結合したりするかについて、いくつかの簡単な思考習慣を身につけることになります。ライク」で効率的になるように書き換えてみましょう。多くの場合、出来上がったパッチは、かなりコンパクトになります。JitterファミリーのGenオブジェクトの説明で最初に述べたことの1つは、jit.pixとjit.gl.pixオブジェクトは両方とも2次元イメージを表すマトリクスを操作するということです。ベクトルを扱う場合、パッチングの際にvecオペレータを使う必要がないことがよくあります。場合によっては、個々のデータビットをスウィズアウトする必要すらありません。集約されたデータを操作するのであれば、jit.pixとjit.gl.pixオブジェクトのいくつかの特殊な機能を利用することができます。中で、RGBそれぞれに対して画素単位での処理を行っていた、下(上)の「colormap_3a.maxpat」が、なんと下(下)の「colormap_3b.maxpat」のように出来るのだ、というお話だった。これは凄いことで、ますますシンプルになった。(^_^)そしてさっそく、昨日の最後に「まとめ」として作っていた「GEN_test_12.maxpat」に今回の改訂を追加して、さらに万華鏡/曼荼羅の効果を自動生成する部分に「line」を使って、以下のような「GEN_test_13.maxpat」にまとめてみた。これはいくら遊んでいても飽きない、怪しい世界である。(^_^;)YouTubeここまでが前半で、R/G/Bの処理をまとめてベクトルとして処理したということで、残るのはoffsetのx/yの部分についても、まとめてベクトルとして処理できる・・・という話であり、チュートリアルのページをザッと斜め読みするだけでその真意は把握できた。3.14」として既存のMaxパッチとして与えればいいのだった。これをoffsetのx/yでやるとすれば、以下の左の部分は以下の右のようにシンプルになるのだ。万華鏡/曼荼羅の処理に関しても、以下の上のこれまでのGenに対して、vectorの考え方を使えば、以下の下のようになるのだという。これはさらに、シンプルなのだが、どうせ僕のオリジナルの「GEN_test_13.maxpat」では、「xもyも反転」という部分しか使っていないので、これをさらに加えることはパスしたが、今後にはこの考え方の理解があれば、まずは「前進」だろう。