오래전에 스터디 할때 쓰던것을 발견했네요. 제가 번역한것은 아니고 제가보기엔 번역에 오역이 상당수가 보이긴 합니다만.. 이해하는데 무리는 없을것으로 보입니다.
나중에 검토를 다시한번 할께요. 일단은 참고삼아 보시기를..
—————————————————————————————————-
5. Using Csound’s Macro Language Extensions
Csound의 3.48버전 부터 , 그 시스템은 두 macro장비들에 의해서 강화되어 왔고, 하나는 score언어를 위한것, 하나와 orc.파일을 위한것이다 . 물론 이 두가지는 유사하지만 그 사용은 매우 다르다. macro는 한 줄로 되어있는데 그것은 몇몇 text로 대체되어 주어져 있지만 , 이 단순한 설명으로는 복잡한 마크로들을 어떻게 할 수 있는가에 대해서 어떤 설명을 할 수는 없고, 그것의 힘은 믿을 수 없을 정도이다. 이 마크로들은 스코어와 오케스트라를 더 쉽게 쓰고, 더 개인것인 스타일과 취향에 맞게 사용될 수 있다. 여기에서의 서술에서 나는 Csound에서 어떻게 마크로들을 사용할 수 있는지를 보여주는 많은 예를 줄것이지만, 그것들은 여기에서 주어진것보다 더 많이, 당신이 상상할것과 궁극적으로 당신의 개인적인 세계의 한 장소를 발견할 사용법을 줄것이다.
imple Macros in the Score
스코어에서 마크로들은 스코아가 읽혀지면서 만들어지는 글자그대로의 ‘대체’이다. -스코아가 분류되기 이전에 조차. Csound의 마크로 시스템은 단순한 기호 하나와, 마크로의 존재를 지시하기위한 두개의 특별한 부호의 사용인데, 그것은 #기호와 $기호이다 . 하나의 마크로를 정의하기 위해서 라인이 시작할때 하나의 #기호를 사용한다.
#define NAME #replacement text#
마크로의 NAME은 쓰여진 문자들로부터 만들어진 어떤것을 할 수 있는데 , 그 문자는 더높고 더낮은 경우와 숫자들이지만, 숫자는 그 이름의 첫번째 기호(문자)로서 사용되는것은 아닐 것이다. replacement text는 어떤 기호의 나열이고( 하나의 #를 포함하고있는것이 아닌) 그리고, 한 줄 이상으로 늘릴 수있다. 대체(replacement)를 위해 사용된 그 정확한 텍스트는 두개의 #기호사이에 둘러져있으며, 그리고 그것은, 부가된 기호가 우연히 붙혀진 것이 아니며, 공간들 이상의 완전한 통제가 있다는 것을 확실시 해 준다. 대체되는 것은 정확한 텍스트이며, 완전한 단어의 서술을 취하는것이 아님을 기억하라.
p138
그것이 정의되어진 후에 마크로를 사용하기 위하여 NAME은 반드시 하나의 $기호를 따르고, 마침표에 의해 종결되어져야 한다. 만약 마침표를 빠뜨렸다면, 그다음 문자가 아니거나 숫자가 아닌것이 그 name을 종결시킨다. 그러나 이것은 여러가지로 해석될 수 있고 그것의 사용은 희망적이지 못하다. 완전한 $NAME의 나열은 그 정의(#define)로부터 대체된 텍스트(replacement text)에 의대 대체된다. 물론 대체된 택스트는 또한 마크로의 호출을 포함시킬 수 있고, 그것은 그들이 시간의 확장에 의해 정의되어진 만큼이다.
만약 어떤 마크로가 더이상 필요하지 않다면 다음을 포함하여 제거시킬 수 있다.
#undef NAME
이것의 한 단순한 예는 note-event가 한 set의 p-field를 가질때 인데, 그 p-field는 전체 또는, 거의 발생하는것들이 반복되는 것이다. 우리는 한 마크로를 정의할 수 있는데 이set의 값이 1.01, 1.99, 138이며 figure5.1에서 보여지는 것이다. 이것은 figure 5.2에서 보여지는 스코아 에서의 분류된것들 보다 먼저 전개 될 것 이다. 이것은 typing을 저장 할 수 있고, 바꾸는것이 더 쉬워지는데, 예를 들면 하나의 파라메터를 바꾸기 위해서 한가지 일만 필요로 한다. 만약 2 set의 p-field가 있다면 하나는 두번째 마크로를 가질 수 있고, 정의 할 수있는 마크로의 수적 범위는 없다. (바꾸기 위해서 하나의 일만 하면 된다는 그런 뜻같네요..)
p139
또 다른 마크로에서의 단순한 사용은 관계를 기억하는것을 돕기 위한것인데, 전통적인 노트명과 figure 5.4에서처럼 마크로 set가 정의된 cpspch옵코드와의 결합된 십진법 표시와의 관계이다.
분명 이 마크로 장치의 사용은 Csound score를 읽고 쓰는데 더 쉽게 해줄 것이지만, 주의할 것은 글자그대로의 마크로들이 때때로 이상한 것을 할 수 있는 것과 같은 것이 요구된다 는 것이다. 그것이 어떤 의미를 주는지 알아채지 못할것이고, 그런 공간들에서 중요한것은 왜 #기호에 의해 둘러 쌓여 있는 대체 텍스트를 가졌는가 이다. 주의를 기울여 사용하고, 단순하게 마크로들은 강력한 개념이지만 그것들은 오용 되어질 수 있다.
Macros with arguments
마크로들은 또한 파라메터와 함께 정의 되어질 수 있다. 이것은 또한 더욱 복잡한 상황에 쓰여 진다. 그리고 그것은 작은 차이를 가진 나열들의 많은 반복이 있는 상황이다. arguments를 가진 한 마크로를 정의하기 위한 신탁스는 다음과 같다.
#define NAME(A#B#C) #replacement text#
replacement text안에서의 arguments들은 $A의 형태로 대체될 수 있다. 실제로 그 실행은 단순한 마크로처럼 arguments로 정의된다. 그것은 아마 몇몇 argument인것인데, 현재 5개 까지이며, 그것들의 명칭은 아마도 마크로들의 이름을 포함한것과 같이 정확한 문자의 선택으로 이루어 질 수 있다.
p140
사용에 있어서, argument에는 하나의 마크로가 있고, 다른 마크로들과 같은 법칙들을 가지는 것이다. 마크로를 포함한 스코어와 figure5.6에서 보여지는 argument는 figure 5.7에서 보여 지는 notelist를 확대한다. 이 단순한 마크로처럼, 이 마크로들은 다음을 포함하여 undefined될 수 있다.
#undef NAME
이것은 한 메크로가 분명하지 않을 때(undefined) argument가 필요로 하지 않는 것이다
마크로의 또 다른 사용은, 많은 instrument를 포함한 복잡한 스코아를 읽을 때 이다. 그것은 때때로 다양한 instrument의 숫자들을 옮기는 것을 잊기가 매우 쉽기 때문이다. 한가지 예로, instrument의 수에 이름을 부여하기 위해서 마크로를 사용할 수 있다. figure 5.8에서 보듯이.
Multiple file Score and Repeats
때때로 스코아를 하나의 파일 이상에서 쓰는것은 편리하다. 이 사용은 #include장치에 의해 지원된다. 그리고 그것은 마크로 시스템의 부분이다. 하나의 라인은 다음의 text를 포함하고 있다.
#include “filename”
그 텍스트는 쌍 따옴표로 되어있으며 스코아에 삽입된 파일에 이름으로부터 그 텍스트의 결과를 얻는다.(쌍 따옴표 안에 들어갈 텍스트는 스코아에 삽입되어있는 파일에 이름에서 유도된다.)그리고 입력이 끝났을 때 이전입력으로 되돌리기 위함이다.(?)
현재 파일과 마크로는 20개 까지의 범위만큼 포함 될 수있는 있다.
#include의 사용을 제안한 것은, 마크로의 한 set가 작곡가의 스타일의 한 부분으로서 정의될 것이기 때문이다. 그리고, 반복된 섹션들을 제공하기 위해서 #include를 사용할 것이다.(-다른 파일의 스코아에서 빌려다 쓰는 경우에 관한 설명)
Repeated Sections
원래 Csound 의 섹션들을 반복하기 위한 방법은 스코어 파일의 text를 copy와 paste하는 것이었다. 앞서 보았던 것처럼 새로운 방법은 #include장치를 사용하는 것이다. 세 번째 방안은 버전 3.48의 score language에 도입된 새로운 r지시를 사용하는 것이다.
r4 NN
위의 지시는 섹션의 반복을 시작한다. 그리고 다음의 s, r, e의 지시가 나올때 까지 계속된다. 섹션은 위의 예에서는 4번 반복되는데, 그 섹션은 “copy와 paste”보다 더 융통성 있게 될 것이고, NN마크로는 섹션에 첫 번째의 반복은 1의 값을 주고, 두 번째는 2, 세 번째는 3, 네 번째는 4로 주어져야 한다. 이것은 p-field의 파라메터를 바꾸기 위해서 사용될 수 있거나, 또는 아주 무시된다. 그러나 마크로의 이름은 사용할 수 없더라고 주어져야 한다.(그것은 마크로의 확장과 함께 상호작용의 심각한 문제의 원인으로 기록될 것이고, 섹션들은 같은 파일 안에서 시작하고 끝나야 하고, 마크로 안에서가 아니어야 한다.)
Evalution of Expressions
Csound의 이른 버전에서 스코아에 존재하는 숫자들을 주어진 것으로 사용되었는데, 이것은 싫은 제한이 될 수 있다. 이것은 몇 단순한 계산 결과가 score의 구조를 더 쉽게 만들 수 있는 경우이다. 이것이 요구하는 것은 마크로가 있을 때 증가한다. CD-ROM이 담고 있는 것에서 중요한 generation 기술들이 서술되어지고, 정말로 복잡한 핸들링을 위해 이것은 가장 근접해있다.
p142
그러나 여기 몇 더 단순한 경우를 위해서, []괄호 안의 계산식의 신탁스가 스코아 language에 도입되었다. 4개의 연산기호 +,-,*,/로부터 성립된 연산식이 허용되었고, ()의 그룹도 함께 허가되었다. 그 연산 식은 숫자를 포함 할 수 있고 물론 마크로를 포함하는데, 마크로는 값들이 수적이거나, 계산식들의 배열인 것들이다. 모든 계산은 floatong-point number로 되어있다.(unary minos는 아직 지원되지 않음을 명시하라)
신탁스 사용의 한 예로서, 3번 반복되지만 노트의 length에 차이를 가진 짧은 섹션을 보자. 섹션의 3개의 복사본들 처럼 $CNT는 1, 2, 3 의 다른 값들로 set되었고 figure 5.11에서 보여진 nolist를 확장시킨다. 섹션에서 섹션까지의 변화는 미묘한 차이를 가지고 반복되었다. 비록 그것이 amplitude나 speed에서 작은 변화의 도입일지라도.
또 한 가지는, 기술되고 있는 pitch의 대안을 제공하기 위한 마크로들 과의 결합에서 evaluation mechanism을 사용할 수있다. 만약 $C, $CSharp등의 마크로를 대신하고, 우리가 더 빨리 도입 시킬 수 있다면, 우리는 pitch class를 위한 마크로의 한 set와 octave를 위한 다른 것을 사용할 수 있고, figure 5.12에서 볼 수 있든 definition내부의 +의 사용과 같은 시스템을 가질 수 있다. figure 5.13에서 그와 같은 스코아를 보여준다. 물론 당신은 더 근접하고 가능한 더 읽기 쉬운 사용들을 생각해 낼 수 있을 것이다.
p143
score의 재사용 부분을 위한 #include와 반복된 섹션의 사용을 위한 또 다른 대안으로는 marking과 지명된 section들의 삽입에 의해 제공되어진다.
m Name
이 mark는 하나의 섹션의 시작에 있을 필요는 없으나 보통 그렇게 된다. Csound는 이 소스의 position과 file을 기억할 것이며 그때 주어진 이름과 함께 그것을 결합시키고, 그것은 나중에 n statement에서 사용되어 진다. 내부적 원인들에 대해서 이 statement는 단지 하나의 파일에 사용될 수 있고 마크로 확장의 부분으로서는 아니다.
n statement의 언급은 스코아를 포함 할 것 인데, 스코아는 이름에 의해 옮겨졌던 location 이전에 지적(mark)되었던 것에서부터 섹션의 끝까지 이다. 이 두 statement의 사용에서 요구되어 지는 것은 절(verse)과 chorus 구조 이거나 단순한 rondo이다. 첫 번째 chorus의 시작은 m statement로 명기된다. 그때 연이은 chorus는 n statement를 사용 할 수 있다. 이 사용은 figure 5.14에서 보여 지는 단순한 score에 설명되었다. 물론 이만큼 단순한 한 chorus에 대해서, 한 마크로는 더 단순하게 사용될 수 있으나, 오랫동안 고리나 나선으로 반복되어지는 동안 이것은 당신의 ‘지름길 레파토리’에 쓸모 있는 첨가로 입증 될 것이다.
Modifying Time
basic Csound score language 는 t”time-warping” statement와 함께 지나는 시간의 비율이 변화하는 편이함을 가지고 있었다. 그러나 때때로 이것은 정말 원하는 것을 위해선 충분하지 않았다. 거기엔 두개의 “local” score statement가 있는데 그것은 스코아의 체계화 하는 요소를 사용할 수 있다. 시간이 count됨으로부터 기본적으로 변하는 것과, 스코아의 일부에 통과하는 시간에 비율이 변화하는 것이 그것이다. 그 스코어 statement는 b, v이다.
b statement는 내부의 base-clock을 set하며, 모든 수반된 note-on sets는 더해진 새로운 base-time을 갖는다. 그 결과는 문자 그대로이고, 한 섹션의 끝이나 다음 b지시가 올 때까지 계속된다.
이 command의 전형적인 사용은 당신이 프래이즈나 테마를 가질 때 사용되는데, 그것은 당신이 모른 사운드를 중지하기 위해 기다림 없이 반복하기 원하는 것들이다. 한 섹션 마지막처럼 당신은 base-time을 reset하고, 현재의 event list를 반복시켜야 한다. 어쩌면 #include를 포함해서라도.
앞선 예로부터 instr511과 512을 사용하는 것에서, 한 가지는 b statement를 사용 할 수 있는데, 그것은 동기의 두 카피들과 엄격 캐논 형식을 겹치게 하기 위해서 이다. 이것의 정확한 반복은 시작하는 시간의 차이를 연속적으로 이동시킬 수 있는데, 그것은 시간이 명쾌하게 언급되어진 각각의 event를 변경하기 위해서 가져지는 것에 의해서 라기 보다는 오히려 base time을 바꾸는 것에 의해서이다.
만약 모티브가 길고 복잡하다면, 이것(위의 방법)은 스코어에서 편집 되고 있는 시간에 있어서 커다란 절약이 된다. #inclide와 함께 사용된 것은 겹쳐지는 반복을 가진 스코어의 재미있는 사용을 위해 만들어 질 수 있다.
p 146
그러나 확장은 스코아의 분류 이전에 발생하기 때문에, score.srt파일은 이 연산의 지시를 받지 못할 것이다.
그것은, 스코아에 연관되어 더 높은 레벨의 구조에서 구성 될 수 있는 소리들의 또 다른 방법이다. 당신이 알다 시피 p3 field는 어떤 “note”의 시작 시간을 주는데 사용된다. 그것을 +statement를 사용하는 것이 가능하며, 그것은 현재 노트의 시작시간이 이전의 사건 끝에 즉시 따라 붙을 수 있게 하기 위한 ‘속기’의 방법으로서 쓰인다.
-반복에 따른 노트들
-위의 따른 것들의 번역
당신이 볼 수 있는 것처럼 +statement가 p2에 사용될 때, 명기된 event의 시작 시간은 이전의 노트의 p2+p3(start+duration)의 합과 같다. 이 놀라운 “속기”는 심각한 제한을 가지는데, 그것이 단지 같은 instrument에서 실행되는 노트의 리스트에서만 적용된다는 것이다. 이 제한을 처리하기 위해서 새로운 버전에서 + statement는 ^+가 첨가되었다. 이 단순한 형태에서 ^+지시는 현재의 note-event의 시작시간이 이전에 note-event에서의 p2+p3의 합과 같게 될 것이다.
^+1은 이전의 note-event의 시작 후에 한번 지시되고 이것은 (+지시와 함께) 작은 event들과 함께 그룹핑 하는 방법으로 쓰여 진다. 덧붙여 말하면 하나의 ^가 붙는 숫자는 음수가 될 수 있고, 모티브 뒤로 쓰기 위해 조정될 수 있다. 주어진 시간은 음수에선 가지 않는다.
또 다른 local-textual opration은 모든 시간을 다른 비율에서 경과하는 것처럼 취급하는 것인데, 독립적인 동시 발생하는 탬포 control을 허용하기 위함이다. v지시를 사용하는 것은 전체시간을 왜곡시키는 것이 t지시에 의해 계산되기 전, 라인의 수에 의한 속도를 변경하기 위해서 사용된다. 이것의 단순한 사용은 테마의 몇 phase-shifting을 generate하기 위하여 사용될 것이다.
제안하는 또 다른 사용은, 두 melodic idea를 위한 독립적인 시간 scale(장치라는 뜻도 있음)를 가지는 것이다. 그러나 동시에 실행되어지고, Charles Ives의 작업에서 많이 보여 졌던 것과 같다. 이 모든 스코아의 operation들처럼, 진정한 사용법은 당신과, 작곡과를 위한 것이며, 결정하게 하기 위한 것이다. 이 operations는 모른 가능한 쉬운 것을 제공하기 위하여 지원된 것은 아니다. 그것은 score generation languages의 전문화한 것 중 하나가 더 잘 접근된 것이며, 단지 잠재적으로 쉬운 시간저장의 또 다른 작은 collection을 제공할 뿐이다.
p148
Simple Macros in the Orchestra
쉬운 마크로와 같은 스타일은 오케스트라 리딩의 부분으로서 이용할 수 있다. 이 마크로들 또한 textual(글자 그대로)하며 score의 마크로들과는 관계가 없다. 이 단순한 마크로들을 위한 신탁스는 다음과 같다.
#define name #replacement text#
#undef NAME
예를 들어서 이것은 figure 5.18에서 보여진 것처럼 기준의 reverberation(반향) 계획을 제공하기 위하여 사용되어 질 수 있다. 이것은 figure 5.19에서 보여진 오케스트라의 편집 이전에 전개되었던 것을 보여준다.
그러나 스코아와는 달리, 스코아의 옮겨진(고쳐진) score.srt파일과 함께, 오케스트라의 경우에서는 한 파일안의 확장의 택스트는 볼 수가 없다는 것이다. 여전히 오케스트라 마크로들의 typing은 저장될 수 있고, global instrument의 일반적인 fx-processing sequence의 예의 경우에서 그것은 밀착하고 모순 없는 사용을 위하여 이끌어 질 수 있다.
스코아에서 처럼 오케스트라의 마크로도 argument를 가진다.
#define NAME(A#B#C) #replacement text#
예를들어 우리는 이 형식을 사용할 수 있는데 잔향시스템을 확장시키기 위해서, 그리고 figure 5.20에서 보여지는 것처럼 잔향 instrument를 보내기 위한다른 audio-rate variables를 허용하기 위해서이다.
p150
그러나 실제의 오케스트라의 마크로들의 사용에서 오히려 극심한 것은, 파라메터같은 instrument의 숫자와 함께, 마크로 처럼 각각 정의된 instrument를 가기 위한 것일 수 있다. Figure 5.22에서는 clarinet파일의 쓰여질 것을 보여준다. 지금 우리는 숫자가 마크로 argument인 clarinet instrument를 가지고 있다. 만약 우리다 다른 악기를 위한 이와 유사한 파일을 가지고 있다면 전체의 오케스트라는 마크로에서 선언된 것에 따르는 많은 #include statement로 구성되어 질 수 있다. (figure 5.23처럼). 그 일부의 명확한 instrument숫자들을 그것들에게 주고 있다. -당신 자신의 Csound 사서 프로그램을 가지고 있는 것처럼. 그러나 기록되어질 것은, 같은 범위가 요구되지 않는 것처럼 오케스트라 내에서의 evaluation system이 아니라는 것이다.
Conclusion
Csound score language는 본래 단지 event들의 list이다. 이 시스템은 다른 명령에서 event들을 쓰기위해, 그리고 템포를 위한 time-warping control을 위해, 그리고 질서 있는 섹션을 위한 사용을 허용한다. 이 챕터에서 우리는 어떤 개인적 패션에서 마크로가 간단함을 확장시킬 수 있는 유용한 방법을 가진다는 것을 보았다. 분명히 마크로와 스코아에 첨가된 지름길들이 CD-ROM에 기술된 더 일반적인 score-writing를 대신 하지는 않는다. 그러나 스코아의 조금 더 쉬운 처리를 만들어 낸다. 게다가, 반복되는 확장들과 표시된 섹션들은 base-time 셋팅과 시간의 local variation과 함께 전통적 기재 사항과 일반적인 습관적인 구조를 쉽게 하는 것을 목적으로 한다. 이 같은 것들은 스코어를 타이핑하는 지겨움에 대한 불평을 하는 자들에게 또 다른 단순한 툴을 제공한다.
이것은 또한 마크로가 오케스트라에 사용될 수 있다는 것을 보여주었는데, 주로 약산의 오케스트라 language를 만들고 개인화하기 위한 것이다. 또한 많은 강력함과 직관적인 그래픽 툴이 Csound instrument를 디자인하기 위해 존재한다. 그러나 많은 경우에 약간의 마크로들이 간단하게 할 수 있는 것은 가장 똑바르고 직접적인 일하는 방법과 더 읽기 쉬운 코드를 만드는 것이다. 마지막으로 instrument파일을 포함한 사용은 단지 또 다른 접근인데 그것은 당신의 instrument collection을 조직하기 위해 당신을 도울 수 있을 것이다. 당신을 당신 자신의 마크로들의 library를 세우는 것과 당신의 스코아와 오케스트라들에 그것들을 포함하는데 있어서 의혹을 가지지 않을 것이다. #include장치와 함께 당연한 일로서 말이다.