SongKit allows you to write songs while separating content and presentation.
When editing a song, you focus only on the content of the song, which is the lyrics and the chords and tablatures.
Editing is realized in a text-editor-like environment. The canvas is a string of characters onto which you may attach chords or tablatures. Theses non-textual elements are called annotations.
Using text-like interactions allows the user to use well-known interactions like copy/pasting or drag and drop. When you insert some text at the beginning of the document, everything after is shifted accordingly while preserving their relations.
With the current version of SongKit, there are two kinds of annotations: chord annotations and tablature annotations. More types of annotations are planned for future versions.
A chord annotation holds information about a chord, and optionally chord voicings for different keys and instrument. The chord part is universal and doesn’t change when you change instrument or transpose the song (the displayed chord is the original chord transposed in the requested key. It is not modified when you transpose the song).
Each song has a key. This key defines how the chords are stored in the song’s file: if you enter the Em chord and if the key of the song is D major, the chord will be stored as a “2m” (or ii), that is the minor triad with the second as root.
Transposing the song is thus merely a change of reference point: if you transpose this song in G major, the “2m” stays the same but is then displayed as an Am.
Because chords are stored relative to the key of the song, transposition doesn’t change the content of the song.
Chord Annotations can store voicings for multiple keys and you can specify voicings for the D major and G major key for example. When you select a key, the app looks in the annotation if some voicing was specified for the current voice and displays it. If no voicing was defined, it computes a dynamic voicing on the fly for this voice’s instrument in this key.
When you Set the key of a song, you tell the app “this song is in D major, and all the chords are relative to this key”. If you set the key to G major, it doesn’t change how chords are displayed, Em will stay Em, but the app now considers it as Em in the key of G major, that is a “6m” (or vi) and then saves a different annotation in the song’s file.
When you Transpose a song to a specific key, you simply tell the app the point of reference of chords stored in annotations. This doesn’t change how chords are stored in the song’s file, but it changes how they are displayed.
This is a preliminary version. More content will come soon…