ATSread

ATSread — Lit des données depuis un fichier ATS.

Description

ATSread retourne l'information d'amplitude (kamp) et de fréquence (kfreq) d'un partiel spécifié contenu dans le fichier d'analyse ATS au moment indiqué par le pointeur de temps ktimepnt.

Syntaxe

kfreq, kamp ATSread ktimepnt, iatsfile, ipartial

Initialisation

iatsfile – le numéro ATS (n dans ats.n) ou le nom entre guillemets du fichier d'analyse créé avec ATS.

ipartial – le numéro du partiel d'analyse duquel seront retournés la fréquence en Hz et l'amplitude.

Exécution

kfreq, kamp - sorties de l'unité ATSread. Ces valeurs représentent la fréquence et l'amplitude d'un partiel spécifique sélectionné par ipartial. Les informations du partiel sont dérivées d'une analyse ATS. ATSread interpole la fréquence et l'amplitude entre les trames dans le fichier d'analyse ATS au taux-k. La sortie dépend des données dans le fichier d'analyse et du pointeur ktimepnt.

ktimepnt – Le pointeur de temps en secondes utilisé comme indice sur le fichier ATS. Est utilisé pour ATSread exactement de la même manière que pour pvoc et ATSadd.

Exemples

Voici un exemple de l'opcode ATSread. Il utilise le fichier ATSread.csd.

Exemple 78. Exemple de l'opcode ATSread.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;RT audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o ATSread.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

; by Menno Knevel - 2021

ires system_i 1,{{ atsa fox.wav fox.ats }} ; default settings

instr 1	

ktime	line    0, p3, 2
kfreq, kamp	ATSread  ktime, "beats.ats", 10 ; take the 10th partial
aenv    linen   1, 0, p3, .1    ; envelope to avoid clicks
aout	oscili  0.8, kfreq, 1
	outs	aout * aenv, aout * aenv
 
endin

</CsInstruments>
<CsScore>
f 1 0 16384 10 1 ;sine wave.

i 1 0 1         ; fast speed
i 1 2 2         ; normal
i 1 5 10        ; 5x slower 
e
</CsScore>
</CsoundSynthesizer>


Ici nous utilisons ATSread pour obtenir la fréquence et l'amplitude du dixième partiel du fichier d'analyse ATS 'beats.ats'. Nous utilisons ces données pour piloter un oscillateur, mais nous pourrions les utiliser pour toute autre opération qui accepte une entrée au taux-k, comme la largeur de bande et la résonnance d'un filtre, etc.

Voici un exemple musical de l'opcode ATSread. Il utilise le fichier ATSread-musical.csd.

Exemple 79. Exemple 2 de l'opcode ATSread.

<CsoundSynthesizer>
<CsOptions>
-odac -d -m128
</CsOptions>
<CsInstruments>
;example by joachim heintz
sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

ires1 system_i 1,{{ atsa fox.wav fox.ats }} ; default settings

giSine    ftgen     0, 0, 1024, 10, 1
gSfile    =         "fox.ats"
giNumParts ATSinfo  gSfile, 3 ;overall number of partials
giDur     ATSinfo   gSfile, 7 ;duration 
          seed      0


  instr ReadOnePartial
iPartial  =         p4
p3        =         giDur
ktime     line      0, giDur, giDur
          prints    "Resynthesizing partial number %d.\n", iPartial
kFq,kAmp  ATSread   ktime, gSfile, iPartial
kAmp      port      kAmp, .1 ;smooth amplitudes - still not satisfactoring
aOut      poscil    kAmp, kFq, giSine
aOut      linen     aOut, 0, p3, .01 ;anti-click
          outs      aOut*10, aOut*10

;start next instr: normal speed, three loops, pause between loops one second
          event_i   "i", "MasterRand", giDur+3, 1, 1, 3, 2
  endin

  instr MasterRand
  ;random selections of 10 partials per second, overlapping
iSpeed    =         p4 ;speed of reading / playing
iNumLoops =         p5 ;number of loops
iPause    =         p6 ;length of pause between loops
          prints    "Resynthesizing random partials.\n"
p3        =         (giDur/iSpeed+iPause) * iNumLoops
;start next instr: half speed, three loops, three seonds pause between loops
          event_i   "i", "MasterArp", p3+3, 1, .5, 3, 3
;loop over duration plus pause
loop:
          timout    0, giDur/iSpeed+iPause, play
          reinit    loop
play:
gkTime    line      0, giDur/iSpeed, giDur ;start time from 0 in each loop
kTrig     metro     10 ;10 new partials per second
 ;call subinstrument if trigger and no pause
 if kTrig == 1 && gkTime < giDur then
kPart     random    1, giNumParts+.999
          event     "i", "PlayRand", 0, 1, int(kPart)
 endif

  endin
  
  instr MasterArp
  ;argeggio-like reading and playing of partials 
iSpeed    =         p4 ;speed of reading / playing
iNumLoops =         p5 ;number of loops
iPause    =         p6 ;length of pause between loops
          prints    "Arpeggiating partials.\n"
p3        =         (giDur/iSpeed+iPause) * iNumLoops
loop:
          timout    0, giDur/iSpeed+iPause, play
          reinit    loop
play:
gkTime    line      0, giDur/iSpeed, giDur
kArp      linseg    1, (giDur/iSpeed)/2, giNumParts, (giDur/iSpeed)/2, 1 ;arp up and down
kTrig     metro     10 ;10 new partials per second
 if kTrig == 1 && gkTime < giDur then
          event     "i", "PlayArp", 0, 5, int(kArp)
 endif

;exit csound when finished
          event_i   "i", "End", p3+5, 1
  endin

  instr PlayRand
iPartial  =         p4
kFq,kAmp  ATSread   gkTime, gSfile, iPartial
kamp      port      kAmp, .15 ;smooth amplitudes
aOut      poscil    kAmp, kFq, giSine
aOut      linen     aOut, .01, p3, .01
          outs      aOut, aOut
  endin

  instr PlayArp
kCount    init      1 ;k-cycle
iPartial  =         p4
kFq,kAmp  ATSread   gkTime, gSfile, iPartial
 if kCount == 1 then ;get freq from first k-cycle
kModFq    =         kFq
  ;avoid to go with 0 Hz as this blocks the mode filter
  if kModFq == 0 then
          turnoff
  endif
 endif
iVol      random    -42, -12 ;db
iOffset   random    .01, .1 ;no too regularily ...
aImp      mpulse    ampdb(iVol), p3, iOffset
iQ        random    500, 5000
aOut      mode      aImp, kModFq, iQ
aOut      linen     aOut, 0, p3, p3/3
          outs      aOut, aOut
kCount    =         2
  endin

  instr End
          exitnow
  endin
</CsInstruments>
<CsScore>
i "ReadOnePartial" 0 1 10
e 999
</CsScore>
</CsoundSynthesizer>


Voir aussi

ATSreadnz, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz, ATSsinnoi

Crédits

Auteur : Alex Norman
Seattle,Washington
2004