GEN51 — Ce sous-programme remplit une table avec une échelle microtonale personnalisée, à la manière des opcodes de Csound cpstun, cpstuni et cpstmid.
Ce sous-programme remplit une table avec une échelle microtonale personnalisée, à la manière des opcodes de Csound cpstun, cpstuni et cpstmid.
f # date taille -51 nbrdegres intervalle freqbase touchebase rapport1 rapport2 .... rapportN
Les quatre premiers paramètres (c'est-à-dire p5, p6, p7 et p8) définissent les directives de génération suivantes :
p5 (nbrdegres) -- le nombre de degrés de l'échelle microtonale
p6 (intervalle) -- l'intervalle de fréquences couvert avant de répéter les rapports des degrés, par exemple 2 pour une octave, 1,5 pour une quinte, etc.
p7 (freqbase) -- la fréquence de base de l'échelle en cps
p8 (touchebase) -- L'indice entier dans la table auquel assigner la fréquence de base inchangée
Les autres paramètres définissent les rapports de l'échelle :
p9 ... pN (rapport1 ... etc.) -- les rapports des degrés de l'échelle
Par exemple, pour une échelle standard de 12 degrés avec une fréquence de base de 261 cps assignée à la touche numéro 60, l'instruction f de la partition pour générer la table serait :
; nbrdegrés fréqbase rapports (tempérament égal) ....... ; intervalle touchebase f1 0 64 -51 12 2 261 60 1 1.059463 1.12246 1.18920 ..etc...
Après le calcul du gen, la table f1 est remplie avec 64 valeurs de fréquences différentes. Le 60ème élément est rempli avec la valeur de fréquence 261, et tous les autres éléments de la table (précédents et suivants) sont remplis selon les rapports des degrés.
Un autre exemple avec une échelle de 24 degrés, une fréquence de base de 440 cps assignée à la touche numéro 48, et un intervalle de répétition de 1,5 :
; nbrdegrés fréqbase rapports ....... ; intervalle touchebase f1 0 64 -51 24 1.5 440 48 1 1.01 1.02 1.03 ..etc...
Voici un exemple de la routine GEN51. Il utilise le fichier gen51.csd.
Exemple 1312. Un exemple de la routine GEN51.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac -M0 ;;;realtime audio out and midi input ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o gen51.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ;example by Iain McCurdy sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giEqTmp12 ftgen 1,0,128,-51,12,2,cpsoct(8),60,1,2^(1/12),2^(2/12),2^(3/12),2^(4/12),2^(5/12),2^(6/12),2^(7/12),2^(8/12),2^(9/12),2^(10/12),2^(11/12),2^(12/12) giEqTmp10 ftgen 2,0,128,-51,10,2,cpsoct(8),60,1,2^(1/10),2^(2/10),2^(3/10),2^(4/10),2^(5/10),2^(6/10),2^(7/10),2^(8/10),2^(9/10),2^(10/10) giEqTmp24 ftgen 3,0,128,-51,24,2,cpsoct(8),60,1,2^(1/24),2^(2/24),2^(3/24),2^(4/24),2^(5/24),2^(6/24),2^(7/24),2^(8/24),2^(9/24),2^(10/24),2^(11/24), \ 2^(12/24),2^(13/24),2^(14/24),2^(15/24),2^(16/24),2^(17/24),2^(18/24),2^(19/24),2^(20/24),2^(21/24),2^(22/24),2^(23/24),2^(24/24) instr 1 ;midi input instrument /*USE PITCH BEND TO MODULATE NOTE NUMBER UP OR DOWN ONE STEP - ACTUAL INTERVAL IT WILL MODULATE BY WILL BE DEPENDENT UPON THE GEN51 SCALE USED*/ ;kbend pchbend 0,2 /*ALTERNATIVELY IF USING VIRTUAL MIDI DEVICE OR A KEYBOARD WITH NO PITCH BEND WHEEL, USE CONTROLLERS 1 AND 2 TO MODULATE PITCH UP OR DOWN 1 STEP*/ kup ctrl7 1, 1, 0, 1 kdown ctrl7 1, 2, 0, -1 kbend = kup+kdown inum notnum kcps tablei inum+kbend, giEqTmp24 ;read cps values from GEN51, scale table using a combination of note played and pitch bend/controllers 1 and 2 a1 vco2 0.2, kcps, 4, 0.5 outs a1, a1 endin instr 2 ;score input instrument knum line p4, p3, p5 ;gliss using a straight line bewteen p4 and p5 for the entire note duration kcps tablei knum, giEqTmp24 ;read cps values from GEN51 scale table a1 vco2 0.2, kcps, 4, 0.5 outs a1, a1 endin </CsInstruments> <CsScore> f 0 3600 ;instr 2. Score input. Gliss from step number p4 to step number p5 ;p4 - starting note number ;p5 - ending note number i 2 0 2 60 61 i 2 + 2 70 58 i 2 + 2 66 66.5 i 2 + 2 71.25 71 e </CsScore> </CsoundSynthesizer>
Voici les diagrammes des formes d'onde des routines GEN51 utilisées
dans l'exemple :