GENfarey
Précédent | Instructions de partition et routines GEN | Suivant

## GENfarey

"farey" — Remplit une table avec la suite de Farey Fn d'ordre n.

## Description

Une suite de Farey Fn d'ordre n est une liste de fractions irréductibles comprises entre 0 et 1 et en ordre croissant. Leurs dénominateurs sont inférieurs ou égaux à n. Cela signifie qu'une fraction a/b appartient à Fn si 0 ≤ a ≤ b ≤ n. Le numérateur et le dénominateur de chaque fraction sont toujours premiers entre eux. 0 et 1 sont compris dans Fn sous la forme des fractions 0/1 et 1/1. Par exemple F5 = {0/1, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1/1}. Quelques propriétés des suites de Farey :

- Si a/b et c/d sont deux termes successifs de Fn, alors bc - ad = 1.
- Si a/b, c/d, e/f sont trois termes successifs de Fn, alors : c/d = (a+e) / (b+f). Dans ce cas, on dit que c/d est la fraction médiante entre a/b et e/f.
- Si n > 1, alors il n'existe pas de termes successifs de Fn ayant le même dénominateur.

La longueur de la suite de Farey Fn est déterminée par |Fn| = 1 + SOMMME sur n (phi(m)) où phi(m) est l'indicatrice d'Euler, qui donne le nombre d'entiers ≤ m premiers avec m.

Quelques valeurs de la longueur de Fn en fonction de n :

n | Fn
--- | ---
1 | 2
2 | 3
3 | 5
4 | 7
5 | 11
6 | 13
7 | 19
8 | 23
9 | 29
10 | 33
11 | 43
12 | 47
13 | 59
14 | 65
15 | 73
16 | 81
17 | 97
18 | 103
19 | 121
20 | 129

## Syntaxe

    f # time size "farey" fareynum mode

## Initialisation

