MSP Tut.23 Analysis: Viewing signal data

Tutorial 23 : Analysis: Viewing signal data

Display the value of a signal: number~
이번 챕터에서는 신호의 숫자 값을 볼 수 있는 MSP objects와 그것을 Max massage로 바꾸어 주는 기능들에 대해서 이야기 할 것입니다.
.
• 오디오를 키도 컴퓨터의 input jacks으로 소리를 보내세요.

250 milliseconds 마다 Patcher 의 꼭대기에 있는 number~ objects는 각 채널로 들어오는 신호의 현재 값을 보여줍니다. 그리고 meter~ objects는 지난 250ms의 최고 amplitude 값을 analog LED display 처럼 그래픽 형태로 보여줍니다


number~ 로 들어오는 신호는 일단 보여진 후에 오른쪽 outlet에 소수값으로 보내집니다. 즉, 그 시그널 값이 sampling하고 그것을 메시지로 다른 Max objects로 보낼 수 있다는 것을 의미합니다.

number~ object는 사실 하나안에 두개의 bjects와 같은 것인데요, 들어오는 신호와 그것을 소수값으로 오른쪽 outlet에 보내는거 이외에, number~ 는 또한 왼쪽 outlet으로 신호를 보내는 숫자박스의 역할을 하기도 합니다.

• MIDI keyboard의 Mod wheel을 움직이거나 “Amplitude”라고 표시된 number~ 의 오른쪽을 drag해 봅니다.
이것은. number~ object의 왼쪽 outlet으로 보내질 신호의 값을 설정합니다. 그 신호는 두개의 *~ object의 오른쪽 inlet과 연결되어서 exdac~으로 보내질 신호의 amplitude을 제어합니다.

number~ object는 동시에 받아들인 신호를 오른쪽 outlet으로 내보낼 소수로 전환합니다. 그리고 받아들인 소수 값은 왼쪽 outlet으로 보낼 신호로 전환시킵니다. 그 두 가지 일은 동시에 이루어 질 수 있지만, 한번에 하나의 값만 보여줄 수 있습니다. number~에 의해 보여지는 값은 그것이 어떤 display mode로 되어있는지에 따라서 다릅니다. number~의 왼쪽 부분에 작은 파형이 나타나면, 그것은 Signal Monitor Mode에 있는 것이며 왼쪽 inlet에서 들어오는 시그널 값을 보여줍니다. number~의 왼쪽 부분에 작은 화살표가 나타나면, 그것은 Signal Output Mode에 있는 것이고, 왼쪽 outlet으로 보낼 신호 값을 보여줍니다.

number~의 display mode를 제한하기 위하여 Pather winder를 unloch시키고 Max메뉴에서 Get Info..를 선택합니다.

최소한 한가지의 display mode는 체크되어있어야 합니다. 임의의 값으로 위의 예처럼 두가지 mode가 선택되어 있습니다. 그런 경우에는 잠겨진 Patcher에서 number~의 왼쪽 옆을 클릭하여 한가지에서 다른 한가지 mode로 전환할 수 있습니다. number~의 출력은 그것이 어떤 mode로 되어있든지 계속 진행됩니다.

투토리얼 패치에서 여러분은 number~의 두 가지 mode를 볼 수 있는데요, Patcher window 위에 있는 number~ objects는 들어오는 신호 값을 보여주기 위해 사용되고 있기 때문에 Signal Output Mode 로 되어있습니다. (새로운 값들은 Signal Output display mode로 되어 있을 때만 tapy또는 마우스 드래드에 의해 입력 될 수 있습니다.)
이 각각의 number~ objects는 오직 하나의 기능을 위해 고안되어 있기 때문에 각각은 Get Info..대화 창에서 한가지 display mode로만 설정되어 있습니다.

Interpolation with number~
number~ object 는 또 다른 유용한 특징들을 보여줍니다. 그것은 line~ object와 매우 유사하게, 경사진 신호를 생성하기 위해 입력 값들 간에 내삽 값을 줄 수 있습니다. 만일 number~가 오른쪽 inlet에서 0이 아닌 숫자를 받으면, 그때마다 그 숫자는 새로운 값을 선형적으로 내삽하기 위한 시간 (ms)의 양으로 사용됩니다. 이는 line~으로 리스트를 보내는 것과 같습니다.

