g/l💖a:~🌈 cat hackfort25

GNU/Linux Loves All

Hackfort 25

GNU/Linux Loves All is a project that makes microtonal music accessible through FLO software. Microtonal means anything beyond 12edo (standard tuning). Through microtonality, we can access the harmonic series and everything in between two notes. FLO stands for Free/Libre/Open. It means anything that respects and supports our Human Tech Rights. We can use FLO technology to be free to access the harmonic series and everything in between.

Videos

Ode to Creative Commons

Downminor Nocturne

Tiny Steps on Kite guitar

Gymnopedie intro

A upminor Progression

About FLO Software

What is FLO Software?

FLO Software or Free Software is software that respects and supports a user's freedoms and Human Tech Rights. Free Software is different than freeware, which is typically proprietary software that is gradis but not free as in freedom. Proprietary freeware, as opposed to Free Software, still comes with a price. That price is your Human Tech Rights.

What are our Human Tech Rights?

Every human has a right to
- privacy
- security
- repair
- internet
- education
- speech

Human Tech Rights and music technology should not be mutually exclusive

We can use GNU/Linux, the greatest operating system of all time, to make great music

What does it have to do with our human tech rights?

Proprietary operating systems like Windows, MacOS (and iOS), default Android, and ChromeOS are built in such a way to ignore and exploit our Human Tech Rights. While Human Tech Rights might initially be considered a trade-off for functionality, disrespecting our Human Tech Rights actually gets in the way of functionality. We don't know when our Windows computers will automatically update right before a performance and make everybody wait. We are frustrated with our iPhone battery life and are holding out to buy a new one. We are fearful of updating our Mac that we use only for music recording and don't really want to spend way too much money on a computer that doesn't last. We don't like the fact that we can't delete certain apps from our genuine Android phones. We don't quite understand why all of these devices are running slower than they used to. We wonder why we are constantly going through phones and computers and why they don't get repaired. We get confused when we see audio gear made over half a century ago that still works and goes for such a high price. We wonder what makes our laptops different.

What is GNU/Linux and what makes it the greatest operating system of all time?

GNU/Linux is a FLO (Free/Libre/Open) operating system. It is FLO software licensed under the GNU General Public License, the greatest FLO software license of all time. GNU/Linux out-paces proprietary alternatives in freedom, price, and functionality.

Are you looking for a new laptop?

You can purchase affordable, 2nd-life, GNU/Linux laptops from Free Geek, a 501c3 on the good side of technology.

Live Performance Schedule

GLLA 03/28/25   1:00 pm   Hackfort
!mindparade  Fri night-Sat  1:00 am Neurolux
!mindparade 03/30/25 6:20 pm Kin
!mindparade 04/07/25 John Henry's
!mindparade 04/16/25 Lollipop Shoppe
GLLA 04/19/25 6:00 pm Green Anchors
GLLA 04/26/25 1:00 pm Linuxfest NW
!mindparade 05/01/25 Swan Dive
!mindparade 05/29/25 Connor Byrne
GLLA 06/21/25 Teardown
!mindparade 06/28/25 Homie Fest

Skip-fretting

kite-tuning

Matthew Autry discovered skip-fretting more than a decade ago. It is a microtonal guitar fretting that allows you to play in larger edos such as 41edo and 72edo. Every fret is a multiple of edosteps. Matthew has made instruments in 41, 53, 65, 72, 87, 118, 130, and 183 edo. Skip-fretting is a revolutionary music technology which is FLO and not patented.

What is a Kite guitar?

A Kite guitar is a guitar with a skip-fretting Kite Giedraitis discovered in 2019. It is a 41edo skip-fretted guitar from 20.5edo fretting. Each fret is 2 edosteps. This layout makes 7-limit harmony easy to explore. 7-limit serves as a gateway to higher prime limits and other edos. Kite-tuning is FLO and not patented.

Xenedoji

Xenedoji is a python library I wrote to translate between note names, cents, and hertz. I use it to calculate midi pitchbend messages. Xenedoji is FLO software licensed under GNU General Public License v3.

Why?

12edo (standard tuning) cannot accurately match the harmonics. It is also just one of other edos. MIDI is easy to get notes in 12edo and difficult to get other notes out. The purpose of xenedoji is to make the harmonic series and other tunings easy to explore. The name comes from three words of microtonality:

- xen: xenharmonic
- edo: equal division of the octave
- ji: Just Intonation

Download

here

Getting sound

