Git Product home page Git Product logo

fingerboard's Introduction

fingerboard

CI Status Coverage Status

This project is meant to help me reason about and build a "microtonal geography of the cello fingerboard".

What's in the repo?

The repo implements the tools necessary to model microtonal geography systems based on various scales. As we go over some specific pythagorean, just and tempered scales and double stops, some specific notations are introduced for each of the fingerboard locations required to play each note. Then, we can reason about and exhibit various facts involving these positions, while being able to verify these facts programmatically, and display them with various format.

An example extracted from file systems/cello/just/scales.ml displaying the names of the positions involved in playing the E Major Just Scale on a cello tuned in perfect fifth:

((IV ((E2 M3p) (F#2 A4p)))
 (III ((G#2 A1z) (A2 M2p) (B2 M3p) (C#3 A4z)))
 (II ((D#3 A1z) (E3 M2p) (F#3 M3p) (G#3 A4z)))
  (I
  ((A3 0) (B3 M2p) (C#4 M3z) (D#4 A4z) (E4 5p) (F#4 M6p) (G#4 M7z) (A4 0-1)
   (B4 M2p-1) (C#5 M3z-1) (D#5 A4z-1) (E5 5p-1) (F#5 M6p-1) (G#5 M7z-1)
   (A5 0-2) (B5 M2p-2) (C#6 M3z-2) (D#6 A4z-2) (E6 5p-2))))

Another example from file systems/cello/e53/scales.ml explores the difference between the scales of D Flat Major Pythagorean and its Just counterpart, approximated in a 53 edo system mapped onto the cello fingerboard.

D Flat Major Pythagorean in a 53 edo system:

((IV ((Db2 A1z-e53) (Eb2 m3p-e53) (F2 4p-e53) (Gb2 A4z-e53)))
 (III ((Ab2 A1z-e53) (Bb2 m3p-e53) (C3 4p-e53) (Db3 A4z-e53)))
 (II ((Eb3 A1z-e53) (F3 m3p-e53) (Gb3 M3z-e53) (Ab3 A4z-e53)))
 (I
  ((Bb3 A1z-e53) (C4 m3p-e53) (Db4 M3z-e53) (Eb4 A4z-e53) (F4 m6p-e53)
   (Gb4 M6z-e53) (Ab4 M7z-e53) (Bb4 A1z-e53-1) (C5 m3p-e53-1) (Db5 M3z-e53-1)
   (Eb5 A4z-e53-1) (F5 m6p-e53-1) (Gb5 M6z-e53-1) (Ab5 M7z-e53-1)
   (Bb5 A1z-e53-2) (C6 m3p-e53-2) (Db6 M3z-e53-2) (Eb6 A4z-e53-2)
   (F6 m6p-e53-2))))

D Flat Major Just in the same 53 edo system:

((IV ((Db2 m2z-e53) (Eb2 m3z-e53) (F2 4p-e53) (Gb2 d5z-e53)))
 (III ((Ab2 m2z-e53) (Bb2 m3p-e53) (C3 4p-e53) (Db3 d5z-e53)))
 (II ((Eb3 m2z-e53) (F3 m3p-e53) (Gb3 M3p-e53) (Ab3 d5z-e53)))
 (I
  ((Bb3 A1z-e53) (C4 m3p-e53) (Db4 M3p-e53) (Eb4 d5z-e53) (F4 m6p-e53)
   (Gb4 M6p-e53) (Ab4 M7p-e53) (Bb4 A1z-e53-1) (C5 m3p-e53-1) (Db5 M3p-e53-1)
   (Eb5 d5z-e53-1) (F5 m6p-e53-1) (Gb5 M6p-e53-1) (Ab5 M7p-e53-1)
   (Bb5 A1z-e53-2) (C6 m3p-e53-2) (Db6 M3p-e53-2) (Eb6 d5z-e53-2)
   (F6 m6p-e53-2))))

Example of positions and intervals in the E flat Major double stops scale in thirds from systems/cello/just/thirds.ml:

┌─────┬────────┬───────┬───────┬──────┬────────┬───────┬───────┬──────────────────┬───────┐
│ Low │ String │ Pos   │ Cents │ High │ String │ Pos   │ Cents │ Interval         │ Cents │
├─────┼────────┼───────┼───────┼──────┼────────┼───────┼───────┼──────────────────┼───────┤
│ Eb2 │ IV     │ m3z   │ 316   │ G2   │ III    │ 0     │ 0     │ M3 - 5 / 2^2     │ 386   │
│ F2  │ IV     │ 4p    │ 498   │ Ab2  │ III    │ m2z   │ 112   │ m3 - (2 * 3) / 5 │ 316   │
│ G2  │ IV     │ 5p    │ 702   │ Bb2  │ III    │ m3z   │ 316   │ m3 - (2 * 3) / 5 │ 316   │
│ Ab2 │ IV     │ m6z   │ 814   │ C3   │ III    │ 4p    │ 498   │ M3 - 5 / 2^2     │ 386   │
│ Bb2 │ III    │ m3z   │ 316   │ D3   │ II     │ 0     │ 0     │ M3 - 5 / 2^2     │ 386   │
│ C3  │ III    │ 4p    │ 498   │ Eb3  │ II     │ m2z   │ 112   │ m3 - (2 * 3) / 5 │ 316   │
│ D3  │ III    │ 5p    │ 702   │ F3   │ II     │ m3z   │ 316   │ m3 - (2 * 3) / 5 │ 316   │
│ Eb3 │ III    │ m6z   │ 814   │ G3   │ II     │ 4p    │ 498   │ M3 - 5 / 2^2     │ 386   │
│ G3  │ II     │ 4p    │ 498   │ Bb3  │ I      │ m2z   │ 112   │ m3 - (2 * 3) / 5 │ 316   │
│ Ab3 │ II     │ d5z   │ 610   │ C4   │ I      │ m3p   │ 294   │ M3 - 5 / 2^2     │ 386   │
│ Bb3 │ II     │ m6z   │ 814   │ D4   │ I      │ 4p    │ 498   │ M3 - 5 / 2^2     │ 386   │
│ C4  │ II     │ m7p   │ 996   │ Eb4  │ I      │ d5z   │ 610   │ m3 - (2 * 3) / 5 │ 316   │
│ D4  │ II     │ 0-1   │ 1200  │ F4   │ I      │ m6z   │ 814   │ m3 - (2 * 3) / 5 │ 316   │
│ Eb4 │ II     │ m2z-1 │ 1312  │ G4   │ I      │ m7p   │ 996   │ M3 - 5 / 2^2     │ 386   │
│ F4  │ II     │ m3p-1 │ 1494  │ Ab4  │ I      │ d8z   │ 1108  │ m3 - (2 * 3) / 5 │ 316   │
│ G4  │ II     │ 4p-1  │ 1698  │ Bb4  │ I      │ m2z-1 │ 1312  │ m3 - (2 * 3) / 5 │ 316   │
│ Ab4 │ II     │ d5z-1 │ 1810  │ C5   │ I      │ m3p-1 │ 1494  │ M3 - 5 / 2^2     │ 386   │
│ Bb4 │ II     │ m6z-1 │ 2014  │ D5   │ I      │ 4p-1  │ 1698  │ M3 - 5 / 2^2     │ 386   │
│ C5  │ II     │ m7p-1 │ 2196  │ Eb5  │ I      │ d5z-1 │ 1810  │ m3 - (2 * 3) / 5 │ 316   │
│ D5  │ II     │ 0-2   │ 2400  │ F5   │ I      │ m6z-1 │ 2014  │ m3 - (2 * 3) / 5 │ 316   │
│ Eb5 │ II     │ m2z-2 │ 2512  │ G5   │ I      │ m7p-1 │ 2196  │ M3 - 5 / 2^2     │ 386   │
│ F5  │ II     │ m3p-2 │ 2694  │ Ab5  │ I      │ d8z-1 │ 2308  │ m3 - (2 * 3) / 5 │ 316   │
│ G5  │ II     │ 4p-2  │ 2898  │ Bb5  │ I      │ m2z-2 │ 2512  │ m3 - (2 * 3) / 5 │ 316   │
│ Ab5 │ II     │ d5z-2 │ 3010  │ C6   │ I      │ m3p-2 │ 2694  │ M3 - 5 / 2^2     │ 386   │
│ Bb5 │ II     │ m6z-2 │ 3214  │ D6   │ I      │ 4p-2  │ 2898  │ M3 - 5 / 2^2     │ 386   │
│ C6  │ II     │ m7p-2 │ 3396  │ Eb6  │ I      │ d5z-2 │ 3010  │ m3 - (2 * 3) / 5 │ 316   │
└─────┴────────┴───────┴───────┴──────┴────────┴───────┴───────┴──────────────────┴───────┘

Code documentation

The code documentation of the latest release is built with odoc and published to GitHub pages here.

fingerboard's People

Contributors

mbarbin avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

fingerboard's Issues

Adjust degree IV in C major just edo 53 scale in third

As seen in systems/cello/e53/thirds.ml, the interval of the minor third shown below is 13-53edo. I intend for it to be adjusted to 14-53edo like the rest of the minor thirds in this table. This would be by making use of one of the Zarlinean combination with the changing degree on the F (degree IV) : specifically by adjusting the F3 to m3z-e53.

┌─────┬────────┬───────────┬───────┬──────┬────────┬───────────┬───────┬───────────────┬───────┐
│ Low │ String │ Pos       │ Cents │ High │ String │ Pos       │ Cents │ Interval      │ Cents │    
├─────┼────────┼───────────┼───────┼──────┼────────┼───────────┼───────┼───────────────┼───────┤
│ D3  │ III    │ 5p-e53    │ 702   │ F3   │ II     │ m3p-e53   │ 294   │ m3 - 13-53edo │ 294   │
└─────┴────────┴───────────┴───────┴──────┴────────┴───────────┴───────┴───────────────┴───────┘

I haven't determined yet whether to do this systematically as part of the scale constructor, or whether this should be overridden manually. I need to spend some time thinking about whether there exists a principal criteria that would lead to that particular choice for the changing degree. I intuitively suspect that such criteria exists.

Invalid sixths double-stops more than 1 string apart

As shown by systems/cello/e12/sixths.ml, there's a bug in the generation of double-stops that results in double stops played on strings IV-II:

┌─────┬────────┬───────┬───────┬──────┬────────┬───────┬───────┬──────────────┬───────┐
│ Low │ String │ Pos   │ Cents │ High │ String │ Pos   │ Cents │ Interval     │ Cents │
├─────┼────────┼───────┼───────┼──────┼────────┼───────┼───────┼──────────────┼───────┤
│ F2  │ IV     │ 4e    │ 500   │ D3   │ II     │ 0     │ 0     │ M6 - 9-12edo │ 900   │
└─────┴────────┴───────┴───────┴──────┴────────┴───────┴───────┴──────────────┴───────┘

In this specific example, the higher D is meant to be played on string III. This bug is visible in a few other lines in files sixths.ml, also in other systems.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.