size -- nombre de points dans la table. Doit être une puissance de 2 ou une puissance-de-2 plus 1 (voir l'instruction f).

fareynum -- l'entier n pour générer la suite de Farey Fn.

mode -- entier définissant le type de sortie à écrire dans la table :

- 0 -- nombres en virgule flottante représentant les éléments de Fn.

- 1 -- différences entre les éléments successifs de Fn ; utile pour générer des durées de note par exemple.

- 2 -- seulement les dénominateurs des rapports d'entiers ; utile comme indexation d'autres tables ou instruments par exemple.

- 3 -- comme le mode 2 mais normalisée. output.

- 4 -- comme le mode 0 mais avec 1 ajouté à chaque terme ; utile pour générer des tables pour les opcodes d'accordage, par exemple cps2pch.

## Exemples

    f1 0 -23 "farey" 8 0

Génère la suite de Farey F8. La table contient les 23 éléments de Fn en virgule flottante.

    f1 0 -18 "farey" 7 1

Génère la suite de Farey F7. La table contient les 18 différences entre les termes de F7, c'est-à-dire les différences ri+1 - ri, où r est le ième élément de Fn.

    f1 0 -43 "farey" 11 2

Génère la suite de Farey F11. La table contient les dénominateurs des 43 fractions de F11.

    f1 0 -43 "farey" 11 3

Génère la suite de Farey F11. La table contient les dénominateurs des 43 fractions de F11, chacun de ceux-ci étant divisé par 11, c'est_à_dire normalisé.

    f1 0 -18 "farey" 7 4

Génère la suite de Farey F7. La table contient les fractions de F7 comme dans le mode 0, mais la durée '1' est ajouté à chaque élément de la table.

Exemple 1163. Un exemple simple de la routine GENfarey.

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>

    </CsOptions>
    <CsInstruments>

    sr=44100
    ksmps=10
    nchnls=1

    instr 4
          kndx init 0 ; read out elements of F_8 one by one and print to file
          if (kndx < 23) then
          	 kelem tab kndx, 1
          	 fprintks "farey8table.txt", "%2.6f\\n", kelem
          	 kndx = kndx+1
          endif
    endin
    </CsInstruments>
    <CsScore>
    ; initialise integer for Farey Sequence F_8
    f1 0 -23 "farey" 8 0
          ; if mode=0 then the table stores all elements of the Farey Sequence
          ; as fractions in the range [0,1]
    i4	0     1
    e
    </CsScore>
    </CsoundSynthesizer>

Voici un exemple complet de la routine GENfarey. Il utilise le fichier genfarey-2.csd.

Exemple 1164. Un autre exemple de la routine GENfarey.

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
    -odac     ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc for RT audio input as well
    ; For Non-realtime ouput leave only the line below:
    ; -o genfarey.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>
    sr = 44100
    ksmps = 32
    nchnls = 2
    0dbfs  = 1

    ; GENfarey creates table gidelta.
    ; The table contains the delta values of Farey Sequence 7 (p5=7).
    ; They are used as Inter Onset Intervals (IOIs) or event durations.
    ; If p6 is set to 1 for IOI output then the length of the table (p3=-18) is -(|F_7| - 1)
    ; Remember that a negative sign is for non-power-of-2 table lengths.
    ; The negative sign in front of the GEN number prevents post-normalisation of its values.

    gidelta ftgen 0,0,-18,"farey",7,1

    ; Use GENfarey with p6 set to 2 to generate the denominators of fractions of F_7
    ; this is used in this example as factors to create a series of pitches:
    gimult ftgen 0,0,-18,"farey",7,2

    ;-------- loop and trigger instrument 901 using a Farey Sequence polyrhythm
    	  instr 1
    kindx init 0
    kindx2 init 0
    ktrigger init 0
    ktime_unit init p6
    kstart init p4
    kloop init p5
    kinitndx init 0
    kfn_times init gidelta
    knote init 60
    kbasenote init p8
    ifundam init p7
    ktrigger seqtime ktime_unit, kstart, kloop, kinitndx, kfn_times
      if (ktrigger > 0 ) then
         kpitch = cpspch(ifundam)
         kmult tab kindx2, gimult
         kpitch = kpitch * kmult
         knote = kbasenote + kmult
         event "i", 901,   0,   .4, .10, kpitch, kpitch * .9, 0.4,  5,   .75, .8,  1.0, .15, .0,  .125, .125, .25, .5,  1.0, .0, .0,  .0,  .0,  .125, .25, .25, .25, knote
         kindx = kindx + 1
         kindx = kindx % kloop
         kindx2 = kindx2 + 1
         kindx2 = kindx2 % kloop
      endif
    endin

    ;------ basic 2 Operators FM algorithm ----------------
    	instr 901
    inotedur	=		p3
    imaxamp		=		p4 ;ampdb(p4)
    icarrfreq	=		p5
    imodfreq	=		p6
    ilowndx		=		p7
    indxdiff	=		p8-p7
    knote	        =		p27
    aampenv		linseg	p9, p14*p3, p10, p15*p3, p11, p16*p3, p12, p17*p3, p13
    adevenv		linseg	p18, p23*p3, p19, p24*p3, p20, p25*p3, p21, p26*p3, p22
    amodosc		oscili	(ilowndx+indxdiff*adevenv)*imodfreq, imodfreq, 10
    acarosc		oscili	imaxamp*aampenv, icarrfreq+amodosc, 10
    		outs		acarosc, acarosc
    endin
    </CsInstruments>
    <CsScore>
    f10 0 4096 10 1	;sine wave
    ; p4 kstart  := index offset into the Farey Sequence
    ; p5 kloop   := end index into Farey Seq.
    ; p6 timefac := time in seconds for one loop to complete
    ; p7 fundam  := fundamental of the FM instrument
    ; p8 basenote:= root pitch of the midi voice output
    ; note that pitch structures of the midi file output are not equivalent to the
    ; ones used for the FM real-time synthesis.

    ;	start		dur		kstart	kloop   timefac	fundam. basenote
    i1	0.0		44		0 	18	2	6.05	60
    i1	4		30		0 	18	3	7.05	72
    i1	34		12		9 	18	3	7.05	72
    i1	10		12		0 	18	1.5	8	84
    i1	22		12		0 	9	1.5	8	84
    i1	15		16		0	18	1	5	48
    i1	22		20		5	17	1.7	4	36

    i1	46		20		3 	11	2.5	7.04	71
    i1	51		20		5 	13	2.5	7.06	72

    i1	73.5		1.5		11	18	1.5	5.05	48
    i1	75		1		12	18	1	6.03	58
    e
    </CsScore>
    </CsoundSynthesizer>

Voici les diagrammes des formes d'onde de la routine GENfarey utilisées dans l'exemple :

gidelta ftgen 100, 0, -18, "farey", 7, 1 - valeurs delta de la suite de Farey 7

gimult ftgen 101, 0, -18, "farey", 7, 2 - génère les dénominateurs des fractions de F_7

## Crédits

Auteur : Georg Boenn
Université de Glamorgan
2010

Nouveau dans la version 5.13 de Csound

Précédent | Niveau supérieur | Suivant
GENsone | Sommaire | GENwave