그러나 line~과는 달리 number~는 내삽시간을 한번 이상 받을 필요가 없습니다.; 그 시간을 기억하여 새로운 숫자를 왼쪽 inlet에서 받을 때마다 그 시간을 사용합니다. 이 특징은 출력 신호의 진폭이 불연속적으로 변하는 것을 막기 위하여 “Amplitude” number~ 에 사용되었습니다.

Peak amplitude: meter~
meter~ 는 마지막의 displays이후에 받아들인 peak amplitude를 주기적으로 보여줍니다. 동시에 그것은 또한 peak signal값을 소수의 형태로 자신의 출력으로 내보냅니다. 출력 값은 항상 양수이며 peak값이 음수일때도 그렇습니다.

meter~ 는 신호의peak amplitude를 관찰하는데 유용합니다.  (number~와는 달리 그것은 신호의 순간적인 진폭을 보여주고 내보냅니다.) meter~는 오디오 신호를 위한 것이므로 -`에서1까지의 신호를 받아들입니다. 만일 그 범위를 벗어나면 meter~는 최대값까지 “clipping”된 붉은색의 LED를 보여줍니다.

• 만일 clipping display를 보기 원하면, 출력 신호의 진폭을 1이 넘도록 증가시키고 다시 바람직한 level로 되돌리시오

meter~의 display사이의 시간 간격에 대한 임의의 값은 250ms입니다. 그러나 display간격은 interval message를 가지고 변경 할 수 있습니다. Display interval이 짧을수록 LED display는 더욱 정확한 반면, interval이 길어질수록 여러분은 visual 하고 numeric한 출력을 읽는 데에 시간이 많이 걸립니다.

• Patcher윈도우의 왼쪽 아래에 “Display Interval” 이라고 표시된 number box의 숫자를 드래그함으로써 display interval을 달리하여 실험해 보시오

Use a signal to generate Max messages: snapshot~
snapshot~ object는 number~의 오른쪽 inlet이 그렇듯이 현재의 시그널 값을 내보냅니다. 그러나 snapshot~에 의해서 여서분은 출력을 on/off상태로 만들거나, bang을 보냄으로써 한 개의 값을 갖는 출력을 설정할 수 있습니다. 오른쪽 inlet에서 0이 아닌, 숫자를 받으면 snapshot~은 그 숫자를 time interbal(ms)로 사용하여 주기적으로 신호값을 왼쪽 inlet에서 보여줍니다. Time interbal값으로 0을 받으면 snapshot~은 중지됩니다.

Tutorial 패치의 오른쪽 반은 어떻게 신호 waveform이 MIDI 데이터를 생성하는지에 대한 간단한 예를 보여줍니다. 우리는 MIDI note message를 위한 패치값을 얻기 위하여sub-audio 코사인 곡선을 샘플링 할 것입니다.

• number~ 를 사용하여 출력 amplitude를 0으로 설정하시오. 패치 위에 있는 number box들에서 “Rate” number box 는 0.14로, “Depth” number box 는 0.5로 설정하시오. message box 200 을 클릭하여1/5초마다 신호값을 보고하는 snapshot~을 시작하시오

snapshot~이 1/5초마다 신호값을 보고하기 때문에 cycle~의 주기는 약 7초가 되고, 멜로디는 35개의 음마다 싸인 wave의 한주기를 나타내게 됩니다. Wave의 진폭이 0.5이므로, 멜로디는 36에서 84 (60±24)까지의 범위를 갖게 됩니다.

• cycle~에 대한 “Rate”와 “Depth”값을 달리하여 실험해 보시오. snapshot~ 은 5Hz의 속도(200ms마다 한번)로 샘플링하고 있으며, 그것의 Nyquist rate는 is 2.5 Hz가 되어 cycle~의 효율적인 진동수를 제한합니다. ( 더 큰 진동수는 “folded over”될 것입니다). snapshot~을 중지하려면 0 메시지 박스를 클릭하세요.

Amplitude modulation
• tremolo depth 를 0.5로, tremolo rate는 4로 설정하세요.output amplitude를 듣기 편안한 레벨로 증가시키세요

cycle~ object 는 들어오는 사운드를 4Hz의 tremolo를 가지고 amplitude modulation시킵니다.

• 더 빠른 mpdulation rate를 가지고 실험하면서 amplitude modulation에 의한 음색변화의 효과를 들어보세요. ring modulation을 듣기 위해서는 depth를 1로 하세요. modulation depth를 1로 설정하세요. Modulation effect를 없애려면 depth를 0으로 하세요.

View a signal excerpt: capture~
capture~ object 는 Max object capture에 해당합니다. 그것은 많은 시그널 값들(임의의 값으로서 최근에받은 4096 samples)을 저장하며, 여러분을 시거널의 전체 excerpt(발췌부분)을 텍스트 형태로 볼 수 있다.

• 이 object는 시간에 따라 시그널이 어떻게 변했는지를 정확하게 보기 위해 유용합니다. (4096 samples 은 44.1 kHz의 sampling rate에서는 약 93ms가 걸립니다.) 여러분은 보기 원하는 샘플의 개수를 argument로서 입력할 수 있고, 그렇게하면 capture~ 는 그 샘플들을(Max에 사용 가능한 충분한 RAM공간이 있다는 가정하에)저장할 것입니다. 그러나 capture~텍스트 윈도우에 보여질 수 있는 문자의 개수는 32.000rofh 제한되어 있습니다. Capture~에 의해 저장되는 값을 컨트롤하는데에는 매우 많은 아규먼트와 메시지가 있습니다. 자세한 사항을 알고싶으면 Objects section을 참고하세요.

MSP Tut.22 MIDI control: PanningPanning for localization and distance effects

Tutorial 22 : MIDI control: PanningPanning for localization and distance effects

소리의 크기는 소리가 어디에 위치하는지에 대한 하나의 실마리를 제공하기도 합니다. 우리의 양쪽 귀에서 각각 감지하는 소리크기는 또한 소리의 위치에 대한 실마리를 제공하기도 합니다 (거리와 위치에 대한 또 다른 실마리는 소리가 반사하는 등등의 여러 요소가 있지만 지금은 단순하게 소리 크기만 생각해 보겠습니다.) 소리가 한쪽 스피커에서 나올 때 우리는 그 스피커의 방향에 따라 소리가 전달됨을 알 수 있습니다. 또한 양쪽 스피커에서 균형 있게 소리가 나오는 경우에 우리는 스피커 사이에서 그 방향을 감지하지요. 양쪽 스피커의 균형이 한쪽에서 다른 쪽으로 변할 때에 우리는 다양한 방향으로 소리를 감지할 수 있게 됩니다. panning이라는 것은 2개 이상의 스피커로부터 나오는 하나의 소리의 크기와 방향과 관계를 이야기합니다. analog mixing console에서, 입력 채널에서 출력 두 채널로 가는 panning은 보통 하나의 손잡이(knob)으로 조절됩니다. MIDI에서는 일반적으로 –에서 127까지의 숫자 값으로 조절되지요. 두 경우 전부, 하나의 연속체가 두 스테레오 채널간의 균형을 말해줍니다. 비록 다양한 지점에서 각 채널의 정확한 amplitude를 계산하는 많은 방법이 있겠지만요.  우리가 부드러운 소리는 큰 소리보다 더 거리가 있다고 가정한다면, 합쳐진 채널에서 생기는 전체의 소리크기의 효과는 거리를 측정하는데 중요한 실마리가 될 것입니다.이처럼 panning은 소리 소스의 방향에 따른 적절한 균형이 요구되어질 뿐만 아니라 거리에 따라 나누어진 스피커에 인식되는 소리 크기를 조절해야 하는것입니다.
이 투토리얼에서는 panning을 계산하는 3가지 방법을 논할것입니다. 그리고 그것은 MIDI values 0 ~127로 이루어 질 것입니다.

Patch for testing panning methods
패치에서 우리는 반복되는 “chirp(짹짹 소리)” (3옥타브 이상의 빠르게 아래로 진행하는 글리산도)를 한쪽에서 다른 쪽으로 이동하도록 할 것입니다.

• 소리가 어떻게 만들어지는지 보기 위하셔 p ”sound source” subpatch를 엽니다.

gate~ 와 begin~ 때문에, audio processing 은 1이 gate~를 열기 위해 inlet에 받아질 때까지 서브 패치는 off되어있는 상태입니다.그때 phasor~ 는 2000 ~ 200 에서 초당 2번 진행하는 선형적인 frequency glissando 를 생성합니다.

이 서브패치의 출력은 두 개의 *~ objects로 보내줍니다.—각각 채널의 따로 출력하기 위하여—각 출력의 amplitude는 panning algorithms의 하나가 됩니다. 여러분은 원하는 panning algorithm 을 선택할 수 있습니다. (패치 상단의 umenu 사용) 이것은 두 개의 selector~의 inlet을 열어 control signals 을 panning subpatch로부터 받습니다.
이것은 또한gate의 출력을 열어 컨트롤 값이 요구되는 subpatch로 가도록 해 줍니다. 이 panning 은 10번으로부터 MIDI input에 의해 조절됩니다. 여러분의 MIDI keyboard 가 controller 10 easily을 쉽게 보내지 않는다면, 여러분은 또한 pitch bend wheel을 사용하여 실험할 수 있습니다. 이때는 MIDI가 필요가 없고 “MIDI panning”라고 되어있는number box 을 드래그 하여 사용할 수 있습니다.

Linear crossfade
panning을 재현하는 가장 직접적인 방법은 하나의 채널은 0에서 1로, 또 다른 채널은 1에서 0으로 선형적으로 fade in/out해주는 것입니다. 이것이 panning의 가장 쉬운 타입입니다. 우리는 MIDI값 0~129의 범위를 amplitude 값 0에서 1로 바꾸어 준 다음에 오른쪽 채널의 amplitude로 그 값을 사용합니다. 왼쪽 채널은 언제나 (1-왼쪽채널의 amplitude값)으로 설정합니다. 하나의 문제점은 MIDI pan 값 64 는 채널간의 똑 같은 균형을 이루어야 하지만 정확하게 127의 반은 아니라는 것이지요. (64/127 – 0.5). 따라서 우리는 MIDI values 0 ~ 64 를 65~ 127로 해주어야 합니다.

• “simple linear xfade”를 더블 클릭합니다.

이 방법은 완전히 logical해 보이는데 그 이유는 두 amp의 값의 합이 언제나 1이 되기 때문입니다. 문제는 소리의 강도가 각 스피커로부터 amplitude의 제곱의 합에 비례한다는 것입니다. 즉 2 스피커가 amplitude 0.5를 연주할 때, 한쪽 스피커가 amplitude 1을 재생하는 것처럼 같은 강도를 낼 수는 없습니다. 그 때, 선형적인 crossfade와 함께 소리가 한쪽에서 다른 쪽으로 pan될 때에 소리는 확실히 더 부드럽게 보입니다.

• subpatch window를 닫고 “Simple Linear Crossfade”를 선택합니다.( umenu) 그리고 ezdac~ 으로 오디오를 키고 toggle 을 클릭하여 “chirping” sound를 시작합니다. 그리고 “Amplitude” number box 를 이용하여 listening level를 지정합니다.  pitch bend wheel을 이동하여(MIDI keyboard에서) pan 을 천천히 조정해봅니다. 상황에 따라 이 선형적인 crossfade는 적절하게 사용되지만 우리는 또한 지속적인 강도를 지속할 수 있는 방법을 찾도록 해 봅니다.

Equal distance crossfade
만약 우리가 지속적인 강도를 지속할 수 있다면 이것은 소리가 청자로부터 지속적인 거리를 유지할 수 있는 효과를 줄 것입니다. 이것은 소리가 호(원의)안에서 움직일 때에만 가능한 일입니다. 그리고 청자가 그 원의 중앙에 있어야 하고, 따라서 거리는 청자에게 같은 반지름으로 돌게 되는 것이지요.(즉, 같은 거리)
이것은 우리가 한 채널은 cosine wave의 4분의 1로 매핑할 때, 그리고 또 다른 것은 sinewave로 매핑함으로서 가능해집니다. 따라서 우리는 MIDI범위 0~127을 0에서 0.25(cosine주기의 4분의 1)로 매핑할 것입니다. 그리고 그 결과를 각도로서 이용할 것입니다.

Technical detail: 소리소스가0도에서 90도로 부채꼴을 이루듯, 호를 따라서 이동하는 것처럼(중앙에 청자가 있고, 한번 원을 그린다고 했을 때에 1/4의 값) 그 각도의 cosine은 1에서 0으로 가고 sine은 0에서 1로 갑니다. 모든 지점에서 cosine의 제곱+sine의 제곱은 1입니다. 이 삼각법은 우리가 만들고자 하는것과 유사합니다. (amplitude의 제곱의 합이 같은 강도를 가져야 한다고 위에서 말했었죠) 따라서 이값은 지속적인 거리를 재현하는데 아주 좋은 방법이 되는 것입니다.

• “constant distance xfade” 를 클릭합니다.

또다시 우리는 미디값을 사용해야합니다. 또다시 64의 값을 더 낮게 설정해주어서 완전히 반으로 가릅니다. MIDI값이 한번 0에서 0.25값으로 매핑되면 그 결과는 phase각도로 사용됩니다. (cycle~ objects), 하나는 cosine 그리고 또하나는(부가적인 phase offset 0.75때문에)  sine이 됩니다..

• subpatch window를 닫고 “Equal Distance Crossfade” 를 umenu에서 선택합니다. 패닝되는동안 소리를 듣습니다. 그리고 소리의 거리가 지속되는지를 확인해 봅니다.

Speaker-to-speaker crossfade
스피커가 청자의 앞에 두 개 똑 같은 거리에 놓였다고 치고 청자가 중앙에 있다고 했을 때에, 만약 실제의 소리가 스피커 하나에서 다른 하나로 옮겨 간다고 한다면 그 소리 소스가 청자에게 가까이 갈 때는  양 스피커의 정 중앙에 올 때가 될 것입니다.따라서 이렇게 직선적으로 스피커에서 다른 스피커로 옮기는 것을 재현하기 위해서 우리는 강도가 청자로부터의 거리와 비례하도록 계산해야 할 것입니다.

Technical detail: 만약 우리가 스피커의 각도를 안다면 (x와 -x), 우리는 cosine공식을 사용하여 거리 a와 b를 계산 할 수 있습니다. 유사하게, 우리는 또한 tangent공식을 이용하여 c와 b의 거리 관계도 계산 할 수 있습니다. 두 스피커간의 2c,고 MIDI pan value가 중앙으로부터 변화지점이 되어야 하므로offset (o)이 중앙에서 -c에서 +c로 됩니다. b 와 o를 구하면 우리는Pythagorean theorem를 이용하여 거리 d를 구할수 있습니다. 우리는 arctangent 공식으로 각도 (y)를 구합니다. 이렇게 하여 두 채널의 gain을 계산합니다 a.cos(y±x)/d.

• “Speaker-to-Speaker Crossfade” 를 umenu에서 선택하고 소리를 들어봅니다. 다른speaker각도로 들어보기 위하여 “Speaker Angle” number box의 값을 바꾸어 봅니다.  

• “speaker-to-speaker xfade” 를 선택합니다. 삼각법 계산이 이 패치에 적용되었습니다. 바로 직선지점 (b)가 1로 되어있고 그 거리가 계산됩니다. speaker각도는 한 주기의 일부분으로 전환이 되어 반지름으로 전환됩니다. 실제 gain값이 최종적으로 계산이 될때에 그것은 2/(d+b)로 노멀라이징되어 clipping을 방지합니다. 소리 source가 90도보다 커지면 하나의 speaker의 gain은 0이 됩니다.

• 계산을 더 쉽게 이해하려면 pitch bend wheel을 움직여서 값들의 변화를 관찰해 봅니다.  gain값은 number~ 에 보여집니다. 이것은 MSP로 시그널의 숫자값을 보여줍니다.

MSP Tut.21 MIDI control: Using the poly~ object

Tutorial 21 MIDI control: Using the poly~ object

A different approach to polyphony
지난시간데 어떻게 poly를 시용하여 다성음을 만드는지 보았지요. 이번에는 더 효과적인 방법을 사용하여 같은 것을 해볼것입니다. 그리고 우리가 사용할 오브젝트는 poly~ object.입니다.
이전 챕터에서 보여준 예에서 우리는 subpatch를 여러 번 복사하여 poly object’s voice numbering을 서브패치의 각각 다른 복사본에 전송시켰었지요. 단순하게 어떻게 subpatch를 이용하여 소리를 제작하는지에 대한 쉬운 예가 되었었습니다. 이번 subpatch인 littlesynth~ 를 이용하여 단순한 4개의 다성 synthesizer를 보여줄 것입니다. :

이 패치의 사용에는 2가지 단점이 따릅니다. 첫째로는 너무 많은 ‘복제’가 필요하며, 그것이 littlesynth~ 를 복사한것들과 함께 patch된다는것입니다. 그리고 또 CPU사용에 문제가 생집니다. littlesynth~ 의 4개의 카피가 언제나 작동되고있고, 사운드를 만들어내지 않는 때 조차도 작동하고있지요. MSP 2.0에서는 이 문제를 해결하기 위한 다른 방법을 소개합니다. poly~ object 는 여러분이 같은 MSP subpatch를 하나의 오브젝트 안에서 여러 번 복제하여 사용하는 것을 가능하게 해 줍니다. 여러분은 또한 각각의 subpatch안에서 CPU를 절약해 가면서 signal processing 을 할 수 있습니다.

The poly~ object

poly~ object의 argument에는 만들어질 패치의 이름과 copy들의 수를 적어줍니다. 그 숫자는 다성음을 만들 때 얼마나 많은 copy를 사용할지를 결정해 주겠지요.

poly~ object 를 더블클릭하여 littlebeep~를 봅니다. :

in, out~, thispoly~를 전에 본적이 없다면 남은 패쳐는 아주 간단해집니다. 들어오는 MIDI노트의 수를 받아서 그것을 mtof를 이용하여 frequency 값으로 바꾸어주며, 그 frequency에서 140ms의 duration을 가진, 그리고 line~에서 들어오는 envelope을 가진의 sine wave를 출력해줍니다. 그럼 in and out~ objects는 무엇일까요? Poly~에 사용된 Subpatch들은 inlet과 outlet에 특별한 오브젝트들을 사용합니다. 그것이 in과 out인데, 이것들은 inlet과 outlet을 제어하는데 사용됩니다. 그리고 in~과 out~ objects는 signal inlets 과outlets을 제어하는것이구요. 그 오브젝트에 써주는 숫자로 어떤 오브젝트에 어떤 inlet을 할당할지를 결정합니다. 예를들어 In 1는 가장 왼쪽 inlet의 poly~과 부합합니다.  poly~ object는 계속해서 inlet과 outlet들의 숫자를 감지합니다. 어떤 subpatch를 불러들일지 여러분이 argument를 통해서 결정해 주어야 합니다.
poly~로 보내진 메시지는 note, midinote, target 메시지를 다이나믹하게 사용한 다른 subpatch의 예를 볼수 있습니다. poly~ 에서 하나의 note메시지를 왼쪽 인렛으로 받으면 그것은 메모리에 가진 subpatch의 copy들을 통해서 스캔하고 현재 ‘not busy’인 것을 발견합니다. 그리고 그 메시지를 통과시킵니다. subpatch는 poly~ object에게 thispoly~ 를 사용하여 지금 ‘busy’상태라는 것을 알려줍니다. thispoly~object는 시그널, 숫자 아무거나 받을수 있으며 그것의 ‘busy’상태를 설정합니다. zero signal이나 0의 숫자가 들어오면 poly~에게 그것이 note 또는 midinote message에 사용 가능하다는 것을 알려줍니다. non-zero signal 이나 다른 값이 들어오면 ‘busy’라는 것을 알려주게 되겠지요. 따라서 note 또는 midinote 가 busy상태가 끝나기 이전까지는 오브젝트로 들어가지 못하게 합니다. busy state는 subpatcher에서 play되는 음의 duration에 부합하게 됩니다. 하지만 다른것에 부합될수도 있습니다. 위의 예제에서는 *~의 audio level가 nonzero일 경우에 부합하겠지요. line~의 amplitude envelope 가 0에 다다르면 소리는 멈추게 됩니다. 그리고 thispoly~의 subpatch의 copy 가 poly~ 에게 더 많은 input을 받을 준비가 되었다는 것을 알려줍니다.
thispoly~ 는 또란 각 subpatch의 복제내에서 signal processing 의 실행을 제어할 수 있습니다. mute message 1 이 thispoly~ 고 보내지면, subpatch 내의 모든 signal processing 이 멈춥니다.
stops. mute 0 message 를 받으면 signal processing 은 다시 시작합니다.
우리는 littlebeep~ subpatcher를 다시 써서 signal processing를 끌 때에 이득을 취할 수 있습니다. 하나의 노트가 끝나고 그것을 다시 킬 때, 새로운 이벤트가 받아질때에.

이것이 패치의 function을 바꾸지는 않지만 CPU할당량이 언제나 현재 소리나는 음의 수에 의존되기 때문에 또다른 효과를 보게 됩니다.

poly~를 사용하여 이벤트를 할당하는 또 다른 target message를 사용하는 것입니다. Poly~의 왼쪽 인렛에 정수를 들어오게 하여 모든 수반하는 메시지들을 subpatch로 들어가게 합니다. 그때 poly~와 결합된 poly object 는 (지난챕터에서 본) MIDI synthesizer를 만들어 냅니다.
poly~ subpatch 가 target message와 사용되면 다음과 같이 됩니다.:

이 예제에서, 들어오는 MIDI pitches와 velocities는 sine tone을 synthesize합니다. List가 받아지면 subpatcher 는 bang 을 thispoly~로 보내어 그 patcher를 출력하거나 voice number를 출력하게 합니다. 아래의 예제는 voice number 가 보내지는것입니다. 따라서 여러분이 그것을 parent patch로부터 볼수 있습니다.

parent patch에서 poly object는 voice numbers를 makenote에서 나온 MIDI pitch와velocity pair로 보냅니다. 그 voice number 는 target message 와 함께 poly~로 보내집니다. 그리고 poly~에게 to send 수반하는 data를 poly~의 targetbeep~ subpatcher로 보낼것을 말해줍니다. poly 가 note-offs를 계속 감지하기 때문에 이것은 적절하게 voices 을 재생합니다. poly~ 의 두번째 outlet은 지속하는 voice가 메시지를 받았음을 기록합니다. 이것은 아마poly에서 나오는 voice number와 같아야 합니다. 왜냐하면 우리가 사용하는 poly가 특정 target을 지정해 주기 때문입니다.

thispoly~ object 는 parameters를 특정한 poly~ subpatcher로 할당해주는데 사용됩니다.
loadbang object와 thispoly~가 연결됨으로서 우리는 voice number로 필터의 center frequency를 제어합니다. :

littlefilter~ subpatcher는 여기에서thispoly~에서 받은 voice number를 사용하고, 두번째 inlet에서 받은 base frequency에 의해 곱해집니다. 입력되는 signal은 모든 16개의 patcher들에 의해, 첫번째 inlet에서 들어오는 정수로 제어되는 각 patcher의 출력 amplitude와 함께 동시에 필터됩니다.

littlefilter~를 이용한 예입니다.


metro object는 counter 와 a random로 걸립니다. Counter는 target message의 소스가 되며 poly~ object 로 들어오는 littlefilter~ 의 를 통해 순회합니다.  random number는 amplitude를 제어합니다.
poly~ 의 인렛은 모든 subpatcher의 in~에 대응합니다. 그리고noise~ object는 poly~내에 있는 subpatcher들에 noise를 줍니다. 두번째 inlet은(in2) 필터의 base frequency를 제어합니다. Frequency가 poly~오 보내지기 위하서 target0이 지정됩니다. 여러분은 또한 특정한 poly~ subparch를 open
message를 통해서 열어 볼수 있습니다. Voice number 15가 할당된 subpatch는 다음과 같습니다.


보다시피 base frequency 는1500. Hz이며 이것은 voice number 15와 가장 최근에 두번째 inlet에 들어온 frequency(100)와의 곱으로 이루어집니다.