MSP Tut.19 MIDI control: Synthesizer

Tutorial 19 MIDI control: Synthesizer
Implementing standard MIDI messages

이번 챕터에서는 MSP에서 만들어지는 합성악기에서 MIDI control을 이용하는 방법에 대해서 이야기를 할 것입니다. (예: MIDI FM synthesizer 에서 쓰이는 velocity sensitivity, pitch bend,
, 음색을 조절하는 mod wheel control) 단순하게 우리는 FM 사운드 하나와 2-voice polyphony를 사용할 것입니다.
MSP synthesizer에서 MIDI control을 하기 위한 주요 사항은 다음과 같습니다.
• MIDI key number 을 적당한 frequency 값으로 바꾸어주는 것
• MIDI pitch bend 값을 적당한frequency-scaling 요소로 바꾸어 주는 것
• MIDI controller 값을 modulator parameter 값으로 바꾸어 주는 것(예: vibrator rate, vibrato depth, 등.).
그리고 주어진 MSP object가 단지 한번에 하나의 음을 재생하기 때문에 우리는 동시에 MIDI음원을 재생할 수 있는 장치 또한 필요로 할 것입니다.

Polyphony
MSP에서 sound를 만들어내는 object(예: cycle~, phasor~ 또는 groove~ or play~)는 위에서 말했듯이 한번에 하나의 음만 재생합니다. 따라서 더 많은 음원을 재생하기 위해서 더 많은 object가 요구됩니다. 여기 투토리얼 패치에서는 2개의 기본 합성 신호 네트워크(아래 synthFMvoice~)를 똑같이 두 개로 복사하고 MIDI note messages를 하나 또는 다른 것으로 전송할 것입니다. (route)

poly object는 voice number를 각각 들어오는 note message로 할당하며, 만약 한번에 2개의 key가 들어올 경우에 이전에 들어오는 note를 끄는 역할을 합니다. 따라서 다음에 들어오는 음이 연주 될 수 있도록 하는 것입니다. voice number, key number, velocity 는 3개의 list로 pack되며 route는 voice number를 사용하여 key number와 velocity를 “voice”라는 한 synthesizer 또는 또 다른 곳으로 전송합니다. 컴퓨터가 빠르다면 더 많은 voice를 만들 수 있습니다. 컴퓨터의 능력을 측정하려면 SDP status window에서 CPU Utilization를 체크합니다.
There is another way to manage polyphonic voice allocation in MSP에서 또 다른 방법으로는 poly~ object를 사용하여 여러 개의 사운드를 조절할 수 있습니다.

Pitch bend
여기에서 우리는 0에서 127까지의 MIDI pitch bend 값을 사용하여 pitch를 위아래 반음으로 bending할 수 있습니다. 여기에서 요구되는 것은 (carrier)
frequency 를 곱하는 것입니다. ±2반음을 bend하기 위해서는 2-2/12 (약0.891) 에서 22/12 (약 1.1225)를 계산해야 합니다. MIDI pitch bend 는 일정한 mapping 문제를 보여줍니다. 왜냐하면 미디 프로토콜에서 64의 값은 “no bend” 의 뜻으로 사용되었지만 64는 정확하게 0에서 127의 중간은 아닙니다. (63.5가 중간임) 따라서 64 는64의 아래의 값이 됩니다. 따라서 우리는 아래쪽의 bends들(0~63)과 위에 있는 65~127과 조금 차이를 주어야 할 필요가 있게 됩니다. 아래 패치를 참고하세요

아래의 bend값 (0~o 63)은 384로 나눈 값이지만 위쪽은 378로 나누어지는 차이를 보입니다. 이것은 위쪽 밴드가 0에서 63/378까지의 범위를 가지는 지수를 계산하게 됩니다. (=2/12) packline~ 은 frequency 요소가 점진적으로 20ms까지 변하게 해 줍니다. 따라서 순차적으로 분리되는 현상을 만드는 것을 피하게 해 줍니다.

Mod wheel
mod wheel은 여기에서 FM synthesis patch의 modulation index를 변화시키는데 사용됩니다. Mapping은 선형적입니다. 우리는 단순하게 MIDI controller값을 16으로 나누어 0에서 거의 8까지의 범위로 map합니다.

