Max 7で本栌的なアプリケヌションを䜜成したす。パヌト1-問題の説明、ビゞュアルプログラミング

情報の芖芚化の問題を解決するずき、明らかに、考えられたこずの実際的な実装の問題が生じたす。 この䞀連の蚘事は、Cycling '74のMax 7でビゞュアルプログラミングを䜿甚しおアプリケヌションを蚭蚈するプロセスに専念しおいたす。 単玔なものから耇雑なものたで、問題の研究を始めたしょう。 アマチュアの準備から本栌的な「単䞀ファむル」アプリケヌションスタンドアロン.exeに進みたす。

レベル簡単

♞

最終結果


確かに誰かがプログラムを䜿甚しおいお、それがMaxを䜿甚しお䜜成されたこずに気付いおいたせん。 このようなプログラムは、たずえば、 DAW Ableton Liveです。 Max for Liveのためだけでなく、オブゞェクトのむンタヌフェむスによっお掚枬できたす。 もちろん、このような深刻なプロゞェクトでは、Maxだけでなく、远加のラむブラリ、ファむル、スクリプトなども䜿甚されたす。 iPadには、サりンドを操䜜するための最新のプログラムもありたす。 このシリヌズの蚘事では、最も単玔な䟋から始めお、このような耇雑なアプリケヌションの蚭蚈プロセスを理解しようずしたす。

目次


1.ビゞュアルプログラミング
→1.1。 コンセプト
2.最倧7むンタヌフェヌス
3. Maxでプログラムを構築する原理
→3.1。 入力ず出力を備えたモゞュラヌオブゞェクト
→3.2。 カプセル化[pパッチ名]
→3.3。 日曜倧工パッチ
→3.4。 [bpatcher]
4.プログラム構造
→4.1。 デザむンスペヌス
→4.2。 最初のステップ
→4.3。 バング、メトロ、カりンタヌ、ナンバヌ
→4.4。 過剰を取り陀く
→4.5。 その他のオブゞェクト
→4.6。 論理挔算子、正芏衚珟
→4.7。 論理匏
5.䟿利なモゞュヌル
添付ファむル
䟿利なリンク
♞

§1.ビゞュアルプログラミング


ビゞュアルプログラミングは、テキストを曞く代わりにグラフィックオブゞェクトを操䜜しおコンピュヌタヌプログラムを䜜成する方法です。 [1]


このプログラミング方法により、読者はC / C ++のような蚀語でコヌド行を曞くこずから離れるこずができ、すべおがモゞュヌルずそれらの関係の圢で提瀺されたす。 開発プロセスはより芖芚的か぀高速になり、プログラムは実行䞭にリアルタむムで実行されたす。 構造の倉曎に぀いおは、コンパむルなしで結果がすぐに衚瀺されたす。 実際、プログラムの論理フロヌチャヌトを䜜成しおいたす。

芖芚化の問題を解決するには、ビゞュアルプログラミング蚀語であるMaxMSPを䜿甚したす。 基本的に、Maxはむンタラクティブなアヌトオブゞェクトを䜜成するように蚭蚈されおいたすが、膚倧な数の問題を解決するためにも䜿甚できたす。 倚くの分野で、矎しく芖芚化できるものを芋぀けるこずができたす。 未知のプログラムのさたざたな矎しいむンタヌフェむスがヒヌロヌのコンピュヌタヌに描かれおいるこれらのスパむ映画を思い出しおください。 そしお実際には-たずえば、センサヌからの情報の芖芚化。 さらに、WindowsマシンずMac OSコンピュヌタヌの䞡方で開発を行うこずができたす。

§1.1。 コンセプト


実装プロセスを説明するために、次の抂念を玹介したす。



電気通信に関しおは、モゞュヌルはスむッチずしお機胜し、スむッチは指定された機胜を実行し、結果を出力ポヌトに送信したす。

§2.むンタヌフェむス最倧7


ご泚意 この蚘事では、明癜なこずを掘り䞋げないようにしたす。 オブゞェクトおよびモゞュヌルの操䜜に関する倚くの远加情報がヘルプで利甚可胜です-オブゞェクトを右クリックし、「object_nameヘルプを開く」。 したがっお、プログラム芁玠を説明する堎合、構文たたは構造ではなく、䞻にその目的が優先されたす。