- Download Surge synth
- Start the jack server and make sure Surge is using jack instead of ALSA. This is found under Options > Audio/MIDI Settings...
- Make sure you select the MPE box under "Status"
- Open a shell. Change directories (cd) to the folder where xenedoji is downloaded to. Run python3 to open the interactive shell.

~🌈 cd path/to/xenedoji
~/path/to/xenedoji🌈 python3
>>> from literals import *

- This will create a midi port called xenedoji. Make sure it is selected in Surge under Options > Audio/MIDI Settings... > Active MIDI inputs:
- go back to the shell and run

>>> play([4, 5, 6])
>>> play([4], [5], [6])

A major triad is found in the harmonic series from harmonics 4:5:6. A minor triad is found in the harmonic series from harmonics 10:12:15.

>>> play([4, 5, 6]) # simple major melody
>>> play([4], [5], [6]) # harmony
>>> play([10, 12, 15]) # simple minor melody
>>> play([10], [12], [15]) # harmony

For both the major and minor triad from the harmonic series, the highest prime factors of each of the harmonic numbers is 5.

>>> factor(4); factor(5); factor(6)
[2, 2]
[5]
[2, 3]
>>> factor(10); factor(12); factor(15)
[2, 5]
[2, 2, 3]
[3, 5]

Compared to the minor triad at 10:12:15, there is another minor triad in the harmonic series with even smaller numbers. This is at 6:7:9. While numbers are smaller, the highest prime factor is now 7.

>>> play([6, 7, 9])
>>> play([6], [7], [9])
>>> factor(6); factor(7); factor(9)
[2, 3]
[7]
[3, 3]

The harmonic series

>>> play([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15])
>>> xmd.bpm(120)
>>> play([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])

Minor(-ish) 3rds of primes 3, 5, 7, 11, 13, 17, 19

12edo is a different way of tuning. 12edo is a significantly younger method of categorizing possible intervals. It developed gradually over time. While 12edo is fine technology, it has trade-offs. It cannot distinguish between primes 3, 5, 7, 11. This means that instead of getting a choice between 32/27, 6/5, 7/6, and 11/9, you only have one choice: 3 edosteps of 12edo.

xmd.bpm(45)
for ratio in [x32/27, x6/5, x7/6, x11/9, x13/11, x17/14, x19/16]:
    print("%d/%d" % (ratio.numerator, ratio.denominator))
    play([ratio.numerator, ratio.denominator])
    xmd.rest()
    play([ratio.numerator], [ratio.denominator])
    for num in [ratio.numerator, ratio.denominator]:
        print("The prime factors of {} are {} ".format(num, factor(num)))
    print("The highest prime number is {}".format(max(factor(ratio.numerator) + factor(ratio.denominator))))
    xmd.rest(4)
    print()

Notice the x in front of the ratios. Xenedoji uses this as a shorthand to keep track of rational ratios.

