User-Defined Opcode Database

BufFiCt2

creates two gen01 function table from a stereo soundfile

Download UDO File

Description

Creates two gen01 function table from a stereo soundfile. This is nothing else than a simplification of creating the same with a ftgen statement.
Use BufFiCtNd to create a non-deferred function table from a soundfile

Syntax

iftL, iftR BufFiCt2 Sfilenam [, ifnL [, ifnR [, inorm]]]

Initialization

Sfilenam - file name or path as string
ifnL, ifnR - if zero (which is also the default), the number of the function table is given by Csound. Any other positive integer will represent the function table, but the user must take care of not using a number twice
inorm - if zero, the table is not normalized. This is also the default, while any other number creates a normalized table
iftL, iftR - output table numbers for left and right channel

Code

  opcode BufFiCt2, ii, Sooo
Sfilenam, ifnL, ifnR, inorm xin
igen      =         (inorm == 0 ? -1 : 1)
iftL      ftgen     ifnL, 0, 0, igen, Sfilenam, 0, 0, 1
iftR      ftgen     ifnR, 0, 0, igen, Sfilenam, 0, 0, 2
          xout      iftL, iftR  
  endop

Examples

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1


  opcode BufFiCt2, ii, Sooo
;creates two gen01 function tables from a stereo soundfile  
Sfilenam, ifnL, ifnR, inorm xin ;filename, number of left and right ftable (0=automatic(=default)), normalization (1=yes, 0=no(=default))
igen      =         (inorm == 0 ? -1 : 1)
iftL      ftgen     ifnL, 0, 0, igen, Sfilenam, 0, 0, 1
iftR      ftgen     ifnR, 0, 0, igen, Sfilenam, 0, 0, 2
          xout      iftL, iftR  
  endop

  opcode BufFiPl1, ak, ikkkop
ifn, kplay, kspeed, kvol, iskip, iwrap xin
;plays a file from a buffer. if iwrap=0 the file is just played once (stops at end of table for positive speed and at start of table for negative speed), or stops if the direction of speed changes. the sample rate of the sample is converted to the sample rate of the orchestra
;SAFETY CHECK IF THE TABLE IS REALLY GENERATED BY GEN01
if ftsr(ifn) == 0 then
 prints    "ERROR!\n FUNCTION TABLE %d HAS NO SAMPLE RATE VALUE (NOT GENERATED BY GEN01?)\n", ifn
 prints    "PERFORMANCE HAS BEEN TURNED OF.\n"
 turnoff
endif
iftlen    =         ftlen(ifn)/ftsr(ifn)
kcps      =         kspeed / iftlen
iphs      =         iskip / iftlen
kfin      init      0
;CALCULATIONS ONLY REQUIRED FOR WRAP=0
if iwrap == 0 then
kndx      phasor    kcps, iphs
kfirst    init      1 ;don't check condition below at the first k-cycle (always true)
kprevndx  init      0
 ;end of table check:
  ;for positive speed, check if this index is lower than the previous one
  if kfirst == 0 && kspeed > 0 && kndx < kprevndx then 
kfin      =         1
  else
 ;for negative speed, check if this index is higher than the previous one
kprevndx  =         (kprevndx == iphs ? 1 : kprevndx) 
   if kfirst == 0 && kspeed < 0 && kndx > kprevndx then
kfin      =         1
   endif
kfirst    =         0 ;end of first cycle in wrap = 0
  endif
kprevndx  =         kndx ;next previous is this index
endif
;READING THE SOUND WITH POSCIL3
if kplay == 1 && kfin == 0 then
asig      poscil3   kvol, kcps, ifn, iphs
else
asig      =         0
endif
          xout      asig, kfin
  endop
  
  opcode BufFiPl2, aak, iikkkop
ifnL, ifnR, kplay, kspeed, kvol, iskip, iwrap xin
aL, kfin  BufFiPl1  ifnL, kplay, kspeed, kvol, iskip, iwrap
aR, kfin  BufFiPl1  ifnR, kplay, kspeed, kvol, iskip, iwrap
          xout      aL, aR, kfin
  endop
    
	
instr 1
giL,giR   BufFiCt2  "2_channel_file.wav"
endin

instr 2
aL,aR,kfin BufFiPl2	 giL, giR, 1, p4, p5, p6, p7 ;speed vol skip wrap
 if p7 == 0 && kfin == 1 then
          printks   "Playback finished!\n", 10
 endif
          outs       aL, aR
endin


</CsInstruments>
<CsScore>
i 1 0 21
;         speed vol skip wrap
i 2 0 5   1.2   1   0    1
i . 6 .   .7    1   0    0
i . 12 .  -1    .5  0    0
i . 16 .  1     1   1.2  0
e
</CsScore>
</CsoundSynthesizer>

Credits

joachim heintz 2010


Previous Home Next
BufFiCt4   BufPlay2