Show HN: TuneType – a font that has (guitar) chords embedded as ligatures
tunetype.comThis is a very creative use of ligatures. I wonder if any of the popular tab websites would be willing to support it.
What if I want to name arbitrary text in the ligature instead of your list of chords? What if I disagree with how you spell minor as 'm' whereas I want 'mi' or even '-'. How about things like half-diminished, which is often written as 'ø7' vs. calling it a mi7(♭5), like a particular music school I went to prefers. Also, if you're sticking to possible chords qualities, it's 2 * 12 == 4096. I've implemented functions that return the spelling of chord quality over that range, and can return a "proper" answer dependent on rules, but I think in your case you could/should be letting the user call the chord anything they want.
Your presets didn't even include the chord D6 for example. Why have 7th chords like A7 and not have A6? So either cover the chords, or don't pretend that it supports chords. You could change it to say "supports chords that [you] in particular have heard of". Unless there is a way to switch into that mode (where I can speak chords)? I noticed the first test string of \am7\ works, but can't get flats or sharps to work. It really should accept text like this:
Abmi6(#5,add9)/Db5
, or anything you want to write. I have a use-case where I invented a new way to describe chords, so any possibilities in the "normal" world of music don't apply. I also have a use-case where I want to be able to say any of the 12 * 2 * 12 things squared (squared because of "slash notation" adding a whole new identity to the chord symbol) what you could potentially be able to say in 12 roots 12 tone harmony with an extra component in the bass. There are 2415919104 possible inputs to this, but the thing is, there are multiple ways to spell that.I propose you do a chord spelling where to font only accepts capitalized letters as note names. Then you can use 'b' as flat '♭' and have no conflict with the note-name called B.
Also you can specify chords using numbers. Numbers accept accidentals before the number part of the string as opposed to after in the case of "alphabet" note names. And numbers can be spelled either "Nashville" like 1,2mi,3, or "Roman" like the following example. Notice to that in that one any minor or diminished or half-diminished chords use lowercase numerals.
Summertime - Gershwin
|Imi | iimi7(b5) V7 | Imi | |
|ivmi7 | | bVI7 V7 | ...
You could use numeral-glyph substitution when encountering substrings with consecutive members of "IiVv" that are also valid numerals.Also it would be nice to be able to use the character, '|', to add measure lines, fer countin', fer the slower ones out there like yours truly. I could see this as being useful if it could be used a little more comprehensively, like in the ways I've outlined.
"Easy" thing for you to do to improve this drastically is to make it so you can just have any old text you want in between the backslashes. Or have another entry point in the font where that is possible.
Not sure why you got downvoted as well, that was very educating.
I never studied music theory, but I play guitar for >20 years, so I just picked some library I found that listed a few common chords, and put it there.
I never (knowingly) played a D6, so didn’t know to look for that one in particular :)
I’ll add the option extend the list, and see if I can find a better list of defaults.
The thing about those ligatures is that each one adds a bit to the font’s weight, they’re not referencing one another - it’s a lot of duplicated “paths” (and IIRC I can define up to 65,536 in total).
Another thing about these chords ligatures is that they are “zero-width”. When you type /a/ it will get replaced with a the ligature for the A chords, which is a the shape of “A”, above the line (translateY: -150%), and report “advanceWidth: 0”, so the next character shares the same X position. Now, if you want to add m6 to it, I technically cannot support rendering it “to the right of the A”, since its width was set to 0. So I need to pack the font itself with both the A and the Am6 ligatures…
I think a more “advanced” use case like the one you described can be addressed by something like https://lilypond.org
> since its width was set to 0
Is this totally necessary? My question is genuine. I don't know much about font programming.
> I’ll add the option extend the list, and see if I can find a better list of defaults.
If the values have to be hard-coded. If you can get me a contact info, I could send you the master list of chords.. maybe you could use that. My username is not really figurative.
I could see multiple "versions" of the font. There are different conventions one could use to spell chords. Even something like Hal Leonard vs. Sher use different conventions. There's symbol shorthands, like writing aug vs. + or even ma7 vs. '△7'. Dim vs. a circle. There are quite a few different ways to do it so I think it could be cool if you could pick a version. But I could be overcomplicating this.
> I think a more “advanced” use case like the one you described can be addressed by something like https://lilypond.org
Lilypond is a music engraving system. That means that it is producing sheet music. That isn't really overlapping with what you're making as that is not sheet music, but more of a shorthand. I'm actually more interested in the kind of approach you're doing, as I hate sheet music. For me, what music notation needs is simply the chord, and the time. That's why I mentioned the use of '|' to indicate bar lines. Actually writing down and reading individual notes is something that basically takes years to learn, and I don't consider it in line with my (subjective) definition of modern music. Usually by the time people learn to read sheet music, they've completely missed real "playing", with all the effort going into sheet music instead. If you're someone who improvises, you just need the harmonic structure (chords over time).
So another question which might be simple-to-answer would be, can we make a font that just has some kind of thing (glyph, symbol, unicode code point) which raises the thing above the thing? Or do we absolutely need to hardcode it.
What you suggested lastly is possible, most work will be coming up with a dumbed down editor for such a font. Per each ligature, the user should be able to provide a SVG(?) and control its y-offset and scale (currently I use the same values for all the ligatures).
DM me at Twitter (@verydutzi) if you want to talk about it, I’d be happy to!
D6 is the first chord in Beatles - Fool On The Hill. It's the second moment in Neil Young - Harvest Moon.
I'm not sure why I got down-voted, but I guess I could rephrase and establish my tone better. My previous comment could have come out as being critical. I just wanted to ask, would it possible/worth it time-wise to do a similar thing but support imputing more different strings into the ligature part? This is really cool, and I could totally see using it, if you could a few more chords. Great work! This would cover a lot of different tunes really well, and is a way better presentation then you normally get using plaintext and two separate lines.