ATSread
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## 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 74. 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

    instr 1	; "beats.ats" is created by atsa

    ktime	line    0, p3, 2
    kfreq, kamp	ATSread  ktime, "beats.ats", 100
    aout	oscili  0.8, kfreq, 1
    	outs	aout, aout

    endin

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

    i 1 0 2
    e

    </CsScore>
    </CsoundSynthesizer>

Ici nous utilisons ATSread pour obtenir la fréquence et l'amplitude du centiè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 autre exemple de l'opcode ATSread. Il utilise le fichier ATSread-2.csd.

Exemple 75. 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

    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

Précédent | Niveau supérieur | Suivant
ATSinterpread | Sommaire | ATSreadnz