fof

fof
fof — Produces sinusoid bursts useful for formant and granular synthesis.

Description
오디오 출력은 사인곡선 파열의 연속으로서 xform에서 스펙트럼의 peak와 함께 xfund frequency에서 초기화된다. 25 Hz 이상의xfund에서 이런 파열들은 k-input 파라메터에 의해 결정되는 스펙트럼의 특성과 함께 말하는 것과 같은 formant를 생성한다.  더 낮은 기본음에서 이generator는 granular synthesis 의 특별한 형태를 보여준다.

Syntax
ares fof xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, ifna, ifnb, itotdur [, iphs] [, ifmode] [, iskip]

Initialization
iolaps — 파열 overlap되는 data를 가지고 있을, 미리 할당된 공간의 수. Overlaps 는 frequency에 따라 결정되며, 그 공간은 xfund * kdur의 최대값에 달려있다. 계산값이 주어지지 않으면 과대평가 될수 있다. iolaps — 당 메모리의 50 bytes 이하로 설정해야한다.

ifna, ifnb — 2개 저장 f-table 번호. 첫번째는 sine table-sineburst synthesis(최소 4096이 좋음). 두번째 값은 Sineburst 앞, 뒤의 rise, decay 의 모양에 사용될 곡선; 주로 선형에는 (GEN07)이, s자 모양은(GEN19).

itotdur — fof에 할당될 전체시간. 주로 p3로 설정. itotdur 남아있는 totdur 이내에서 kdur가 끝나지 않는다면, 새로운sineburst는 생성되지 않는다.

iphs (optional, default=0) – 기본배음fundamental의 초기 phase, 한 주기(0~1)의 부분

ifmode (optional, default=0) — formant frequency mode. 0이면 각각의 sineburst 는 계속 처음에 xform 값이 지속. 0이 아니면 각각은 계속해서xform 에 영향을 받음.

iskip (optional, default=0) – 0이 아니면 초기화를 skip (legato사용을 허용).

Performance
xamp — 각각 싸인 파열의peak amplitude, envelope의rise 패턴에서 가장 끝부분에 있을 꼭대기 값. 이 rise는 큰 bandwidth에 주어진 값을 초과하게 될 수 있다. (파열들이 overlapping될 때에도)(역주-그림을 그려 표현하면 좋은데, amp값이 bandwidth에 따라서 겹쳐지는 부분이 생기게 되면 peak을 넘어가는 일이 생길 수 있습니다. 파열들이 서로 겹쳐지기 때문이에요. 따라서 overlapping의 양과 bandwidth의 값을 적절하게 주어야 합니다. 아니면 밀도가 지나치게 높아져서 소리가 찢어지게 되지요.)