基本的に、モヌドを䜿甚したすコンストラクタヌずプレれンテヌション、およびコン゜ヌルりィンドり最倧コン゜ヌル、オブゞェクトむンスペクタヌむンスペクタヌ、CTRL + Iおよびパッチむンスペクタヌむンスペクタヌりィンドり、CTRL + SHIFT + Iを確認したす。



  1. プログラムのメむンメニュヌ
  2. [むンレット]オブゞェクト。 モゞュヌル入力
  3. モゞュヌルのコンポヌネントオブゞェクト、実行可胜郚分。
  4. [アりトレット]オブゞェクト。 モゞュヌル出力。
  5. 怜査官。 遞択したオブゞェクトのパラメヌタヌ。
  6. パッチ線集のロック/ロック解陀。
  7. デザむンモヌドずプレれンテヌションモヌドを切り替えたす。
  8. オン/オフグリッド。
  9. プログラム領域。


§3. Maxでプログラムを構築する原理


§3.1。 入力ず出力を備えたモゞュラヌオブゞェクト


プログラムを䜜成するプロセスは、モゞュヌルずモゞュヌル間の関係のブロック図を䜜成するこずになりたす。 Maxに組み蟌たれおいるモゞュヌルを䜿甚できたすが、最も興味深いのは自分でモゞュヌルを䜜成するこずです。 これは、プログラム内から呌び出す堎合ず、プログラミングプロセス党䜓で䜿甚する堎合の䞡方で非垞に䟿利です。 通垞のプログラミングでは、このモデルはOOPの圢匏で提瀺されたす。たたは、1぀のモゞュヌルを1぀の関数ずしお想像できたす。そのパラメヌタヌはモゞュヌルの入力[むンレット]、戻りは出力であり、倚くの出力[アりトレット]がありたす。

泚パッチにオブゞェクトを远加するには、空のスペヌスでマりスを2回クリックするか、Nキヌを抌しお名前を入力し、Enterキヌを抌すず、既に他のオブゞェクトず接続できたす。

カスタムモゞュヌルを远加するには、いく぀かの方法がありたす。

-カプセル化[pパッチ名]、
-スタンドアロンパッチ、
-[bpatcher]。

§3.2。 カプセル化[pパッチ名]


この抂念は、通垞のプログラミング蚀語でのカプセル化の抂念に䌌おいたす。 この堎合、すべおが基本です。グルヌプ/モゞュヌル/ファむルに結合するオブゞェクトを遞択し、CTRL + E線集-カプセル化を抌したす。 この方法でカプセル化が完了するず、出力はモゞュヌル-[p patchname]になりたす。patchnameは英語のフレヌズです。 数字も䜿甚できたす。

このプロセスの完了埌、マヌゞされるオブゞェクトはMaxパッチりィンドりから消えたす。 実際、元のパッチ内のMaxは、サブパッチャヌを䜜成し、遞択したすべおのオブゞェクトずその接続を転送したす。 倖郚接続の存圚に応じお、カプセル化装眮は自動的にオブゞェクトのむンレットずアりトレットを挿入し、それらを倖郚オブゞェクトに接続できたす。 これは、オブゞェクトを積み䞊げるこずを考えずにプログラムを開発する堎合に非垞に䟿利です。特定の量に達するず、プログラムの構造が読みにくくなり、自分で混乱するためです。 Encapsulation in Maxは、プログラムの構造を敎理する問題を解決するように蚭蚈されおいたす。

機胜 これは、さたざたな基準に埓っおオブゞェクトをグルヌプ化/区切るツヌルです。 このモゞュヌル䜜成方法は、各モゞュヌルの䞀意性を暗瀺しおいたす。 ぀たり この方法で1぀のモゞュヌルを䜜成しお耇補するず、これらはすでに2぀の異なるモゞュヌルになりたす。 それらの1぀を倉曎しおも、残りの重耇は倉曎されたせん。

アプリケヌション オブゞェクトの䞀意のグルヌプ、1぀の堎所でのみプログラムで䜿甚される単玔たたは耇雑な蚈算。

§3.3。 日曜倧工パッチ


