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

## mags

mags — Retourne les modules d'un tableau de nombres complexes.

## Description

Cet opcode retourne les modules d'un tableau de nombres complexes (en format rfft) dans un tableau de réels dont la taille est la moitié de celle du tableau d'entrée plus un. Le module pour la fréquence de Nyquist se trouve dans la dernière position du tableau.

## Syntaxe

    kout[] mags kin[]

## Exécution

kout[] -- tableau contenant les modules (taille = taille d'entrée / 2). Créé s'il n'existe pas.

kin[] -- tableau contenant les valeurs complexes réelles-imaginaires d'entrée.

## Exemples

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

Exemple 556. Exemple de l'opcode mags.

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>
    -d -o dac
    </CsOptions>
    <CsInstruments>
    /* ksmps needs to be an integer div of
       hopsize */
    ksmps = 64
    0dbfs=1
    nchnls=2

    opcode PVA,k[]k[]k,aii
     asig,isize,ihop xin
     iolaps init isize/ihop
     kcnt init 0
     krow init 1
     kIn[] init isize
     kOlph[] init isize/2 + 1
     ifac = (sr/(ihop*2*$M_PI))
     iscal = (2*$M_PI*ihop/isize)
     kfl = 0
     kIn shiftin asig
     if kcnt == ihop then
       kWin[] window kIn,krow*ihop
       kSpec[] rfft kWin
       kMags[] mags kSpec
       kPha[] phs kSpec
       kDelta[] = kPha - kOlph
       kOlph = kPha
       kk = 0
       kDelta unwrap kDelta
       while kk < isize/2 do
        kPha[kk] = (kDelta[kk] + kk*iscal)*ifac
        kk += 1
       od
       krow = (krow+1)%iolaps
       kcnt = 0
       kfl = 1
     endif
     xout kMags,kPha,kfl
     kcnt += ksmps
    endop

    opcode PVS,a,k[]k[]kii
     kMags[],kFr[],kfl,isize,ihop xin
     iolaps init isize/ihop
     ifac = ihop*2*$M_PI/sr;
     iscal = sr/isize
     krow init 0
     kOla[] init isize
     kOut[][] init iolaps,isize
     kPhs[] init isize/2+1
     if kfl == 1 then
      kk = 0
      while kk < isize/2 do
        kFr[kk] = (kFr[kk] - kk*iscal)*ifac
        kk += 1
      od
      kPhs = kFr + kPhs
      kSpec[] pol2rect kMags,kPhs
      kRow[] rifft kSpec
      kWin[] window kRow, krow*ihop
      kOut setrow kWin, krow
      kOla = 0
      kk = 0
      until kk == iolaps do
       kRow getrow kOut, kk
       kOla = kOla + kRow
       kk += 1
      od
      krow = (krow+1)%iolaps
     endif
     xout shiftout(kOla)/iolaps
    endop

    instr 1

     ihopsize = 256  ; hopsize
     ifftsize = 2048 ; FFT size
     kFreqsOut[] init ifftsize/2+1 ; synthesis freqs
     kMagsOut[] init ifftsize/2+1 ; synthesis mags

     a1 diskin2 "fox.wav",1,0,1

     kMags[],kFreqs[],kflg PVA a1,ifftsize,ihopsize

     if kflg == 1 then
     ki = 0
       kMagsOut = 0
      kFreqsOut = 0
      iscal = 1.5
     until ki == ifftsize/2 do
       if ki*iscal < ifftsize/2 then
         kFreqsOut[ki*iscal] = kFreqs[ki]*iscal
         kMagsOut[ki*iscal] = kMags[ki]
       endif
        ki += 1
      od
     endif

     a2 PVS kMagsOut,kFreqsOut,kflg,ifftsize,ihopsize

     a1 delay a1, (ifftsize+ihopsize)/sr
        outs a1, a2
    endin

    </CsInstruments>
    <CsScore>
    i1 0 10
    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

Opcodes vectoriels, Opcodes de tableaux.

## Crédits

Auteur : Victor Lazzarini
NUI Maynooth
2014

Nouveau dans la version 6.04

Précédent | Niveau supérieur | Suivant
madsr | Sommaire | mandel