fareyleni — returns the length of a Farey Sequence.
This opcode can be used in conjunction with GENfarey It calculates the length of Farey Sequence Fn. Its length is given by: |Fn| = 1 + SUM over n phi(m) where phi(m) is Euler's totient function, which gives the number of integers ≤ m that are coprime to m.
Some values for the length of Fn given 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 |
The length of the identified Farey sequence is returned.
ifn -- Integer identifying the sequence.
Here is an example of the fareyleni opcode. Play fareyleni.csd
Example 293. Example of the fareyleni opcode.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<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 fareyleni.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ; initialise integer n for Farey Sequence F_8 gifarn init 8 ; calculate length of F_8, it should return 23 for |F_8| gires fareyleni gifarn ; convert to negative number for the GEN routine because ; the table length won't be a power of 2 ; (The length of a Farey Sequence of n > 1 is always an odd number) gilen init gires * -1 ; create F_8 with GENfarey, the negative table number prevents ; unnecessary normalisation (F_8 IS already normalised) ; n mode: gifarey ftgen 100, 0, gilen, "farey", gifarn, 4 ; if mode=4 then 1 is added to each element of F_n. ; Useful for creating just tuning tables that can be read by the cps2pch opcode. instr 1 ; the very last element of F_n is not needed in the case of tuning tables ires = gires - 1 ; read out and print to file kndx init 0 if (kndx < ires) then kelem tab kndx, gifarey fprintks "farey8_tuning.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin instr 2 ip cps2pch p4, -100 asig poscil .5, ip, 1 aenv linseg 0, 0.1, 1, p3-0.2, 1, 0.1, 0 outs asig * aenv, asig * aenv endin </CsInstruments> <CsScore> f1 0 8192 10 1 ;sine wave i1 0 .1 i2 1 .5 8.00 i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + . > i2 + 1 8.22 e </CsScore> </CsoundSynthesizer>