소리의 크기는 소리가 어디에 위치하는지에 대한 하나의 실마리를 제공하기도 합니다. 우리의 양쪽 귀에서 각각 감지하는 소리크기는 또한 소리의 위치에 대한 실마리를 제공하기도 합니다 (거리와 위치에 대한 또 다른 실마리는 소리가 반사하는 등등의 여러 요소가 있지만 지금은 단순하게 소리 크기만 생각해 보겠습니다.) 소리가 한쪽 스피커에서 나올 때 우리는 그 스피커의 방향에 따라 소리가 전달됨을 알 수 있습니다. 또한 양쪽 스피커에서 균형 있게 소리가 나오는 경우에 우리는 스피커 사이에서 그 방향을 감지하지요. 양쪽 스피커의 균형이 한쪽에서 다른 쪽으로 변할 때에 우리는 다양한 방향으로 소리를 감지할 수 있게 됩니다. 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로 시그널의 숫자값을 보여줍니다.