Michael Gogins’s Turorial

Hello all

Clicking on the link to mr. Gogins’s tutorial available at this page
(http://www.csounds.com/tutorials) reveals that the file is missing.
Someone may want to fix this for new readers and old readers alike,
that have failed to keep a copy (er… that would be me…).

Regards

Panos Katergiathis

Mixing GEN Routines – GEN18, 31, 32

Mixing GEN Routines GEN18, 31, 32
waverform들을 하나로 묶어주는 GEN18, GEN31, GEN32.

—————————————————————————————–
GEN18

Description
이미 존재하는 waveform들로 합성된 waveform들을 구성한다. 각 waveform은 4개의 p-firlds가 필요하며, 서로 overlap할 수 있다.

Syntax
f # time size 18 fna  ampa  starta  finisha  fna  ampa  starta  finisha …

Initialization
size — table 크기. 2의 제곱+1
fna, fnb, etc.   — 이미 존재하며 다시 테이블에 쓰여질 table 번호
ampa, ampb, etc.   — wavefoms의 강도. 합성 waveform이 나중에 rescale될것이기 때문에 상대적인 강도이다. 음수의 값을 지정해주면 180도로 위상이동한다
starta, startb, etc.   — table안으로 fn을 쓰기 시작할 곳.
finisha, finishb, etc. — table안으로 fn을 쓰기 멈출 곳.

Examples
f 1  0  4096  10  1
f 2  0  1025  18  1  1  0  512  1  1  513  1025
        
;f2 는 2개의 f으로 구성되어있으며 0~512와 513~1025에 쓰여진다.

Deprecated Names
GEN18 은 version 4.18에서는 GEN22이었다.  DirectCsound와 혼동을 피하기 위하여 옮겨졌음.

—————————————————————————————–
GEN31

Description
GEN09와 비슷하지만 이미 존재하는 table에서 정의된 어떤 waveform이든 mixing할 수 있다.

Syntax
f # time size  31  src   pna  stra  phsa   pnb  strb  phsb  …

Performance
src  — source table number
pna, pnb, … — partial number, 반드시 양의 정수여야 함
stra, strb, … — amplitude scale
phsa, phsb, … — 시작하는 위상 값(0~1)
GEN31 은 확장된 가드 포인트를 허용하지 않는다. (예. table size = 2의 제곱 + 1). 이런 테이블들이 입/출력에서 작동된다 하지만, 소스 테이블이 읽혀질 때 가드 포인트는 무시된다. 그리고 출력 테이블이 쓰여질 때(writing) 가드 포인트는 단순히 첫 번째 샘플로부터 복사된다. (table index = 0).
이러한 제한의 원인은 GEN31 이 FFT를 사용하기 때문이다. (FFT는 2의 제곱의 table size를 사용함) GEN32 는 resampling할 때와 위상 이동에서 선형적인 내삽값을 사용한다. 그리고 그것은 어떤 table siz를 사용하는 것이든 상관없게 된다. (그러나 FFT로 계산될 partial들은 GEN 32에서도 반드시 이런 제한이 적용됨을 잊지 말 것!).

—————————————————————————————–
GEN32

Description
GEN31와 비슷하지만 각각 partial에 정의된 소스 ftable을 허용한다. 테이블은 FFT나 선형 내삽값 둘중 하나로 resample될 수 있다.

Syntax
f # time size  32  srca  pna  stra  phsa  srcb  pnb  strb  phsb  …

Performance
srca, srcb   — source table number. 음수의 값은 table을 선형 내삽값을 적용시켜 사용할 수 있게 한다.(임의의 값은 소스 waveform을 이동시키고 FFT을 사용하여 위상이동 된다.);이것은 덜 정확하지만 더 빠르며, 음수의 partial number을 허용한다.
pna, pnb, …   — partial number, 만약 소스 테이블 넘버가 정수라면(FFT사용)양의 정수가 와야한다.
stra, strb, … — amplitude scale
phsa, phsb, … — 시작하는 위상 값(0~1)

Examples
itmp    ftgen 1, 0, 16384, 7, 1, 16384, -1      ; sawtooth
itmp    ftgen 2, 0, 8192, 10, 1                 ; sine
; mix tables
itmp    ftgen 5, 0, 4096, -32, -2, 1.5, 1.0, 0.25, 1, 2, 0.5, 0,        
                                1, 3, -0.25, 0.5
; window
itmp    ftgen 6, 0, 16384, 20, 3, 1
; generate band-limited waveforms
inote   =  0
loop0:
icps    =  440 * exp(log(2) * (inote – 69) / 12)        ; one table for
inumh   =  sr / (2 * icps)                              ; each MIDI note number
ift     =  int(inote + 256.5)
itmp    ftgen ift, 0, 4096, -30, 5, 1, inumh
inote   =  inote + 1
        if (inote < 127.5) igoto loop0         instr 1 kcps    expon 20, p3, 16000
kft     =  int(256.5 + 69 + 12 * log(kcps / 440) / log(2))
kft     =  (kft > 383 ? 383 : kft)

a1      phasor kcps
a1      tableikt a1, kft, 1, 0, 1

        out a1 * 10000

        endin
        instr 2

kcps    expon 20, p3, 16000
kft     =  int(256.5 + 69 + 12 * log(kcps / 440) / log(2))
kft     =  (kft > 383 ? 383 : kft)

kgdur   limit 10 / kcps, 0.1, 1
a1      grain2 kcps, 0.02, kgdur, 30, kft, 6, -0.5

        out a1 * 2000

        endin

———-
score:
———-

t 0 60
i 1 0 10
i 2 12 10
e
        

Random Function GEN Routines – GEN 40, 41, 42

Random Function GEN Routines
GEN40

Description

사용자에 의해 정의되는 분포도(막대그래프)로부터 시작하는 계속적인 랜덤을 만든다.

Syntax
f # time size -40 shapetab

Performance
막대그레프의 모양은 반드시 미리 table에 정의되어야 한다. 실제로 shapetab argument는 그 table 번호가 와야 한다.
막대그래프의 모양은 어떤 GEN에 의해 만들어진 것이든 상관이 없다. GEN이 그 그래프를 읽어들일 때 사용되는 내삽값이 없기 때문에 막대그래프에 있는 table 사이즈가 클수록 더 정확한 값을 얻어내기에 좋다. 이 서브루틴은 주로cuserrnd opcode와 함께 사용된다.

——————————————————————————
GEN41

Description
숫자 쌍의 리스트를 사용하여 분리된 랜덤을 만들어낸다

Syntax
f # time size -41 value1 prob1 value2 prob2 value3 prob3 … valueN probN

Performance
각 쌍의 첫번째 숫자는 어떤 값이 들어오고, 두번째값은 random algorithm 에 의해 선택될 값의 확률이다. 만약 어떤 숫자가 각 쌍의 확률의 값으로 할당된다면, % 값으로 와야한다.
이 서브루틴은 주로 duserrnd 와 urd opcodes 와 함께 사용된다.

——————————————————————————
GEN42

Description
3개 숫자값의 리스트를 사용하여 분리된 랜덤을 만든다.

Syntax
f # time size -42  min1 max1 prob1 min2 max2 prob2 min3 max3 prob3 …  minN maxN probN

Performance
각 그룹의 첫번째 값이 첫번째 범위의 최소값이며
두번째값은 최대값
그리고 세번째값은 random algorithm 에 이해 선택될 값의 범위에 속할 요소들의 확률이다. 만약 숫자가 각 그룹의 확률요소로 할당되면 % 값으로 와야한다. 이 서브루틴은 주로 duserrnd 와 urd opcodes 와 함께 사용된다. 이 옵코드들이 내삽값을 사용하지 않으므로 table size도 크게 설정되는 것이 좋다.