ATSread — Lit des données depuis un fichier ATS.
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.
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.
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.
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>
ATSreadnz, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz, ATSsinnoi