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