>>> 3/2; 1/3 # normal python
1.5
0.3333333333333333
>>> x3/2; x1/3 # returns readable rational ratios
3/2
1/3
>>> x4//12 # // operator substitutes for the unavailable backslash operator
400c
>>> play([x4//12, x0//12]) # 12edo 2 note melody
>>> play(
    [x4//12],
    [x0//12],
) # 12edo 2 voice harmony

Now let's try with the reverb turned up. Just like the piano sustain pedal, this turns monophonic pitches into polyphony.

xmd.bpm(120)
for i in range(2):
    for ratio in [x32/27, x6/5, x7/6, x11/9, x13/11, x17/14, x19/16]:
        play([ratio.numerator, ratio.denominator])
    xmd.rest(6)
    play([1, 2, 3, 4, 5])
    xmd.rest(3)

Harmonic series in an edo

Edo ratios can be described with a backslash. 3\12 means 3 edosteps of 12edo. Xenedoji uses the // operator in place of the backslash.

>>> x7//12 # 7\\12
700c
>>> 700*c # 700 cents
700c
>>> A4 + x7//12
E5
>>> A4 + 700*c
E5
>>> A4 * 2\*\*(7/12)
E5
>>> A4 * 3/2
E5 +1.96c

12edo is a different way of tuning. 12edo is a significantly younger method of categorizing possible intervals. It developed gradually over time. While 12edo is fine technology, it has trade-offs. It cannot distinquish between primes 3, 5, 7, 11, 13, 17, 19. This means that instead of getting a choice between 32/27, 6/5, 7/6, 11/9, 13/11, 17/14, 19/16, you only have one choice: 3 edosteps of 12edo.

Let's now add our familiar 12edo minor 3rd and listen to each of these compared to the same lower note.

xmd.bpm(60)
xmd.reference\_pitch = A4
for ratio in [x32/27, x6/5, x7/6, x11/9, x13/11, x17/14, x19/16, x3//12]:
    play([ratio, x1/1])
    xmd.rest()
    play([ratio], [x1/1])
    xmd.rest(2)

Use closest number of edosteps

>>> harmonic_series_12edosteps = [0, 12, 19, 24, 28, 31, 34, 36, 38, 40, 42, 43, 44, 46, 47, 48]
>>> [xf(edosteps)//12 for edosteps in harmonic_series_12edosteps] # backslash ratio
[0c, 1200c, 1900c, 2400c, 2800c, 3100c, 3400c, 3600c, 3800c, 4000c, 4200c, 4300c, 4400c, 4600c, 4700c, 4800c]
>>> harmonic_series_12edo = [xf(edosteps)//12 for edosteps in harmonic_series_12edosteps]

Convert to 72edo

>>> [edosteps * 6 for edosteps in harmonic_series_12edosteps]
[0, 72, 114, 144, 168, 186, 204, 216, 228, 240, 252, 258, 264, 276, 282, 288]
>>> [
... 0,          # har1
... 72,         # har2
... 114,        # har3
... 144,        # har4
... 168 - 1,    # har5  = -1\72
... 186,        # har6
... 204 - 2,    # har7  = -2\72
... 216,        # har8
... 228,        # har9
... 240 - 1,    # har10 = -1\72
... 252,        # har11 = -3\72
... 258,        # har12
... 264,        # har13 = +4\72
... 276,        # har14 = -2\72
... 282,        # har15 = -1\72
... 288,        # har16
... ]
>>> # In one line
>>> harmonic_series_72edosteps = [0, 72, 114, 144, 168 - 1, 186, 204 - 2, 216, 228, 240 - 1, 252 - 3, 258, 264 + 4, 276 - 2, 282 - 1, 288]
>>> harmonic_series_72edo = [xf(edosteps)//72 for edosteps in harmonic_series_72edosteps]

Now use cents (same as 1200edo)

>>> harmonic_series_1200edosteps = [0, 1200, 1902, 2400, 2786, 3102, 3369, 3600, 3804, 3986, 4151, 4302, 4441, 4569, 4688, 4800]
>>> # 3 different ways to say the same thing
>>> [xf(edostep) // 1200 for edostep in harmonic_series_1200edosteps] # backslash ratio
>>> [2**(edostep / 1200) for edostep in harmonic_series_1200edosteps] # convert to irrational forward slash ratio
>>> [edostep * c for edostep in harmonic_series_1200edosteps] # use cents
>>> harmonic_series_1200edo = _

Compare the harmonic series in 12edo, 72edo, and 1200edo

>>> play(harmonic_series_12edo)
>>> play(harmonic_series_72edo)
>>> play(harmonic_series_1200edo)

Does this seem complicated? How can we make this simpler?

We can leave the edo and go back to the harmonic series itself.

>>> play([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])

Play a score of ratios

Xenedoji can play a score of ratios. Here are some 4-part scores.

xmd.reference_pitch = D4
xmd.bpm(30)
play( 
[15/8, 9/5, 7/4, 9/5, 15/8, 27/14, 2/1,  9/4 ], 
[ 3/2, 3/2, 3/2, 3/2,  3/2,  3/2 , 3/2,  3/2 ], 
[ 9/8, 6/5, 5/4, 6/5,  9/8, 15/14, 1/1, 15/16], 
[ 3/4, 3/5, 1/2, 3/5,  3/4,  3/7 , 5/8,  3/8 ], 
)
xmd.reference_pitch = A4
play(  
[160/81, 50/27,  5/3, 5/3, 5/3, 15/8 , 2/1, 15/8 , 2/1],
[ 40/27, 40/27,  4/3, 3/2, 3/2,  3/2 , 5/3, 25/16, 3/2],
[100/81, 35/27, 10/9, 4/3, 5/4, 21/16, 4/3,  5/4 , 5/4],
[ 10/9 , 10/9 ,  1/1, 1/1, 1/1,  9/8 , 5/4,  1/1 , 9/8], 
)

How to play the harmonic series on instruments

The easiest way to play the harmonic series on any given instrument is to play a single note. A single note makes a chord of harmonics. Playing the harmonics as separate notes takes some more work. This is because for the past half-millennia, standard Western instruments and practice shifted their to focus to notes of 12edo rather than the harmonic series. Limiting ourselves to 12edo means that we lose access to the harmonic series. Accessing the harmonic series takes certain instruments or playing technique outside of the relatively more recent Western tradition.

Standard guitar

guitar open tuning 5-limit.mp3

A standard guitar can have it's open strings tuned to match harmonics. You can see guitarists, bassists, and violinists tune by matching harmonic 3. While piano tuners cannot get away with this, these string instruments manage to get by because the chain of 3/2 ratios is relatively small and 12edo has such a close 3/2. You don't see a violinist tune their E string to a viola or cello C string. You also don't see guitarists tune their B string directly to their G string. This is because they would be driven to a flatter Major 3rd. This is due to a discrepancy between two different Major 3rds: 81/64 and 5/4. 4 steps of 12edo is in between these two pitches. By choosing 5/4 instead of the more common 81/64 or 4\12, we can experience experience harmonic 5 more cleanly. This is the same thing as actually tuning the B string to the G string.

Let's listen to a guitar that uses 5/4 instead of 81/64.

Let's see those notes on the computer.

guitar_open = xf("4:5:6:9:12:15")/4
xmd.reference_pitch = F3
xmd.delta(.33)
play(Melody(guitar_open * 2))
play(Melody(guitar_open * 3/2))
play(Melody(guitar_open))

Since these open strings use harmonics 5 and 15, those strings will be flat compared to 12edo. This makes those strings in tune with the harmonics of the strings.

What about the frets?

The above example uses a standard guitar with the open strings tuned harmonically. While this can get a guitarist started, it is also helpful to work with un12 instruments to explore microtonality. Instruments can still have some of the familiar notes of 12edo alongside microtonal notes. Here are some examples of microtonal instruments:

- a guitar with frets in different places
- a standard 12tone keyboard in a different tuning
- a different keyboard layout with more notes
- a violin playing microtones

Microtonal guitar

Kite guitar is a 41edo guitar. By using 41edo, it has 7 flavors of 3rds rather than only Major and minor.

xmd.reference_pitch = B3 - 42*c
xmd.delta(4)
play(
[9/4, 12/5 , 81/35,  9/4, 27/10],
[9/5,  9/5 ,  9/5 , 15/8, 12/5 ],
[3/2, 36/25, 54/35,  1/1,  9/4 ],
[6/5,  6/5 ,  9/7 ,  5/4,  9/5 ],
[1/1, 24/25, 36/35,  1/1,  3/4 ],
)

kite guitar chords.mp3

Launchpad

I didn't bring a Kite guitar with me, but I have the Kite tuning layout here on a Launchpad X. Notes are tuned with xenedoji.

launchpadx

kite-tuning

Standard piano

standard piano tuned to frequency ratios.mp3

A standard piano can be tuned to frequency ratios.


      2/1   C      
     15/8  vB   5/ 
      9/5  ^Bb  /5 
      5/3  vA   5/ 
      8/5  ^Ab  /5 
      3/2   G      
     64/45 ^Gb  /5 
      4/3   F      
      5/4  vE   5/ 
      6/5  ^Eb  /5 
      9/8   D      
     16/15 ^Db  /5 
      1/1   C      

Let's see the ratios from 16/15 ^Db. Let's divide each ratio by 16/15. 25/16 is close to 14/9. We can substitute some more complex ratios for simpler ones by tempering 225/224. This means we can get 7/ notes from 25/.

>>> from_16_15 = [x16/15, x9/8, x6/5, x5/4, x4/3, x64/54, x3/2, x8/5, x5/3, x9/5, x15/8, x2/1]
>>> [ratio/(x16/15) for ratio in from_16_15]
[1/1, 135/128, 9/8, 75/64, 5/4, 10/9, 45/32, 3/2, 25/16, 27/16, 225/128, 15/8]
>>> x75/64 * 224/225
7/6
>>> x25/16 * 224/225
14/9
>>> x225/128 * 224/225
7/4

       2/1   ^Db     
      15/8    C   5/ 
       7/4   vB   7/ 
      27/16  ^Bb     
      14/9   vA   7/ 
       3/2   ^Ab     
      45/32   G   5/ 
      10/9   ^Gb     
       5/4    F   5/ 
       7/6   vE   7/ 
       9/8   ^Eb     
     135/128  D   5/ 
       1/1   ^Db     

GA_piano_chords

GA_piano_b_chords

Mosaichord

Ode to Creative Commons on mosaichord

ratio-synth

A mosaichord defaults to harmonic tuning. The notes are ratios that are printed on the keys. The synth works by sending midi messages to an MPE compatible synth.

Violin

5-string-violin-41edo

Do Re Mi

Microtonal means tuning in a way that deviates from standard tuning (12edo). Though 12edo is a great technology, a tone by itself does not conform to this system. A tone makes harmonics which are integer frequency multiples of the fundamental. Standard tuners are not set up to show these harmonics. All sound and music beyond a single sine wave is in fact microtonal. In the harmonic series, Do Re Mi most simply corresponds to 1/1, 9/8, 5/4. These ratios can be expanded to 8/8, 9/8, 10/8.

There are many different ways Do Re Mi can be tuned. Here are the simplest and most common ways to tune Do Re Mi. The notes are given as frequency ratios relative to Do.


tuning Do Re Mi
standard 2**(0/12)    2**(2/12)    2**(4/12)
Ptolemaic 8/8 9/8 10/9
Pythagorean    64/63 72/64 81/64
reduced Do Re Mi
standard 1/1 2**(1/6) 2**(1/3)
Ptolemaic 1/1 9/8 5/4
Pythagorean    1/1 9/8 81/64

Harmonics to Standard Tuning with Cents Deviation

>>> from xenedoji import *
>>> A2 = Pitch('A2')
>>> A2 * 2
A3
>>> A2 * 3
E4 +1.96c
>>> A2 * 4
A4
>>> A2 * 5
C#5 -13.69c
>>> A2 * 6
E5 +1.96c
>>> A2 * 7
G5 -31.17c
>>> A2 * 8
A5

Same thing with Hertz

>>> Pitch(Hz(110))
A2
>>> Pitch(Hz(220))
A3
>>> Pitch(Hz(330))
E4 +1.96c
>>> Pitch(Hz(440))
A4
>>> Pitch(Hz(550))
C#5 -13.69c
>>> Pitch(Hz(660))
E5 +1.96c
>>> Pitch(Hz(770))
G5 -31.17c
>>> Pitch(Hz(880))
A5


simple Hertz verses simple 12edo

simple Hz   12edo
110 A2
220 A3
330 E4  + 2c
440 A4
550 C#5 -14c
660 E5  + 2c
770 G5  -31c
880 A5
990 B5  + 4c
1100 C#6 -14c
1210 D#6 -49c
1320     E6  + 2c

Hertz       simple 12edo
110 A2
220 A3
329.63 E4
440 A4
554.37 C#5
659.26 E5
783.99 G5
880 A5
987.77 B5
1108.73 C#6
1244.51 D#6
1318.51   E6

What benefits can we find from 41edo?

41edo is the smallest edo after 12 to improve on the errors of each of the first 16 harmonics. It has enough notes to distinquish between intervals that are tuned by primes 3, 5, 7, and 11. 12edo has 2 different 3rds, one major and one minor. 41edo has 7 3rds.

12edo Harmonic Errors
2  +0.0
3  -2.0
5  +13.7
7  +31.2
11 +48.7
13 -40.5
17 -5.0
19 +2.5

41edo Harmonic Errors
2  +0.0
3  +0.5
5  -5.8
7  -3.0
11 +4.8
13 +8.3
17 +12.1
19 -4.8

41edo 3rds
vm3,  7/6,  highest prime: 7/  over
 m3, 32/27, highest prime: /3  under
^m3,  6/5,  highest prime: /5  under
~3,  11/9,  highest prime: 11/ over
vM3,  5/4,  highest prime: 5/  over
 M3, 81/64, highest prime: 3/  over
^M3,  9/7,  highest prime: /7  under


We should not be trapped by non-free software tools just to experience notes that are decades, centuries, or millennia old. We do not need non-free software to experience notes that are not from Western music tradition. We do not need to give up our Human Tech Rights just to use music technology at all.

FLO Computer Music Tools

type of gear FLO software
laptop OS GNU/Linux
synthesizer Surge
distortion Guitarix
delay/looper SooperLooper
DAW Ardour
score editor   musescore.org

Source Code

Here is a link to a zip of my original source code I used today. This is a work in progress and not yet well documented. I am still developing these tools to make them more accessible to all, especially the average non-technical person.

License

This music is Free Software. Anyone can be free to do what they want with it as long as they are promoting freedom and not restricting the freedom of others.


FLO software is the future of democracy

Together, we can liberate technology

GNU/Linux Loves All



g/l💖a:~🌈