The FM synthesizer
synthFMvoice~ subpatch 의 하나를 더블 클릭하여 Patcher window를 여세요
FM synthesis subpatch 를 위한 기본은 simpleFM~ subpatch 입니다. (tut 11참고) argument에 들어간 것들은 harmonicity ratio를 1로 세팅하고 a harmonic spectrum을 산출합니다. MIDI messages은 이 FM sound에서 frequency 와 modulation index 에 영향을 끼칠 것입니다. 일단 MIDI note and pitch bend information 이 frequency를 결정하는데 쓰이는 방법부터 살펴보도록 하겠습니다.

MIDI-to-frequency conversion
mtof은signal object가 아니지만, MSP에 사용하기에 아주 좋습니다. 이것은MIDI key를 그것과 동등한 frequency 숫자 값으로 바꾸어 줍니다.

이 frequency값은 main patch에서 계산된 bend factor 에 의해 곱해지며, 그 결과는 simpleFM~ subpatch 에서 carrier frequency로 이용됩니다.

Velocity control of amplitude envelope
대부분의 synthesizers에서처럼 MIDI note-on velocity가 이 패치에서 사용되어 amplitude envelope 을 콘트럴 합니다. 이 작업은 다음의 과정을 필요로 합니다.
• note-off velocities 와 note-on velocities 의 분리
• note-on velocities 의 범위를 (1 ~ 127) amplitude값 0 ~ 1로 Mapping (nonlinear mapping 이 주로 제일 좋다)
• note-on velocity를 envelope 의 attack 와 decay 의 비율로 map(이 경우에서만)
첫번째 작업은 select 0 object 와 함께 쉽게 수행됩니다. note-on velocity는 functionobject 가 attack and decay 모양을 보내도록 해줍니다. 그리고 note-off velocity 는 amplitude 를 0으로 돌려보냅니다.

그러나 function 이 작동하기 전에 우리는 note-on velocity 를 사용하여 domain 과 range를 세팅합니다. 이것은 envelope 의 duration 와 amplitude 를 결정합니다. expr 는 앞으로 발생할 envelope의 attack 과 decay 의 시간을 결정합니다. Maximum velocity 인127 은 100ms에서, 60의 velocity 는 496ms이 되는 것입니다. 더 느린 어택은 음표가 더 부드럽게 연주되도록 해 줍니다.(목관, 금관악기처럼) 왼쪽의 expr 은 velocity를 지수함수곡선으로 mapping하여 amplitude를 결정합니다.(아래그림-지수함수곡선)

여기서 우리가 직선 mapping을 사용했다면 127에서 64까지의 MIDI velocities는 약 6 dB amplitude의 범위만 커버하게 될 것입니다. 지수곡선 mapping은 약24 dB까지 증가할 수 있게 해 줍니다. 따라서 위쪽 범위는 amplitude의 변화량이 더 풍부해집니다.

MIDI control of timbre
종종 acoustic 악기소리가 더 크게 소리날때에 더 밝게(더 높은 frequencies에서) 들리는 경우를 발견하게 됩니다. 이것은 소리의 음색과 크기에 note-on velocity 가 영향을 끼친다고 볼수 있습니다. 금관악기음색은 특히amplitude 와 관련하여 아주 많이 변화하게 됩니다.따라서 이 패치에서 우리는 같은 envelope을 사용하여amplitude와 FM instrument 의modulation index 를 제어할 것입니다.그 envelope은 *~ object로 보내져서 적당한 범위로 scale합니다. +~ 8 object은 modulation index 가 0~8까지의 범위(음이 최대 velocity로 연주될 때)의 velocity에 의해 영향을 받게 된다는 것을 보여줍니다. 이전에 보았듯이 main patch에서 modulation wheel 은 modulation index를 더 증가할 수 있게 해줍니다. (modulation index 범위에서 8만큼 더) 이처럼 velocity와 mod wheel position의 조화는 modulation index에 충분히 영향을 미칩니다.

• MIDI keyboard 에서 하나의 멜로디를 연주합니다. 연주할때에 velocity가 amplitude, timbre, attack비율에 미치는 영향을 신경써서 들어봅니다. mod wheel 을 움직여 음색의 밝기를 더해봅니다. 또한 을 이용하여 sustain구간동안에 음색을 변화시켜봅니다. pitch bend wheel을 이용하여 frequency에 영향을 미치는지 확인해 봅니다.

Leave a Comment.

This site uses Akismet to reduce spam. Learn how your comment data is processed.