モゞュヌルを䜜成するには、別の方法を䜿甚できたす。 新しいファむルを䜜成し、必芁なブロックを远加しお接続し、入力[inlet]を受け入れ、出力-[outlet]に送信するオブゞェクトを配眮し、任意のフォルダヌにファむルを保存したすたずえば、別のフォルダヌ「tools」を䜜成し、そこにパッチをスロヌしたすそのプレフィックス。 次に、䜜業パッチで、[file_name]ずいう名前のオブゞェクト.maxpatファむルの蚱可なしを远加したす。

この方法は、䞊蚘のカプセル化ず組み合わせお䜿甚​​できたす。 さらに䟿利です。 必芁なオブゞェクトをカプセル化し、結果のモゞュヌルを開きロックモヌドで、マりスの巊ボタンでブロックをダブルクリック、独立したパッチずしお保存できたす。

機胜  「ブラックボックス」タむプのモゞュヌルを䜜成するのに䟿利なもの-モゞュヌルを䜜成したら、その構造などを必芁ずせずに戻るこずはできたせん。 入力、モゞュヌル名、出力の3皮類の情報のみが衚瀺されたす。 そのようなモゞュヌルを耇補するずき、それらのコンテンツが䞀意にならないこずが重芁です。 耇補の1぀での倉曎は、それらすべおの倉曎を䌎いたす。 より正確には、この堎合、重耇したモゞュヌルではなく、元のモゞュヌルファむル自䜓が線集されたす。

アプリケヌション 個々の蚈算甚のモゞュヌルを䜜成するずきにこのメ゜ッドを䜿甚するず䟿利です。 機胜により、耇数のモゞュヌルを耇補できたす。

良い䟋は、メッセヌゞを10進数から2進数に倉換するモゞュヌルです。 この堎合、メむンパッチ内の翻蚳者の抜象化オブゞェクトの単玔なコピヌアンドペヌストは、トヌンが悪い兆候です。 モゞュヌルに倉曎が必芁であるこずが刀明する堎合がありたす。 1぀のファむルを倉曎する方が、このコピヌアンドペヌストを繰り返すよりも簡単です。

§3.4。 [bpatcher]


前の方法で「ブラックボックス」を䜜成した堎合、構造を線集せずにモゞュヌルの䞀郚を開いた状態で衚瀺する必芁がある堎合がありたす。 さたざたな数倀の芖芚化、サヌビスメッセヌゞの衚瀺などが可胜です。 さらに興味深いのは、モゞュヌルのプレれンテヌション郚分を远加するプロセスです。

この方法は、独立したパッチの適甚範囲を拡倧したす。 䜜業パッチにモゞュヌルを远加するには、オブゞェクト[bpatcher]を䜜成し、そのプロパティのむンスペクタヌでモゞュヌルファむルぞのパスを指定したす。

特城 プレれンテヌションの郚分だけでなく、モゞュヌルの構造ず接続も確認できたす。

アプリケヌション プログラム構造の最䞊䜍レベルの線成に適しおいたす 。 実際、グルヌプ化されたモゞュヌルを1぀のオブゞェクトで衚瀺したす。これは非垞に䟿利です。䞍芁なワむダのヒヌプず補助オブゞェクトを取り陀きたす。 必芁な郚分のみが衚瀺されたす。

§4.プログラム構造


プログラムを曞くプロセス党䜓は、倚数のカプセル化ず䜜業パッチぞのサブパッチの远加に削枛されたす。 これは非垞に論理的で䟿利です。特に、さたざたなアプリケヌションの倚くのモゞュヌルがある耇雑なプログラムを蚭蚈する堎合に䟿利です。 実際、プログラムの「䞻力補品」をどんどん深く掘り䞋げおいくだけで、出口ではほんの数個のオブゞェクトの基本構造になりたす。 モゞュヌルのいずれかを倉曎する必芁がある堎合は、そのファむルを開いお問題なく実行したす。

個人的には、このプログラムの蚭蚈方法はより芖芚的です。 たた、倧量の文字コヌドを耇補する必芁はなく、堎合によっおは非垞に面倒です。

䞊蚘のメ゜ッドによっお䜜成されたモゞュヌルの芖芚的な䟋は、tut01_subpatches.maxpatファむルで提䟛されたす

§4.1。 デザむンスペヌス


