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

## fprintks

fprintks — Semblable à printks mais imprime dans un fichier.

## Description

Semblable à printks mais imprime dans un fichier.

## Syntaxe

    fprintks "filename", "string", [, kval1] [, kval2] [...]

## Initialisation

"filename" -- nom du fichier de sortie.

"string" -- la chaîne de texte à imprimer. Peut contenir jusqu'à 8192 caractères et doit être entre guillements.

## Exécution

kval1, kval2, ... (facultatif) -- Les valeurs de taux-k à imprimer. Elle sont spécifiées dans « string » avec les spécificateurs de format du C standard (%f, %d, etc.) dans l'ordre donné.

fprintks est semblable à l'opcode printks sauf qu'il imprime dans un fichier et qu'il n'a pas de paramètre de taux-i. Pour plus d'information sur le formatage de la sortie, prière de consulter la documentation de printks.

## Exemples

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

Exemple 371. Exemple de l'opcode fprintks.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    ; Audio out   Audio in
    -odac           -iadc    ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o fprintks.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    /* Written by Matt Ingalls, edited by Kevin Conder. */
    ; Initialize the global variables.
    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Instrument #1 - a score generator example.
    instr 1
      ; K-rate stuff.
      kstart init 0
      kdur linrand 10
      kpitch linrand 8

      ; Printing to to a file called "my.sco".
      fprintks "my.sco", "i1\\t%2.2f\\t%2.2f\\t%2.2f\\n", kstart, kdur, 4+kpitch

      knext linrand 1
      kstart = kstart + knext
    endin

    </CsInstruments>
    <CsScore>

    /* Written by Matt Ingalls, edited by Kevin Conder. */
    ; Play Instrument #1.
    i 1 0 0.001

    </CsScore>
    </CsoundSynthesizer>

Cet exemple générera un fichier nommé « my.sco ». Il contiendra des lignes comme celles-ci :

    i1      0.00    3.94    10.26
    i1      0.20    3.35    6.22
    i1      0.67    3.65    11.33
    i1      1.31    1.42    4.13

Voici un exemple de l'opcode fprintks, qui convertit un fichier MIDI standard en partition Csound. Il utilise le fichier fprintks-2.csd.

Exemple 372. Exemple de l'opcode fprintks pour convertir un fichier MIDI en partition Csound.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    ; Audio out   Audio in    No messages
    ; -odac           -iadc     -d     ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    -n -Fmidichn_advanced.mid
    ;Don't write audio ouput to disk and use the file midichn_advanced.mid as MIDI input
    </CsOptions>
    <CsInstruments>

      sr	    =  48000
      ksmps	    =  16
      nchnls    =  2

      ;Example by Jonathan Murphy 2007

    	    ; assign all midi events to instr 1000
    	    massign   0, 1000
    	    pgmassign	0, 1000

        instr 1000

      ktim	timeinsts

      kst, kch, kd1, kd2  midiin
    if (kst != 0) then
    ;  p4 = MIDI event type   p5 = channel   p6= data1    p7= data2
    	    fprintks  "MIDI2cs.sco", "i1\\t%f\\t%f\\t%d\\t%d\\t%d\\t%d\\n", ktim, 1/kr, kst, kch, kd1, kd2
    endif

        endin

    </CsInstruments>
    <CsScore>
    i1000 0 10000
    e
    </CsScore>
    </CsoundSynthesizer>

Cet exemple générera un fichier nommé « MIDI2cs.sco » contenant des évènements i correspondant au fichier MIDI.

Voici un exemple avancé de l'opcocde fprintks, qui génère une partition pour Csound. Il utilise le fichier scogen-2.csd.

