https://github.com/dbetchkal/stringtranscribe

a simple way to transcribe and visualize music across stringed instruments

https://github.com/dbetchkal/stringtranscribe

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (9.7%) to scientific vocabulary

Keywords

music-composition music-notation music-theory stringed-instruments
Last synced: 6 months ago · JSON representation

Repository

a simple way to transcribe and visualize music across stringed instruments

Basic Info
  • Host: GitHub
  • Owner: dbetchkal
  • Language: Python
  • Default Branch: master
  • Size: 332 KB
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 2
  • Releases: 0
Topics
music-composition music-notation music-theory stringed-instruments
Created almost 8 years ago · Last pushed over 5 years ago
Metadata Files
Readme

README.md

stringtranscribe

A simple class to transcribe and visualize music across stringed instruments.

Imagine you're playing music with an unconventional ensemble made up of an electric bass ukulele, 5-string electric octave mandolin, and a lap steel guitar in C6 tuning. Outside of the most basic chords, odds are that you and your friends are not going to have a clear way of communicating song structure to one another. To further complicate things, casual musicians may only be familiar with one type of notation (say, tabulature,) further constraining the ability of the group to learn new songs.

The purpose of this repository is to provide a way to transcribe music across a wide variety of stringed instruments. By visualizing notes directly on the fretboard of the musician's instrument it attempts to facilitate the exploration of more nuanced harmony when learning compositions. It also allows musicians to choose the notation that suits their learning best.

Fidelity to the harmonic structure of a song is expressed by the concept of raag within the context of Indian classical music:

"A harmonious note, melody, formula, or building block of music available to a musician to construct a state of experience in the audience."

A note on the color scheme

Throughout this module I use a color scheme that leverages the agreement between the chromatic scale in music and the chromatic color wheel in pigments, both of which have twelve values. The module allows for use of either letter notation or integer notation, where "C" = 0.

To maximize contrast in the plots, progressive colors of the chromatic color wheel are assigned to progressive notes of the circle of 5ths - each representing seven steps of the chromatic scale. Note D#/3 (blue-violet) is shown as pink, and G/7 (red-orange) is shown as brown.

The Instrument class

We begin using the module by initializing an instrument.

For now, instruments are assumed to have:

  • a fingerboard (fretted or not) with a certain range of notes feasible for the musician to play
  • a certain number of strings, each tuned to a specific note

Here's how you would initialize an acoustic guitar in Open C tuning using letter notation: openC_guitar = Instrument(num_frets = 14, tuning = ["C", "G", "C", "E", "G", "C"], notation = "letter")

This one's a fiddle, where the player only uses the 1st, 2nd, and 3rd hand positions: fiddle = Instrument(num_frets = 10, tuning = ["G", "D", "A", "E"], notation = "letter")


Since the guitar is in a major open tuning we know one obvious way to play a D-major chord is to barre across the 2nd fret. But what other ways of voicing D-major are available? Knowing the letter names of the notes in a D-major chord we can use the .raag() method to find out: openC_guitar.raag(["D","F#","A"])

Quite a few playable possibilities!

It turns out we can return the same information even if we didn't know the note names in a 'D' chord. Instead we can use our pre-existing knowledge of the 2nd fret barre chord to provide alternative fingerings. We convert from tabulature to letter notation using the .tabToLetter() method:

openC_guitar.raag(openC_guitar.tabToLetter([2, 2, 2, 2, 2, 2]))


Now, what can the fiddler play that would sound good along with the guitar? Any notes the guitar is playing might be a good start (others could work within the harmonic structure of the song, but this module can't suggest those!) Use .raag() to transfer the letter notes from the guitar onto the fiddle fingerboard:

fiddle.raag(openC_guitar.tabToLetter([2, 2, 2, 2, 2, 2]))


The real power of this tool is when fidelity to a subtle chord progression is paramount. Take for instance the following chord (a C11 with no 5th): openC_guitar.raag(openC_guitar.tabToLetter([0, 9, 10, 8, 10, "x"]))


Here are the same notes mapped onto the neck of a lap steel guitar in C6 tuning: steelGuitar = Instrument(24, [0, 4, 7, 9, 0, 4]) steelGuitar.raag(openC_guitar.tabToLetter([0, 9, 10, 8, 10, "x"]))

Lots of choices for moving counter-melody!


Downloading and using this module

Use git to clone the repository. Using the path to the repository on your local disk, import the Instrument class:

``` import sys sys.path.append(r"**\stringtranscribe")

from stringtranscribe import Instrument ```

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Owner

  • Name: Davyd Halyn Betchkal
  • Login: dbetchkal
  • Kind: user
  • Location: Denali National Park and Preserve, AK
  • Company: National Park Service

GitHub Events

Total
Last Year

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 2
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 1
  • Total pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • dbetchkal (2)
Pull Request Authors
Top Labels
Issue Labels
enhancement (2)
Pull Request Labels