倚数のラむブラリを持぀耇雑なプログラムを䜜成するために、Max 7はプロゞェクトを䜜成する機胜を提䟛したす。 この機胜は、プロゞェクトで䜿甚されるパッチおよびその他のファむルのリストずしお衚瀺されたす。 右偎のサムネむルは、デゞタル信号凊理を芖芚化するための既に完了した䞻芁プロゞェクトの内容を瀺しおいたす。 ご芧のずおり、リストには.maxpatパッチファむル自䜓だけでなく、他の皮類のファむルも含たれおいたす。

将来的には、このプロゞェクトのどこにどのモゞュヌルが䜿甚されおいるかを知るために、「自分甚に」そのようなリストを䜿甚するこずが可胜になりたす。 ただし、メむンパッチからでも、プロゞェクトのメニュヌからでもプログラムをコンパむルできたす。 違いは、プロゞェクトを開くずきに、デフォルトのパッチを開くように蚭定できるこずです。プロゞェクトを開くず、割り圓おられたパッチがファむルのリストずずもに開きたす。

§4.2。 最初のステップ


新しいプロゞェクトを䜜成するこずにより、Max 7環境でのプログラミングに぀いお孊ぶずいう厄介な旅を始めたす。 ファむル→新芏プロゞェクト。 たずえば、すべおのプロゞェクトを別のフォルダヌに保存するこずをお勧めしたす-C\ Max Projects \ ...ディスクのルヌトにあるプロゞェクトフォルダヌの堎所は、特にプログラムたたはOSのバヌゞョンを倉曎する堎合に非垞に䟿利です。

プロゞェクトを保存するず、プロゞェクトパッチのリストを含むりィンドりが開きたすが、珟圚のずころ空です。 プロゞェクトに新しいファむルを远加したす。
+→Add New File ...プロゞェクトファむルがあるディレクトリにファむルを保存するず、Maxはパッチファむルが実際に保存されるパッチフォルダをそこに䜜成したす。

§4.3。 バング、メトロ、カりンタヌ、ナンバヌ


時蚈付きのカりンタヌなど、単玔なものから始めたしょう。 カりンタヌは、クロックゞェネレヌタヌメトロノヌムからのバングメッセヌゞがカりンタヌ入力に到着したずきにのみ、1ず぀倀を远加したす。

バングは、モゞュヌル/オブゞェクトを開始する特別なメッセヌゞです。 モゞュヌルの出力に察する操䜜が完了するず、䜕らかの倀が埗られたすが、モゞュヌルから出力にデヌタを送信するずいう事実には、bangメッセヌゞが䌎いたす。 Bangは、どこかにメッセヌゞを送信する必芁があるずきに䜿甚されたす。 圌は、いわば、オブゞェクトからオブゞェクトぞのパスに沿っおメッセヌゞを「プッシュ」したす。

右の画像のように、パッチにオブゞェクトずリンクを远加したす。

ご泚意 パッチはテキスト圢匏で簡単に亀換できるため、Maxも優れおいたす。 これは次のように発生したす-CTRL + Aを抌しおパッチ内のすべおの芁玠ずリンクを遞択し、CTRL + Cをコピヌしおから、サむト䞊のテキスト゚ディタヌたたはフォヌムを開き、クリップボヌドからテキストを貌り付けたす。 実際、プログラムの状態構造、デヌタの説明は、コピヌしたJSONテキストの圢匏で衚瀺されたす。 そのような情報を読むこずはそれほど難しくありたせんメむンメニュヌで、Max 7 Files→New from Clipboard ...䞀般に、新しいファむルを䜜成する必芁さえありたせん。すでに開いおいるパッチにコピヌを盎接貌り付けるこずができたす。 したがっお、Maxはクリップボヌドからテキストを読み取り、それをモゞュヌルずそれらの間の関係に解釈したす。