Exemple 373. Exemple de l'opcode fprintks pour créer un générateur de fichier de partition Csound au moyen de Csound.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    ; Audio out   Audio in    No messages
    ; -odac           -iadc     -d     ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    -n
    ;Don't write audio ouput to disk
    </CsOptions>
    <CsInstruments>
    ;===========================================================
    ;        scogen.csd       by: Matt Ingalls
    ;
    ;    a "port" of sorts
    ;      of the old "mills" score generator (scogen)
    ;
    ;    this instrument creates a schottstaedt.sco file
    ;    to be used with the schottstaedt.orc file
    ;
    ;    as long as you dont save schottstaedt.orc as a .csd
    ;    file, you should be able to keep it open in MacCsound
    ;    and render each newly generated .sco file.
    ;
    ;===========================================================

    gScoName = "/Users/matt/Desktop/schottstaedt.sco"     ; the name of the file to be generated

        sr    =    100     ; this defines our temporal resolution,
                    ; an sr of 100 means we will generate p2 and p3 values
                    ; to the nearest 1/100th of a second

        ksmps =    1     ; set kr=sr so we can do everything at k-rate

    ; some print opcodes
    opcode PrintInteger, 0, k
        kval    xin
            fprintks    gScoName, "%d", kval
    endop

    opcode PrintFloat, 0, k
        kval    xin
            fprintks    gScoName, "%f", kval
    endop

    opcode PrintTab, 0, 0
        fprintks    gScoName, "%n"
    endop

    opcode PrintReturn, 0, 0
        fprintks    gScoName, "%r"
    endop

    ; recursively calling opcode to handle all the optional parameters
    opcode ProcessAdditionalPfields, 0, ikio
        iPtable, kndx, iNumPfields, iPfield xin

        ; additional pfields start at 5, we use a default 0 to identify the first call
        iPfield = (iPfield == 0 ? 5 : iPfield)

        if (iPfield > iNumPfields) goto endloop
            ; find our tables
            iMinTable table    2*iPfield-1, iPtable
            iMaxTable table    2*iPfield, iPtable

            ; get values from our tables
            kMin tablei    kndx, iMinTable
            kMax tablei    kndx, iMaxTable

            ; find a random value in the range and write it to the score
            fprintks gScoName, "%t%f", kMin + rnd(kMax-kMin)

            ; recursively call for any additional pfields.
            ProcessAdditionalPfields iPtable, kndx, iNumPfields, iPfield + 1
        endloop:

    endop

    /* ===========================================================
        Generate a gesture of i-statements

        p2 = start of the gesture
        p3 = duration of the gesture
        p4 = number of a function that contains a list of all
            function table numbers used to define the
            pfield random distribution
        p5 = scale generated p4 values according to density (0=off, 1=on) [todo]
        p6 = let durations overlap gesture duration (0=off, 1=on) [todo]
        p7 = seed for random number generator seed [todo]
      ===========================================================
    */
    instr Gesture

        ; initialize
        iResolution = 1/sr

        kNextStart init p2
        kCurrentTime init p2

        iNumPfields table        0, p4
        iInstrMinTable table    1, p4
        iInstrMaxTable table    2, p4
        iDensityMinTable table    3, p4
        iDensityMaxTable table    4, p4
        iDurMinTable table    5, p4
        iDurMaxTable table    6, p4
        iAmpMinTable table    7, p4
        iAmpMaxTable table    8, p4

        ; check to make sure there is enough data
        print iNumPfields
        if iNumPfields < 4 then
            prints "%dError: At least 4 p-fields (8 functions) need to be specified.%n", iNumPfields
            turnoff
        endif

        ; initial comment
        fprints    gScoName, "%!Generated Gesture from %f to %f seconds%n %!%t%twith a p-max of %d%n%n", p2, p3, iNumPfields

        ; k-rate stuff
        if (kCurrentTime >= kNextStart) then ; write a new note!

            kndx = (kCurrentTime-p2)/p3

            ; get the required pfield ranges
            kInstMin tablei    kndx, iInstrMinTable
            kInstMax tablei    kndx, iInstrMaxTable
            kDensMin tablei    kndx, iDensityMinTable
            kDensMax tablei    kndx, iDensityMaxTable
            kDurMin tablei    kndx, iDurMinTable
            kDurMax tablei    kndx, iDurMaxTable
            kAmpMin tablei    kndx, iAmpMinTable
            kAmpMax tablei    kndx, iAmpMaxTable

            ; find random values for all our required parameters and print the i-statement
            fprintks gScoName, "i%d%t%f%t%f%t%f", kInstMin + rnd(kInstMax-kInstMin), kNextStart, kDurMin + rnd(kDurMax-kDurMin), kAmpMin + rnd(kAmpMax-kAmpMin)

            ; now any additional pfields
            ProcessAdditionalPfields p4, kndx, iNumPfields

            PrintReturn

            ; calculate next starttime
            kDensity = kDensMin + rnd(kDensMax-kDensMin)
            if (kDensity < iResolution) then
                kDensity = iResolution
            endif
            kNextStart = kNextStart + kDensity
        endif

        kCurrentTime = kCurrentTime + iResolution
    endin

    </CsInstruments>
    <CsScore>
    /*
    ===========================================================
      scogen.sco

        this csound module generates a score file
        you specify a gesture of notes by giving
        the "gesture" instrument a number to a
        (negative) gen2 table.

        this table stores numbers to pairs of functions.
        each function-pair represents a range (min-max)
        of randomness for every pfield for the notes to
        be generated.
    ===========================================================
    */

    ; common tables for pfield ranges
    f100    0    2    -7    0 2 0    ; static 0
    f101    0    2    -7    1 2 1    ; static 1
    f102    0    2    -7    0 2 1 ; ramp 0->1
    f103    0    2    -7    1 2 0 ; ramp 1->0
    f105    0    2    -7    10 2 10 ; static 10
    f106    0    2    -7    .1 2 .1 ; static .1

    ; specific pfield ranges
    f10    0    2    -7       .8 2 .01 ; density
    f11    0    2    -7       8 2 4 ; pitchmin
    f12    0    2    -7       8 2 12 ; pitchmax

    ;=== table containing the function numbers used for all the p-field distributions
    ;
    ;    p1 -     table number
    ;    p2 -     time table is instantiated
    ;    p3 -     size of table (must be >= p5!)
    ;    p4 -     gen# (should be = -2)
    ;    p5 -     number of pfields of each note to be generated
    ;    p6 -     table number of the function representing the minimum possible note number (p1) of a generated note
    ;    p7 -     table number of the function representing the maximum possible note number (p1) of a generated note
    ;    p8 -     table number of the function representing the minimum possible noteon-to-noteon time (p2 density) of a generated note
    ;    p9 -     table number of the function representing the maximum possible noteon-to-noteon time (p2 density) of a generated note
    ;    p10 -    table number of the function representing the minimum possible duration (p3) of a generated note
    ;    p11 -    table number of the function representing the maximum possible duration (p3) of a generated note
    ;    p12 -    table number of the function representing the maximum possible amplitude (p4) of a generated note
    ;    p13 -    table number of the function representing the maximum possible amplitude (p5) of a generated note
    ;    p14,p16.. -    table number of the function representing the minimum possible value for additional pfields (p5,p6..) of a generated note
    ;    p15,p17.. -    table number of the function representing the maximum possible value for additional pfields (p5,p6..) of a generated note

    ;        siz    2    #pds p1min    p1max p2min    p2max p3min    p3max p4min    p4max p5min    p5max p6min    p6max
    f1    0    32    -2    6    101    101    10    10 101    105    100    106    11    12    100    101

    ;gesture definitions
    ;        start    dur    pTble    scale    overlap seed
    i"Gesture"     0    60    1 ;todo-->0    0    123
    </CsScore>

    </CsoundSynthesizer>

Cet exemple générera un fichier nommé « schottstaedt.sco » que l'on peut utiliser comme partition avec schottstaedt.orc

## Voir aussi

printks

## Crédits

Auteur : Matt Ingalls
Janvier 2003

Précédent | Niveau supérieur | Suivant
foutk | Sommaire | fprints