Playing guitar tablatures in Rust
agourlay.github.io
agourlay.github.io
Tabs make quite a bit of sense in a post recorded music culture. However, the information density you can get in standard sheet notation is far greater. There's tradeoffs.
Surprisingly (to me), tablature is apparently older than sheet music. Tabs are also pretty nice when you're dealing with non-standard tunings.
Lastly, even with standard notation, guitar music is often "unnecessarily" annotated with numbers for left hand fingering, roman numerals for barres, "pima" for the right hand, diamonds for harmonics, etc.
Which leads to something you didn't mention, that sheet music can be used with any instrument, whereas tablature is limited to not only a single instrument, but the specific combination of an instrument and a tuning.
In practice this means you won't be able to play a 6 string lute piece on modern guitar in standard tuning if all you have is the lute tablature.
True but the reason that guitar tabs missing the duration of the notes is not much of a handicap compared to traditional sheet music notation is that the guitar players learning popular music already get the notes' durations from listening to the actual recordings.
This is the same reason that printing out the lyrics for songs don't require notations of durations for each syllable of every word. People singing karaoke or whatever already get the durations by hearing the recordings. (Indeed, lyrics sheets are also missing the pitch of each syllable.)
On the other hand, traditional notation was invented before recordings so musicians often had no idea what the music sounded like unless they correctly decoded the notes durations on the page.
I think it also explains why in my last 2 years of playing flamenco I never found tabs, the rhythm is almost as hard to play by ear as the notes.
You can see this in Tuxguitar IIRC.
(But if you’re not talking about standard guitar, then don’t stop at 6, you can have more than that.)
That’s the reason they have a different notation. The notation is there to convey what we mean, not a nitpicking. To claim it is still the “same” even when the notation isn’t are really pushing what “the same” is. We might as well start to count the way one scratch on the string to be the same note if they gives the same fundamental.
I could bring the points closer together, say by pointing out that fretted notes also exhibit harmonics; or that picking technique and position can significantly enhance or mask that fact. In so doing, there would certainly be much to dispute if I suggested without any qualification that any pronounced harmonic intonation is “the same” as any other intonation lacking the same pronounced harmonics.
But all of that is moot. I didn’t suggest any of those things. And I did include a qualification that invites you or anyone else to count or not count harmonics as you see fit!
You could just say “I don’t count harmonics”, and I would have no quarrel with that. But I do object to repeatedly conflating my point with points I both did not make and already clarified I did not make, to dispute something I am clearly not saying or even discussing.
We could have gone all formal here, musical theory and physics and all that. But I claimed that you can just tell by ears and use common sense.
What I was going for is accuracy. Someone made a quick comment that one could have played "the same note" on all 6 different strings, which aren't correct under closer inspection and reasonable assumption to define the context.
Similarly, if you include harmonics in the definition of "note" (while still hold the distinction that harmonics are different from normal notes), then still you cannot play "the same note" on all 6 strings, and in fact even lesser (for the same harmonics to be played on different strings) due to the constraints.
Interestingly, if you also include artificial harmonics, (again, while still hold the distinction between normal notes, harmonics, and artificial harmonics), then yes, you finally will be able to play the same note on all 6 strings, theoretically. One could argue whether we should consider harmonics and artificial harmonics the same, as they share different notations, and requires different techniques, but sounds the same to the ear. But either way there exists artificial harmonics that you can play on all 6 strings.
QED
Those with 24 frets can play E4 on all six strings, but 24 frets is pretty uncommon so I can see an argument for calling those non-standard.
But how about a 22 fret electric with a whammy bar? Those are very common. The highest note on the 6th string without using the whammy bar would be D4. Can you pull on the whammy bar enough to raise that to E4?
(But even “classically”, there are other guitars with many more strings or other tuning systems, etc.)
Lastly, “standard” can be perceived as the most common guitar you can think of. It is very likely if you tell a random Joe go buy a guitar for their nephew, it will be 6 strings 19 frets with EADGBE tuning.
That's why "real" notation is displayed above the tabs or sometimes some other way is used to indicate duration, mostly space between two notes. That's also why it's hard to write an actual usable guitar tab GUI, it needs to display sheet notation too, with all of it's intricacies.
- Tabs are meant for music you have the recordings of (so additional details can be obtained by listening to the song)
- Tabs are meant to be an easy way to play a song for people that might not be interested or have the resources to invest the time to learn sheet music
Printed guitar tab books also have durations and articulation symbols.
I agree that old fashioned ASCII art guitar tabs without durations aren't great.
I've been using TuxGuitar for years and I hate the UI so much. The ergonomics around basic functionality like "loop this section" and "speed up / slow down the tempo" are so bad. I feel like it was designed by people who are only interested in writing tabs. The user experience for practice is so crappy. I'm sitting here with a guitar in my lap and I absolutely cannot be bothered to navigate some really poorly-laid out drop down menus just to do basic stuff. I want to have keys on the keyboard do all the basic stuff so it's just a single tap with one hand.
I looked into TuxGuitar's Java source...it's incredibly complicated for what it does. I literally had no idea how I'd alter to make it better or even extract part of it to make my own UI.
If the author reads this: more power to you! And one thing that would be very useful is to make the font REALLY BIG so that players can read it very easily. Squinting at TuxGuitar's default tiny font size sucks so much.
You can set custom keyboard shortcuts for most menu items, and setting loop and repeat points is pretty easy in my experience...
What kind of shortcuts would you be interested in?
- Play / stop
- Increase / decrease speed
- Go to next section / riff / verse / chorus [1]
- Loop this phrase / riff / verse / chorus
- Turn off drums / bass / guitar tracks (i.e. isolate)
- Switch to click track mode[2]
[1] It'd be great if I could annotate part of the tab as a riff, phrase, or other section, give it a name, and then loop, repeat, jump around amongst riffs in a song (or even multiple songs).
[2] I've always wanted the ability to play a section of the tab as clicks (not notes), just to be able to hear and feel the intended rhythm of a section.
The development of TuxGuitar has recently resumed
So I wrote this https://ctan.math.utah.edu/pub/ctan/tex-archive/support/psta... (linking to the manual not the code - the manual is itself a program using the code I wrote to do the formatting) - a thing for formatting guitar tab that _ran on our Apple LaserWriter_, because we had pretty much nothing else that could do graphics. I learned postscript to write this, and because I needed to do some diagrams for my PhD, and wrote it in a week... so it's rough. But after the first couple of days I realised, that not only could I get it to format tab typed in the format I could type quickest, but I could get it to parse the ascii tab and reformat it to fit on a page, with nicely drawn lines not minus signs.
It also does stuff like printing verses with chords annotated, chord tables, and suchlike.
I recall going back to this 10 or 15 years later and the output in ghostscript was fugly, but at the time, I got a message from someone who'd used it to publish a book of banjo music in New Zealand - because it was the only thing that handled variable numbers of strings that he'd found!
Of _purely historical_ interest, I wouldn't recommend plumbing the code for any insights, since like I say I was very new to the language, and the stuff I wrote in the manual with my opinions about code are fairly embarrassing. But hey, the past is past.
https://archive.org/details/olgaarchive has a snapshot
- decentralized server node for hosting scores
- sheet music rendering in browser using WASM with Rust port of VexFlow
- multiplayer live score editing using custom Rust CRDT impl
- search through node's data based on facets like duration, instruments, difficulty, tuning, etc (Meilisearch)
- MIDI playing through soundfonts and RustySynth
- parsing/importing of Guitar Pro files using Rust-port of pyguitarpro
- AI assistant for editing scores using LiveKit, ElevenLabs etc
- support for creating different sheet music editor sites using the WASM core for the frontend
And more to come.
It's also the second time that iced has caught my attention today. The first was when I ran into an issue installing sniffnet on a new machine and had to revisit the docs. This led me to iced.rs and I eventually wound up playing with the Halo shader edit for a bit. It looks like a nice library and I'm itching to give it a try.
c e g b d f a = CMaj13.
Missing/ 'passing' notes -
c# g# d# f# a#.
EDIT: Also you have to be missing at least one note... CMaj7 had 4 notes + 13 ... c e g b + a (the 13th) so CMaj7/13 Add 4 ?
The OP (as I understand it) was wanting to be able to know what shape/grip to use for picking the relevant notes... I'm sure it can be done but you have to also find the position and reasonable shapes that fit the notes in the bar.
Then look at the Pro tab. The fingerpicking patterns are shown, and which string/fret should be picked, but there’s no chord name listed when it would be helpful for somebody like me to see just a simple chord name above the measure as a cue for my fretboard hand without having to look at the individual plucked strings/frets spread over the measure to determine the chord. I hope that makes sense.
Sometime it might be a challenge to fit it, but there are many instances where it would be a helpful assist for reading the tab.
In your example the tab is strictly finger-picking over chords since that's how the song goes but some tabs are lead guitar tabs which might be sliding from the 15th fret to the 3rd fret or other things that are not strictly picked from a chord shape. They might still be "from a chord" or "played over a chord" but when you play the tab you may or may not be using that shape at that position. It's still good to know what's the context so definitely having the chord is useful.
If I'm playing a song with a clear picking pattern over chords I might just learn the chords and strum them first and then learn the pattern or often the patterns are just standard and all you need is the chord chart.
I've definitely seen tabs with the chords on top, in Ultimate Guitar it depends on whoever transcribed it, random e.g.: https://tabs.ultimate-guitar.com/tab/misc-traditional/greens...
Update: looks like some papers got into it last year:
Rock Guitar Tablature Generation via Natural Language Processing: https://arxiv.org/pdf/2301.05295
GTR-CTRL: Instrument and Genre Conditioning for Guitar-Focused Music Generation with Transformers: https://arxiv.org/abs/2302.05393
Happy to answer any questions.
Iced is a great library if you are willing to put in the effort to learn it (as it's new and documentation is still mostly limited to examples)
One thing less to worry about.
That question is for the author of the software alone to decide how they want to build their own software.
Tuxguitar is written in Java and works perfectly fine TBH, even if Rust has clear advantages for high performance software it does not matter that much in this context.
TBH I have a lot of things to improve before thinking about this kind of interop.
But feel free to create an issue :)
RS+ is great for quickly memorizing new riffs and songs, but when they discontinued RS2014, they cut over to a yearly subscription service, AND made it incompatible with the tens of thousands of user-notated songs created with the old API. Just a lot of back catalog stuff now.
My 8yo niece is so disappointed she can’t use it learn Taylor Swift songs on the little Strat Mini I gifted her.
It's not gamified like Rocksmith, but it's got an excellent learning and practice interface — for _any_ music you throw at it. You can import tabs you find online in various formats, and we recently added a PDF scanning feature as well. There's also a built-in tab editor.
Also, it works for sheet music (i.e., not just tabs), so you can use it with any instrument or voice that uses common western music notation.
(I help make the site — happy to answer questions)
On desktop, columns are 'unlimited'.
https://tonelib.net/jam-overview.html https://yousician.com/guitar
But I have been interested in something like https://github.com/PolyMeilex/Neothesia for guitar.
Would love to see how this can be extended for general purpose tab player. That would be awesome.
Thanks!
What do you mean exactly by "general purpose tab player"?
However I can share with you the release script if you want to double check https://github.com/agourlay/ruxguitar/blob/master/.github/wo...