以䞋のプログラムコヌドをコピヌしお、Maxに貌り付けおみおください。
Tut_lesson01モゞュヌルコヌド
{ "patcher" : { "fileversion" : 1, "appversion" : { "major" : 7, "minor" : 0, "revision" : 2, "architecture" : "x64", "modernui" : 1 } , "rect" : [ 458.0, 167.0, 574.0, 390.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Arial", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "boxes" : [ { "box" : { "id" : "obj-21", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 265.0, 165.0, 30.0, 20.0 ], "style" : "", "text" : ")" } } , { "box" : { "id" : "obj-20", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 145.0, 165.0, 30.0, 20.0 ], "style" : "", "text" : ")" } } , { "box" : { "id" : "obj-19", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 25.0, 165.0, 30.0, 20.0 ], "style" : "", "text" : "a)" } } , { "box" : { "id" : "obj-13", "maxclass" : "number", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "bang" ], "parameter_enable" : 0, "patching_rect" : [ 255.0, 135.0, 50.0, 22.0 ], "style" : "" } } , { "box" : { "id" : "obj-14", "maxclass" : "newobj", "numinlets" : 5, "numoutlets" : 4, "outlettype" : [ "int", "", "", "int" ], "patching_rect" : [ 255.0, 90.0, 81.0, 22.0 ], "style" : "", "text" : "counter 2 0 3" } } , { "box" : { "id" : "obj-15", "maxclass" : "number", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "bang" ], "parameter_enable" : 0, "patching_rect" : [ 300.0, 15.0, 50.0, 22.0 ], "style" : "" } } , { "box" : { "id" : "obj-16", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "bang" ], "patching_rect" : [ 255.0, 60.0, 65.0, 22.0 ], "style" : "", "text" : "metro 500" } } , { "box" : { "id" : "obj-17", "maxclass" : "toggle", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "int" ], "parameter_enable" : 0, "patching_rect" : [ 255.0, 15.0, 24.0, 24.0 ], "style" : "" } } , { "box" : { "id" : "obj-8", "maxclass" : "number", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "bang" ], "parameter_enable" : 0, "patching_rect" : [ 135.0, 135.0, 50.0, 22.0 ], "style" : "" } } , { "box" : { "id" : "obj-9", "maxclass" : "newobj", "numinlets" : 5, "numoutlets" : 4, "outlettype" : [ "int", "", "", "int" ], "patching_rect" : [ 135.0, 90.0, 81.0, 22.0 ], "style" : "", "text" : "counter 1 0 3" } } , { "box" : { "id" : "obj-10", "maxclass" : "number", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "bang" ], "parameter_enable" : 0, "patching_rect" : [ 180.0, 15.0, 50.0, 22.0 ], "style" : "" } } , { "box" : { "id" : "obj-11", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "bang" ], "patching_rect" : [ 135.0, 60.0, 65.0, 22.0 ], "style" : "", "text" : "metro 500" } } , { "box" : { "id" : "obj-12", "maxclass" : "toggle", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "int" ], "parameter_enable" : 0, "patching_rect" : [ 135.0, 15.0, 24.0, 24.0 ], "style" : "" } } , { "box" : { "id" : "obj-7", "maxclass" : "number", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "bang" ], "parameter_enable" : 0, "patching_rect" : [ 15.0, 135.0, 50.0, 22.0 ], "style" : "" } } , { "box" : { "id" : "obj-6", "maxclass" : "newobj", "numinlets" : 5, "numoutlets" : 4, "outlettype" : [ "int", "", "", "int" ], "patching_rect" : [ 15.0, 90.0, 71.0, 22.0 ], "style" : "", "text" : "counter 0 3" } } , { "box" : { "id" : "obj-5", "maxclass" : "number", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "bang" ], "parameter_enable" : 0, "patching_rect" : [ 60.0, 15.0, 50.0, 22.0 ], "style" : "" } } , { "box" : { "id" : "obj-4", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "bang" ], "patching_rect" : [ 15.0, 60.0, 65.0, 22.0 ], "style" : "", "text" : "metro 500" } } , { "box" : { "id" : "obj-3", "maxclass" : "toggle", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "int" ], "parameter_enable" : 0, "patching_rect" : [ 15.0, 15.0, 24.0, 24.0 ], "style" : "" } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-11", 1 ], "disabled" : 0, "hidden" : 0, "midpoints" : [ 189.5, 58.0 ], "source" : [ "obj-10", 0 ] } } , { "patchline" : { "destination" : [ "obj-9", 0 ], "disabled" : 0, "hidden" : 0, "source" : [ "obj-11", 0 ] } } , { "patchline" : { "destination" : [ "obj-11", 0 ], "disabled" : 0, "hidden" : 0, "source" : [ "obj-12", 0 ] } } , { "patchline" : { "destination" : [ "obj-13", 0 ], "disabled" : 0, "hidden" : 0, "midpoints" : [ 264.5, 134.0 ], "source" : [ "obj-14", 0 ] } } , { "patchline" : { "destination" : [ "obj-16", 1 ], "disabled" : 0, "hidden" : 0, "midpoints" : [ 309.5, 58.0 ], "source" : [ "obj-15", 0 ] } } , { "patchline" : { "destination" : [ "obj-14", 0 ], "disabled" : 0, "hidden" : 0, "source" : [ "obj-16", 0 ] } } , { "patchline" : { "destination" : [ "obj-16", 0 ], "disabled" : 0, "hidden" : 0, "source" : [ "obj-17", 0 ] } } , { "patchline" : { "destination" : [ "obj-4", 0 ], "disabled" : 0, "hidden" : 0, "source" : [ "obj-3", 0 ] } } , { "patchline" : { "destination" : [ "obj-6", 0 ], "disabled" : 0, "hidden" : 0, "source" : [ "obj-4", 0 ] } } , { "patchline" : { "destination" : [ "obj-4", 1 ], "disabled" : 0, "hidden" : 0, "midpoints" : [ 69.5, 58.0 ], "source" : [ "obj-5", 0 ] } } , { "patchline" : { "destination" : [ "obj-7", 0 ], "disabled" : 0, "hidden" : 0, "midpoints" : [ 24.5, 134.0 ], "source" : [ "obj-6", 0 ] } } , { "patchline" : { "destination" : [ "obj-8", 0 ], "disabled" : 0, "hidden" : 0, "midpoints" : [ 144.5, 134.0 ], "source" : [ "obj-9", 0 ] } } ], "dependency_cache" : [ ], "embedsnapshot" : 0 } } 



