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로 시그널의 숫자값을 보여줍니다.

Leave a Comment.

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