cmp

cmp — Compare des signaux audio ou des tableaux.

Description

Opcode du greffon emugens.

Compare des signaux audio ou des tableaux, échantillon par échantillon ou valeur par valeur. Toutes les comparaisons sont possibles : `< `<=, >, >=, ==, !=.

Un signal audio peut être comparé à un autre signal audio, ou à un scalaire (valeur de taux-i ou -k).

        aout cmp aL, ">", aR
        aOut cmp aIn, ">=", 0.5
        aOut cmp aIn, "`<=", kthreshold
      

Un tableau peut être comparé à un autre tableau, à un scalaire, ou testé s'il appartient à un intervalle entre deux scalaires. Toutes ces opérations sont valables pour les tableaux-i et -k.

        kOut[] cmp kIn[], ">=", kx
        kOut[] cmp kA[], "==", kB[]
        kOut[] cmp 0.5, "`<", kIn[], "`<=", 1
      

Syntaxe

aout cmp a1, S_operator, a2
aout cmp a1, S_operator, kb
kOut[] cmp kA[], S_operator, kb
kOut[] cmp kA[], S_operator, kB[]
kOut[] cmp k1, S_operator1, kIn[], S_operator2, k2

Initialisation

S_operator -- un opérateur mathématique parmi ">", ">=", "<", "<=", "=="

Exécution

a1 / a2 -- Signaux en entrée.

kb / ib -- Terme scalaire.

kA[] / kB[] -- Tableaux en entrée.

Quelques exemples d'utilisation :

        aout cmp aL, ">", aR     ; aout = aL > aR pour chaque échantillon
        aout cmp aL, ">=", aR
        aout cmp aL, "`<", aR
        aout cmp aL, "`<=", aR
        aout cmp aL, "==", aR
        kOut[] cmp kA, ">=", kb   ; kA est un tableau
      

Exemples

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

Exemple 149. Exemple de l'opcode cmp.

<CsoundSynthesizer>
<CsOptions>
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 128
nchnls = 5
0dbfs = 1.0

; this is the example file for 'cmp'

/*

cmp

compare audio or arrays, value by value

Audio:
  * compare audio signals, sample by sample, against another signal or scalar
  * compara audio singal, sample by sample, within a range:
    aout cmp klo, "<", ain, "<=", khi

Arrays:
  * compare arrays value by value or against a scalar
  * compare array value by value within a range:
    kout[] = klo < kin[] <= khi   ->   kout[] cmp klo, "<", kin[], "<=", khi

aout cmp a1, Sop, a2                 : aout cmp ain, "<", acmp
aout cmp a1, Sop, kval               : aout cmp ain, ">=", 0.1
kout[] cmp k1[], Sop, k2[]           : kout[] cmp kxs, "<", kys
iout[] cmp i1[], Sop, i2[]           : iout[] cmp ixs, "<", iys
kout[] cmp k1[], Sop, k              : kout[] cmp kxs, "<", 0.5
iout[] cmp i1[], Sop, i              : iout[] cmp ixs, "<", 0.5
kout[] cmp klo, Sop, kx[], Sop, khi  : kout[] cmp 0, "<", kxs, "<=", 1
iout[] cmp ilo, Sop, ix[], Sop, ihi  : iout[] cmp 0, "<", ixs, "<=", 1

TODO: implement array operations for multidim. arrays
      (at the time, array operations work only for 1D-arrays)

*/

; for audio operations, render this to a soundfile and open in an editor
; to check the results

instr 1
  a0 linseg 0, p3, 1
  a1 linseg 1, p3, 0
  aout1 cmp a0, "<", a1
  aout2 cmp a0, "<=", 0.5
  aout3 cmp a0, ">", 0.5
  outch 1, a0
  outch 2, a1
  outch 3, aout1
  outch 4, aout2
  outch 5, aout3
endin

instr 4
  ; cmp with arrays
  ixs[] fillarray 0, 1, 2, 3, 4, 5
  iys[] cmp ixs, ">=", 3
  printarray iys, "", "instr 4, iys"
  
  kxs[] fillarray 0, 1, 2, 3, 4, 5
  kys[] cmp kxs, ">=", 3
  printarray kys, 1, "", "instr 4, kys"
  turnoff
endin

instr 5
  ; range
  ixs[] fillarray 0, 1, 2, 3, 4, 5
  iys[] cmp 1, "<", ixs, "<=", 4
  printarray iys, "", "instr 5, iys"

  kxs[] fillarray 0, 1, 2, 3, 4, 5
  kys[] cmp 1, "<", kxs, "<=", 4
  printarray kys, 1, "", "instr 5, kys"
  turnoff
endin



</CsInstruments>
<CsScore>
i 1 0 2
i 4 0 1
i 5 0 1
</CsScore>
</CsoundSynthesizer>


Voir aussi

max, min.

Crédits

Par : Eduardo Moguillansky 2017