順番に芋おみたしょう。 このパッチの䞻なオブゞェクトは次のずおりです。
3぀のクロック[トグル] + [メトロ]ず3぀のカりンタヌ[カりンタヌ]。

[トグル]
スむッチ。 ボタンボタンずスむッチトグルの2぀の操䜜モヌドがありたす。 [toggle]をクリックするず、オブゞェクトはその状態の倀[0、1]を出力に送信したす。 「ボタン」を抌すず、短いナニットが出力に送信されたす。 スむッチは、以前の状態を蚘憶しおいるずいう点で異なりたす。 1回抌すず、出力0で、もう䞀床-1、もう䞀床-0などになりたす。

[メトロ500]
このオブゞェクトは、出力にNミリ秒ごずに匷打メッセヌゞを送信するメトロノヌムです。 この堎合、500ミリ秒ごずにバングが生成されたす。

[逆方向最小倀最倧倀]
入力に到着する各匷打メッセヌゞに1぀の倀を远加するカりンタヌ。 参照方向では、カりンタヌは昇順a、降順b、および埀埩cに分けられたす。

したがっお、オブゞェクトの名前[counter 1 0 3]は、0から3たでの境界を持぀降順のカりンタヌを瀺しおいたす。最倧倀に達するず、カりンタヌがリセットされ、カりントダりンがminから始たりたす。 倀。 オブゞェクトには2぀のむンレットがあり、カりンタヌをリセットできたす。 それらの1぀は即座に倀をリセットし、もう1぀は次のカりントから開始しおリセットしたす。

[番号]
入力した情報を保存できるデヌタ入力オブゞェクト。 敎数にのみ䜿甚され、浮動小数点数にはオブゞェクト[flonum]がありたす。

§4.4。 過剰を取り陀く


プログラム䜜成の重芁なスキルは、䞍必芁な詳现を取り陀く胜力です。 奜奇心reader盛な読者は、䞊蚘のパッチでは3぀のクロックゞェネレヌタヌず3぀のスむッチを䜿甚しおいるこずに気付くでしょうが、それぞれ1぀のコピヌしか䜿甚できたせん。 今埌は、远加する[メトロ]タむプのオブゞェクトが倚くなるほど、プログラムによる他の情報の凊理が遅くなる可胜性がありたす。 良奜なパフォヌマンスのプログラムを取埗するには、初期段階でそれに぀いお考える必芁がありたす。

過剰を取り陀き、プログラムから冗長な蚈算を削陀したす。

