getrowlin — Copie une ligne d'un tableau 2D dans un ftable avec interpolation entre les lignes.
Opcode du greffon beosc.
Etant donné un tableau 2D (tableau-i ou -k), ou une ftable représentant une matrice 2D, prend une ligne de cette matrice (ça peut être un bout de ligne). Si krow n'est pas un entier, les valeurs sont interpolées entre les deux lignes adjacentes. En supposant qu'une telle matrice 2D contient plusieurs lignes de flots échantillonnés (par exemple les amplitudes d'un ensemble d'oscillateurs échantillonnées à intervalles réguliers), cet opcode extrait une ligne de ces données avec interpolation linéaire entre lignes adjacentes (si la ligne n'est pas un nombre rond) et place le résultat dans un tableau 1D.
kOut[] getrowlin kMtx[], krow [, kstart, kend, kstep ]
kOut[] getrowlin krow, ifn, inumcols [, iskip, start, iend, istep ]
kMtrx[] -- Un tableau 2D.
krow -- La ligne à lire (peut être un nombre fractionnaire, auquel cas il y aura interpolation avec la ligne suivante).
kstart -- Position à partir de laquelle commence la lecture dans la ligne (0 par défaut).
kend -- Position (non inclusive) à laquelle finit la lecture dans la ligne.
kstep -- Pas de lecture dans la ligne (1 par défaut).
iskip -- Si une ftable est utilisée en entrée, iskip indique le début des données échantillonnées (ignorant un possible en-tête dans les données). Vaut 0 par défaut.
inumcols -- Si une ftable est utilisée en entrée, inumcols indique le nombre de colonnes de la matrice 2D.
Voici un exemple de l'opcode getrowlin. Il utilise le fichier getrowlin.csd. See also the example for beadsynt: beadsynt.csd
Exemple 398. Exemple de l'opcode getrowlin.
<CsoundSynthesizer> <CsOptions> -odac ;;;realtime audio out </CsOptions> <CsInstruments> /* This is the example file for getrowlin getrowlin ========= Given a 2D array (i- or k- array), or a table representing a 2D matrix, get a row of this matrix (possibly a slice). If krow is not an integer, the values are the result of the interpolation between the two adjacent rows. Assuming such a 2D matrix containing multiple rows of sampled streams (for instance, the amplitudes of a set of oscillators, sampled at a regular interval), this opcode extracts one row of that data with linear interpolation between adjacent rows and places the result in a 1D array NB: The destination array (the left hand term) does not need to be previously initialized NB2: if the destination array is too small to fit the data, it will be enlarged Syntax ====== kOut[] getrowlin kMtrx[], krow, kstart=0, kend=0, kstep=1 kOut[] getrowlin krow, ifn, inumcols, iskip=0, istart=0, iend=0, istep=1 kMtrx[] : a 2D array krow : the row to read (can be a fractional number, in which case interpolation with the next row is performed) kstart : start index to read from the row kend : end index to read from the row (not inclusive) kstep : step used to read the along the row iskip : in the case of using a table as input, iskip indicates the start of the sampled data (skipping a possible header in the data) inumcols : in the case of using a table as input, inumcols indicates the number of columns of the 2D matrix. */ sr = 44100 ksmps = 128 nchnls = 1 0dbfs = 1 ; just a simple test of the bare functionality instr 1 ; make a 4x3 array kMtx[] init 3, 4 kMtx fillarray 0, 1, 2, 3, \ 10, 11, 12, 13, \ 20, 21, 22, 23 krow linseg 0, p3, 2 printk2 krow, 20 kOut[] getrowlin kMtx, krow printarray kOut, -1, "", "kOut" ; the same, but use cosine interpolation krow0 = floor(krow) krow1 = krow0 + 1 krowcos = lincos(krow, krow0, krow1, krow0, krow1) kOut2[] getrowlin kMtx, krowcos printarray kOut2, -1, "", "kOut2" endin ; simplified example taken from beadsynt, to show a practical use case ; this uses the file fox.mtx.wav, which is not a real soundfile, but ; a 2D matrix saved as a soundfile, generated with loristrck_pack ; (see https://github.com/gesellkammer/loristrck) instr 2 ifn ftgentmp 0,0,0,-1, "fox.mtx.wav", 0, 0, 0 ; ifn is organized as follow: ; header: iskip, idt, inumcols, inumrows, itimestart ; multiple rows of the form f0, a0, bw0, f1, a1, bw1, ... iskip tab_i 0, ifn idt tab_i 1, ifn inumcols tab_i 2, ifn inumrows tab_i 3, ifn itimestart tab_i 4, ifn inumpartials = inumcols / 3 imaxrow = inumrows - 2 idur = inumrows * idt kfreqscale cosseg 1, idur, 2 kplayhead phasor (1/idur)*idur krow = limit(kplayhead / idt, 0, imaxrow) ; start end step kFreqs[] getrowlin krow, ifn, inumcols, iskip, 0, 0, 3 kAmps[] getrowlin krow, ifn, inumcols, iskip, 1, 0, 3 kBws[] getrowlin krow, ifn, inumcols, iskip, 2, 0, 3 aout beadsynt kFreqs, kAmps, kBws, -1, 0, kfreqscale outch 1, aout if(timeinsts() > idur) then event "e", 0, 0, 0 endif endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 3600 </CsScore> </CsoundSynthesizer>