xfund — 새로운 싸인 파열을 만드는 impulse의 fundamental frequency (Hertz

xform — formant frequency 각 xfund impulse 에 의해서 도입되는 싸인 파열의 freq. 이frequency는 각각 파열에 고정될수도, 계속 변화할수도 있다. (ifmode참고).
koct — octaviation index, (주로 0의 값 사용). 0보다 큰 값은 홀수번호의 싸인 파열이 약화되면서 xfund frequency를 낮춘다. 전체 숫자는 full octaves

kband — formant bandwidth (-6dB에서), Hz단위. 이 bandwidth는 싸인 파열 전체에 적용될 지수곡선의 decay비율을 결정한다.(아래에 있는 enveloping이 적용되기 이전에)
kris, kdur, kdec — 파열의 rise, 전체duration, decay times (초단위).이 값은 각 파열에 envelope되는 duration에 사용. linen generator와 비슷하지만rise와 decay 모양들은 ifnb input로부터 적용된다. kris 는 반대로 도입되는 formant 영역의 skirtwidth (-40 dB에서)를 결정한다. kdur 는 sineburst overlaps의 밀도에 영향을 끼치므로 이는 직접적으로 계산속도에도 영향을 끼친다. vocal소리를 만드는데 전형적인 값 .003,.02,.007.
Csound의 fof generator는 막연하게는Michael Clarke의 C-coding ( IRCAM’s CHANT program (Xavier Rodet et al.))을 기반으로 한다. 각각 fof는 하나의 formant를 생성하고, 4개 이상의 출력은 풍성한 vocal소리를 만들어 낸다. fof synthesis 는 granular synthesis중에서 특별한 하나의 형태이며 이것은 vocal모방과 granulay texture간의 변형을 가능하게 한다. 계산속도는 kdur, xfund, 와overlaps의 밀도에 따라 결정된다.

Example 146. Example of the fof opcode.
/* fof.orc */
/* Adapted from 1401.orc by Michael Clarke */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1

; Instrument #1.
instr 1
  ; Combine five formants together to create
  ; an alto-“a” sound.

  ; Values common to all of the formants.
  kfund init 261.659
  koct init 0
  kris init 0.003
  kdur init 0.02
  kdec init 0.007
  iolaps = 14850
  ifna = 1
  ifnb = 2
  itotdur = p3

  ; First formant.
  k1amp = ampdb(0)
  k1form init 800
  k1band init 80

  ; Second formant.
  k2amp = ampdb(-4)
  k2form init 1150
  k2band init 90

  ; Third formant.
  k3amp = ampdb(-20)
  k3form init 2800
  k3band init 120

  ; Fourth formant.
  k4amp = ampdb(-36)
  k4form init 3500
  k4band init 130

  ; Fifth formant.
  k5amp = ampdb(-60)
  k5form init 4950
  k5band init 140

  a1 fof k1amp, kfund, k1form, koct, k1band, kris,
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a2 fof k2amp, kfund, k2form, koct, k2band, kris,
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a3 fof k3amp, kfund, k3form, koct, k3band, kris,
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a4 fof k4amp, kfund, k4form, koct, k4band, kris,
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a5 fof k5amp, kfund, k5form, koct, k5band, kris,
         kdur, kdec, iolaps, ifna, ifnb, itotdur

  ; Combine all of the formants together.
  out (a1+a2+a3+a4+a5) * 16384
endin
/* fof.orc */

        
/* fof.sco */
/* Adapted from 1401.sco by Michael Clarke */
; Table #1, a sine wave.
f 1 0 4096 10 1
; Table #2.
f 2 0 1024 19 0.5 0.5 270 0.5

; Play Instrument #1 for three seconds.
i 1 0 3
e
/* fof.sco */

locsend

locsend

Description
locsend 은 이미 정의되어있는 locsig가 반드시 요구된다. 출력 시그널의 숫자는 반드시 이전에 받아진 locsig에서와 일치해야한다. Locsend의 출력 시그널은 locsig의 거리와 reverb에서 주어진것으로 사용되며 local 또는 global reverb units (예제 참고)로 보내어준다. reverb 양과 2~4채널간의 발란스는 Dodge book의 이론대로 만들어졌다.

Syntax

a1, a2  locsend
a1, a2,  a3, a4  locsend

Examples : locsig의 예제를 참고

locsig

locsig

Description

locsig은 input시그널을 받아 2개에서 4개의 채널로 나눈후에 채널간의 발란스를 계산하여 각도를 값으로 사용한다. 또한 거리를 argument로 받아서 시그널의 얼마나 많은양이 reverberator로 보내질건지를 결정한다. 이 Charles Dodge/Thomas Jerse book, Computer Music, page 320. 의 이론을 기반으로 반들어 졌다.

Syntax

a1, a2 locsig asig, kdegree, kdistance, kreverbsend
a1, a2,  a3, a4 locsig asig, kdegree, kdistance, kreverbsend

Performance

kdegree — 0 ~ 360의 값 (각도).
: a1=0, a2=90, a3=180, a4=270 (kdegree=45 는 정확히 a1과 a2사이에 시그널이 놓이게 한다. locsig 은 kdegree 을 sin 과 cos functions 으로 읽어들여 signal balances를 만든다(예: asig=1, kdegree=45, a1=a2=.707)
kdistance — 1보다 큰값은 시그널의 줄어들고 reverb level을 재현하게 된다. kdistance 가 더 커지면 소리는 더 부드러워지고 더 많은 reverberant를 구현한다. (locsend 의 사용이 요구됨).
kreverbsend — reverb나 reverb2와 같은 오브젝트로 보내어질 시그널의 양을 전달하기 위한 거리와 각도와 함께 요구되어지는 direct signal의 percentage

Examples
  asig //여기에 들어올 오디오를 만든후
  kdegree            line    0, p3, 360
  kdistance          line    1, p3, 10
  a1, a2, a3, a4     locsig  asig, kdegree, kdistance, .1
  ar1, ar2, ar3, ar4 locsend
  ga1 = ga1+ar1
  ga2 = ga2+ar2
  ga3 = ga3+ar3
  ga4 = ga4+ar4
                     outq    a1, a2, a3, a4
endin

instr 99 ; reverb instrument
  a1                 reverb2 ga1, 2.5, .5
  a2                 reverb2 ga2, 2.5, .5
  a3                 reverb2 ga3, 2.5, .5
  a4                 reverb2 ga4, 2.5, .5
                     outq    a1, a2, a3, a4
  ga1=0
  ga2=0
  ga3=0
  ga4=0
        
위의 예제에서는 시그널 asig가 완전히 원을그리며 전체 길이동안 움직이게 된다. 반면 동시에 그 거리는 듣는사람의 지역에서 점점 멀어지게 된다. locsig 는 시그널을 locsend로 적절한 양을 보내게 된다ㅣ. Locsend의 출력은 global accumulators 로 더해지고 그 global signals 은 reverb units 의 signal로서 사용된다.(분리된 instrument number에서.)

locsig 은 quad 와 stereo panning 에서 유용하며, 2개의 스피커 어디든 소리를 고정시키는대에도 유용하게 사용된다.
아래의 예 참고:

instr 1
  a1, a2             locsig  asig, p4, p5, .1
  ar1, ar2           locsend
  ga1=ga1+ar1
  ga2=ga2+ar2
                     outs a1, a
endin
instr 99
  ; reverb….
endin
        
score파일의 몇 개의 음들:
  ;왼쪽 스피커, 그리고 가까이에 놓이는 소리:
  i1 0 1 0 1
  
  ;오른쪽 스피커, 그리고 멀리 놓이는 소리:
  i1 1 1 90 25
  
  ;소리가 왼쪽과 오른쪽 스피커 정확하게 중간 위치에. 그리고 중간 거리:
  i1 2 1 45 12
  e
        
다음의 예는 단순한 도플러 현상을 나타낸다.

  kdistance          line    1, p3, 10
  kfreq = (ifreq * 340) / (340 + kdistance)
  asig               oscili  iamp, kfreq, 1
  kdegree            line    0, p3, 360
  a1, a2, a3, a4     locsig  asig, kdegree, kdistance, .1
  ar1, ar2, ar3, ar4 locsend