3぀のクロックを1぀に眮き換え、カりンタヌの入力をオブゞェクトの出力に接続したす[メトロ500]。 それは良いです。 最初からこれをしなければならなかったず蚀うこずができたすが、実際にはゞェネレヌタブロックず他のオブゞェクトの座暙は非垞に異なる堎合があり、ためらうこずなく別のメトロノヌムを远加したす。 その結果、オブゞェクトの接続が絡み合ったWebに倉わりたすが、これは操䜜が非垞に困難です。 これらの問題に察する適切なアプロヌチにより、目的に応じおグルヌプ化するこずで、モゞュヌル内のオブゞェクトの耇数のカプセル化を回避できたす。 これは、蚘事のサむクルを通じお達成するこずです。

§4.5。 その他のオブゞェクト


[印刷]
䜕らかの理由でコン゜ヌルに情報を衚瀺したい堎合、[print line_name]オブゞェクトがこれに䜿甚されたす。 オブゞェクトの名前[print b]は、入力[print]にメッセヌゞが届くず、コン゜ヌルにフォヌムbtextのメッセヌゞが衚瀺されるこずを瀺しおいたす。

§4.6。 論理挔算子、正芏衚珟


基本操䜜

[+ i / f] -オブゞェクトの入力パラメヌタヌの2぀の倀を加算し、結果をアりトレットに返したす。
泚[+ 1]、[+ 1.06]。 i -int-敎数、f-float-浮動小数点数。

[* i / f] -乗算
[/ i / f] -陀算

[+〜1.] -2぀の信号の远加
[*〜1.] -2぀の信号の乗算

[if condition then 1 else 0] -条件が満たされた堎合、出力に1を送信し、そうでない堎合は0を送信したす。
[if condition then 1 else out2 0] -条件が満たされた堎合、最初の出力に1を送信し、そうでない堎合は2番目の出力に0を送信したす。

[regexp] -正芏衚珟を䜿甚する
[expr $ i1 + $ i2 * $ i3] -モゞュヌルの入力で受け取った倀の間で匏を実行したす。

残りの操䜜はドキュメントに蚘茉されおおり、すべおが埓来のプログラミングに䌌おいたす。

䞊蚘のコヌドを、プロゞェクトのパッチフォルダヌにtobit.maxpatおよびfrombit.maxpatずいう名前の2぀の異なるファむルずしお保存したす。 将来、数倀の゚ンコヌド/デコヌドの実装には、これらのモゞュヌルを䜿甚したす。

§4.7。 論理匏


[vexpr]オブゞェクトを䜿甚しお、さたざたな論理挔算を定矩できたす。

tut_bitlogic.maxpat-この䟋では、マルチビットメッセヌゞのビットごずの論理挔算が考慮されたす。

§5.䟿利なモゞュヌル


ここでは、最も頻繁に䜿甚するモゞュヌルをリストしたす。 私は自分自身をれロから曞いたものもあれば、テクニカルサポヌトフォヌラムで芋぀けたものもありたした。 そこで、ほずんどすべおの問題の解決策を芋぀けるこずができたすが、めったに䜕かを芋぀けられなかったずきは。

[toBit]
このモゞュヌルは、8ビットのビットコヌドで0から255の数倀を倉換したす。

[fromBit]
入力ずしお8ビットのビットコヌドを受け取り、出力で0〜255の数倀を出力したす。

[tut_dynamicInlets N]
䞎えられた数Nの入力ず出力の線成の䟋。

添付ファむル


画像 tut_lesson01.maxpat
画像 tut_bitlogic.maxpat
画像 tut_encapsulation.maxpat
画像 tut_dynamicInlets.maxpat

画像 toBit.maxpat
画像 fromBit.maxpat

画像 䞀床に.zip+ tutorial_all.maxpatディレクトリ

䟿利なリンク


Max MSPに関するhabraの蚘事を確認する

Cycling '74 -メヌカヌのりェブサむト/最倧7ペヌゞ。
Max Objects Databaseは、さたざたなオブゞェクトのリポゞトリです。 車茪が既にあるのに、なぜ再発明するのか。
Cycling '74-プロゞェクト -他の開発者のプロゞェクト。
Cycling '74-フォヌラム -倚くの問題の解決策を芋぀けるこずができるフォヌラムです。正しいこずを尋ねおください。
Pattr.ru-ここでは、Max MSPに圹立぀パンや蚘事を芋぀けるこずができたす。
maxmsp vk-ロシア語を話すナヌザヌのグルヌプ。

次号で


リストは倉曎される堎合がありたす。オプションの䟋


♞
著者ノァレリヌ・ゞムネフ

Source: https://habr.com/ru/post/J253745/


All Articles