poly~
オブジェクトについてのまとめなpoly~
オブジェクトの機能について使ったことあるものだけまとめる。
poly~
の機能poly~
Manage polyphony/DSP for patchers
Description
Use the
poly~
to encapsulate a patcher inside an object box, to specify the patcher filename and the number of instances you want to load as arguments to thepoly~
object, and to control object processing and routing in the loaded patcher instances.
poly~
はサブパッチを読み込んで実行できるオブジェクト。
普通のサブパッチと異なるのは、複数の実体を持つことができること。
同じサブパッチを1つのオブジェクトで同時に複数実行することができ、メッセージの送受信先を制御することができる。
poly~ [filename] [inst_number] @parallel [1/0] @threadcount [int] @args [...]
filename
- [patcher-name [symbol]]
- The first argument must specify the name of a patcher to be loaded which already exists and is in the Max search path. A subpatch window is not automatically opened for editing when a patcher argument is supplied for the
poly~
object.
poly~
は必ず外部にサブパッチが必要。呼び出すサブパッチのファイル名。
同じディレクトリか、パスの通っている場所に置いておく必要がある。
inst_number
- number-of-instances [int]
- Optional
The number of patcher instances corresponds to the number of available “voices” This number can be any number between 1 and 1023, and may be dynamically changed by using the voices message.
実体をいくつ生成するか。範囲は\( 1 \to 1023 \)。
@parallel
アトリビュート
- parallel [int]
- When this attribute is set to enable parallel processing, the
poly~
object enables the use of multiple threads to run audio processing for all patcher instances. If disabledpoly~
runs all patcher instances in the audio processing thread. The DSP chain must be restarted whenever the parallel attribute is changed. This attribute is disabled it when Max is hosted by the Live application.- Note
- At this time, you cannot specify a single subpatcher on a different core. When enabled, this attribute splits up the number of voices between the number of processors available. It is primarily intended for patches that use a significant amount of CPU within multiple voices of the same
poly~
object, and the multithreading overhead is primarily useful for larger signal vector sizes (at least 32 or greater). Other situations will not benefit. Using the default threadcount (which is equal to the number of physical cores) is best.
マルチスレッディング有効化。
\[ 0 \to 無効 \\\ 1 \to 有効 \]
切り替えた際はMSPを再起動させる必要あり。 有効の場合、各実体毎に指定されたスレッド数で割り振る。実体が1つの場合シングルスレッドになる。 シグナルベクターサイズが大きい方が優位性が上がる。
ただし、Max for Liveでは有無を言わさずマルチスレッディングが無効になる。
@threadcount
メッセージ
- threadcount
- Arguments
number of threads [int]
The word threadcount, followed by a number, sets the number of threads used to divide
poly~
instances’ audio processing. The default is the number of processor cores available in your computer. Typically, the number of threads should be set to the number of processor cores in your computer for best performance. This can also be accomplished by sending the message threadcount 0. If apoly~
object has sixteen instances and the threadcount is 4, four of thepoly~
instances will process audio in each of four threads.
マルチスレッディング時のスレッド数を指定する。
実体数16、スレッド数4とした場合、1スレッドで4つの実体を処理する。
最適なスレッド数はコンピュータのコア数と等しい。
threadcount 0
がデフォルト値。コア数と等しくなる。
と書いてあるが、コア数の倍ぐらいを指定したほうがパフォーマンス上がることがある。
@args
アトリビュートargs [10 atoms] When using messages to specifie arguments for a
poly~
object’s loaded patch, the patch must be reloaded by setting the patchername attribute for new arguments to take effect after initial load.
サブパッチに渡す引数を指定する。スペース区切りで最大10コまで。
指定した引数はサブパッチ内の#1
、#2
、#3
…が置き換わる。
変更したら再読み込み必須。
Output
- message
- Each in object in a patcher loaded by the
poly~
orpfft~
objects appears as an inlet at the top of the object. Messages received at the first message inlet of thepoly~
orpfft~
object are sent to the first in object (i.e., the in 1 object) in the loaded patcher, and so on. The number of total inlets in apoly~
orpfft~
object is determined by whether there are a greater number ofin~
orin
objects in the loaded patch (e.g., if your loadedpoly~
patcher has threein~
objects and only twoin
objects, thepoly~
object will have three inlets, two of which will accept both signals and anything else, and a third inlet which only takes signal input).
Output
- (patcher)
- Any messages received by an
out
object in a loaded patcher appear at the signal outlet of thepoly~
orpfft~
object which corresponds to the number argument of theout
object. The signal outputs in apoly~
orpfft~
object are a mix of the outputs of all instances of the patcher’s outputs which correspond to that number.
poly~
オブジェクトのメッセージデータの入出力にはin
、out
オブジェクトを用いる。
シグナルデータの入出力にはin~
、out~
を用いる。
それぞれ引数が必須で、左からいくつめのinlet/outletかを指定する。
同じoutletからシグナルとメッセージを混在させて出力する訳にはいかないので、
outletの数はout
とout~
の最大値を合算したものになる。
inletの場合は混在できるので、in
/in~
の最大値がinletの個数となる。
- target [int]
- The
poly~
instance that will receive subsequent messages (other than messages specifically used by thepoly~
object itself) arriving at thepoly~
object’s inlets - for example, The messagetarget 2
routes messages to the second instance. If the target message specifies a value greater than the current number of instances (copies) of the loaded patcher, the message will be sent to the highest numbered instance (e.g., sending the messagetarget 2
to apoly~
object containing only a single instance will send subsequent messages to the first instance). The messagetarget 0
sends input to all instances, and using any negative number value with the target message will disable input to all instances.
どの実体にメッセージを送るのかをtarget [int]
メッセージで制御する。
target 0
の場合、全ての実体にメッセージを送信する。
実体の総数より大きなターゲットを指定した場合、一番最後の実体にメッセージが送られる。 負数を指定した場合、どこにもメッセージは送られない。
メッセージは送信先を指定することができるが、シグナルは送信先を指定することができない。 出力も全ての実体の出力が同じアウトレットから出力されることになる。
thispoly~
オブジェクト
- bang
- Reports the instance number of the patch. The first instance is reported as 1 .
- mute
- Arguments
mute-flag [int]
Disables DSP processing for the loaded instance of the patcher when the message
mute 1
is received. This message can be combined with an int message which toggles the “busy” state of the patcher to create voices in a patcher which are only on while they play a “note”.
Output
- Out left outlet
- The instance number, starting at 1, reported when
thispoly~
receives the bang message. If the patcher containingthispoly~
was not loaded within apoly~
object, 0 is output.- Out right outlet
- If the loaded instance of the patcher is muted, a 1 is output. If the instance is not muted, a 0 is output.
bang を与えると左のアウトレットから実体の番号を出力してくれる。
mute に続き1/0を与えることでその実体でのシグナル処理の無効/有効を切り替えることができる。
シグナル処理が無効の場合、右アウトレットから1
が出力される。
poly~
にメッセージを与えることでもシグナル処理の有効/無効の切り替えは可能。mute 3 1
で3番目の実体でのシグナル処理が停止する。
#0
トリックpoly~
パッチ内の#0
には実体毎に固有のIDが振られる。
poly~
パッチ内でsend
/receive
を通常と同じように利用すると全ての実体にメッセージ/シグナルが送受信されてしまうが、
#0
を利用することで、実体毎に異なるメッセージ/シグナルを送受信することができる。
名前の先頭に#0
ある場合のみ、個別のIDが振られる。name_#0
など、名前の途中に存在する場合はIDが割り当てられない。
#0
の応用。引数でpoly~
固有の名前を与え、それをsend
/receive
の一部に利用することで
他のパッチのsend
/receive
と名前が被ってしまわないようにする。