MIDI range vs. MSP range
MSP의 장점 중 하나는 MIDI 의 DSP가 합쳐질 수 있다는 것 입니다. 즉, MSP에서 소리를 제어하기 위해 더 많은 instrument를 사용할 수 있게 됩니다. 그리고 이 조작 또한 어려운 일이 아닙니다.
주로 사용되는 것이 2가지 형식의 data에 요구되는 문자 범위입니다. MIDI값은 0~127의 정수 범위 이지요. 따라서 MAX에서 대부분 숫자 처리는 정수로 되었지만, MSP에서는 -1.0~1.0의 범위의 소수들과 다양한 범위의 숫자들이 사용됩니다. 이런 상반성은 선형적 mapping에 의해 만족됩니다. 그러나 많은 경우에 비 선형적인 방법이 요구됩니다.
Controlling synthesis parameters with MIDI
여기에서 보여지는 패치에서 우리는 MIDI의 컨트롤러 메시지를 FM synthesis patch 안의 여러 다른 페러메터들을 컨트럴 하기 위하여 사용합니다. 이 synthesis는 MSP에서simpleFM~ 라는 서브패치에 의해서 작동됩니다. (Tutorial 11참고), 그리고 우리는 MIDI controller 1 (the mod wheel)로 amplitude, modulation index, vibrato depth, vibrato rate, 그리고 pitch bend 까지 조정합니다.
만약 우리가 실제 연주되는 악기를 디자인했다면 아마도 각각 분리된 MIDI message로 모든 것을 제어했을 것입니다. 예를 들어—controller 7 은 amplitude를, controller 1 은 vibrato depth를, pitchbend 는 pitch bend를. 그러나 이 패치에서는, 모든 제어를 위해 mod wheel controller 만 사용합니다.. 이 패치가 좋은 synthesizer design의 일례는 아니지만, mod wheel을 사용한 컨트롤에 대해서 잘 알도록 해줍니다. 오른쪽 맨 아래에서 0에서 5까지의 키보드의 숫자가 팝업메뉴인 umenu의 선택에 사용되었습니다..
umenu 는 선택된 번호를 gate로 보내어 하나의 출구를 열어줍니다. 따라서 mod wheel의 controller값을 특정한 장소로 보낼 수 있게 해 줍니다.
우리는 각각 파라매터에 특별한 mapping requirements 들을 볼 것입니다. 그러나 우선 선형 mapping을 다시 보도록 합니다.
Linear mapping
선형 맵핑의 문제점은 xmin(최소값)에서 xmax(최대값)의 범위까지 주어진 값 x가, ymin 에서 ymax까지의 범위에서 대응되는 위치의값 y를 찾는 것인데요. 예를 들어서 3은 0~4의 범위에서 놓여지며 0.45는 0에서 0.6사이에 놓여집니다. 이 문제는 다음 공식에 의해서 해결됩니다.
y = ((x – xmin) * (ymax – ymin) ÷ (xmax – xmin)) + ymin
이 투토리얼에서 우리는 map 이라고 불리는 서브패치를 디자인 했고 이것은 위의 부등식을 풀어줍니다. map 은 x값을 왼쪽 인렛으로 받고 물론 이것은 xmin, xmax, ymin, ymax의 범위라는 전제 아래에서 이루어집니다. 그리고 그 수를 정확한 y값에 보냅니다. 이 부등식은 우리를 0에서 127까지의 범위에서 정확하게 컨트롤하도록 도와줍니다
한번 우리가 map으로 컨트롤 값의 범위를 훑어준 다음 몇 개의 부수적인 mapping이 다양한 신호처리의 목적으로 요구됩니다.
Mapping MIDI to amplitude
우리가 미디의 값을 amplitude로 사용하고자 할 때에 0.5와 0.25의 amplitude간의, 그리고 0.12와 0.6간에 같은 값을 듣게 됩니다. 따라서 선형적인 스케일로 표현되는 소리를 듣기를 원한다면 (미디 값 0~127을 사용하여)십진법의 값을 사용하는 것이 더 좋습니다.
• toggle로 소리를 켜고 숫자 5를 선택하여 amplitude값으로 controller값을 줍니다. 이것은 Preset에 저장된 설정으로 map하기 위한 수를 보냅니다. 여기서는 ymin 은 -80, ymax은 0입니다. mod wheel 은 0 에서 127로 가고 amplitude 는-80 dB 에서 0 dB 까지 갑니다. (full amplitude) dBtoA 라 불리는 서브패치에서 십진법의 값으로 변경됩니다.
• mod wheel 을 이용하여 소리의 amplitude를 변경해봅니다
Mapping MIDI to frequency
동등한 음높이의 공간(균등하게 나누어진 것)을 위하여 frequency 는 2의 제곱 값으로 변화되어야 합니다.must change in equal powers of 2. (Tutorial 17 와 Tutorial 19 참고)
• 숫자 1 (또는 “Octave Pitch Bend”를 umenu에서 선택)을 선택하여 carrier frequency 를 주도록 합니다. mod wheel 을 움직여서 pitch를 한 옥타브 위로 굽도록 하고 다시 원래로 내려봅니다. mod wheel 이 한 옥타브의 pitch bend를 연주하게 하기 위해서 우리는 0에서 1까지의 범위로 map합니다. 이 수는 2의 제곱값으로 사용되며 이는 expr에서 기본음의 제곱 값으로 주도록 함으로 인해서 계산됩니다.
20 = 1, 그리고 21 = 2, control 값은 0~1까지 가고 carrier frequency 는 220~440로 증가하게 됩니다(한 옥타브) 이 frequency 의 증가는 3차 지수함수 곡선으로 표현되며 pitch의 어떤 범위의 선형적인 증가를 들을 수 있게 해 줍니다.
Mapping MIDI to modulation index
MIDI controller를 FM instrument 의 modulation index로 Mapping 하는것은 훨신 더 쉽습니다. controller 값이 map 서브패치에 의해서 전환이 되면 더 이상의 변화는 불필요합니다. mod wheel의 값은 modulation index 0 (no modulation) 에서 24 (extreme modulation)까지 변합니다.
• 숫자4 (또는 “Modulation Index”) 는 controller 값을modulation index에 적용시켜줍니다. mod wheel을 움직여서 음색을 바꾸어줍니다.
Mapping MIDI to vibrato
이 instrument는 소리에 vibrato 를 첨가하기 위해서, sub-audio rate에 carrier frequency를 modulating하여 부수적인 LFP(low-frequency oscillator)로 사용됩니다 vibrato 의 depth를 근음에 위아래 동등하게 움직이게 하기 위해서 pow~를 사용합니다.
power function (mod wheel에 의해 제어되는)은 1에서 까지 변합니다. 그base 가is 1 일때 vibrato는 없으며; 2 일때에 vibrato는 ± octave가 됩니다.
• 2의 숫자를 넣어서 mod wheel을 0이 아닌수로 만들고 그때 3을 넣어 mod wheel이 vibrato의 depth를 변경하도록 합니다. 이 모든 페러메터를 전부 컨트롤하는 것은 다음 챕터에서 더 자세하게 다루어 질것입니다.