Hybrid-Net: Real-time audio source separation, generate lyrics, chords, beat
github.com
github.com
https://lamucal.ai/songs/adrian-holovaty/adrian-holovaty-the...
The beats/chords were consistently a full beat off, and the chords were probably only 50% right. I chose this tune because (to my ears) the harmony is pretty clear.
Compare this to my own manually created transcription of the same tune, and it's night-and-day difference:
https://www.soundslice.com/slices/tpbwc/
Beat detection and chord detection are hard problems, likely due to a lack of diverse training data. Chordify (another site that does this, which has been around for ages) has roughly similar performance.
Full disclosure: I run Soundslice, a website built around synced sheet music, in which there's no automatic transcription involved (maybe someday, but the tech isn't good enough yet!). I've been following these developments for 15+ years.
You can listen here:
https://colab.research.google.com/drive/1Pqgc9s-nBKxU_3Ap6K0...
Future music students are going to be fortunate to have these kinds of tool. An instant split and full analysis of any song. Remixes and backing tracks on tap, etc.
That said, we older students learned a lot from the process of doing this manually ourselves. Those lessons can still be learned and others besides, but the dynamics of the learning change with the tech.
I checked https://lamucal.ai/ with some example MP3:
- lyrics are OK (although I've seen tools that managed to do better),
- chords recognition wasn't bad,
- the UI is a bit rough around the edges (and I managed to get some Unity-related errors),
- pitch-aware speed adjustments is always a great tool when someone tries to learn how to play the song,
- transposing can be useful as well (although the web application does not support it).
I'm using (and paid for) some other similar application, although I primarily use that for tracks separation. Later I import tracks into Ardour and then record my own guitar lines. I use just a miniscule percentage features of the DAW, so if someone could provide an application with all that AI goodies coupled with recording ability that would be wonderful.
That said in personally I've found that one way or another I need to listen a lot to the song I'm trying to learn, make notes, break down the song structure (sections, strumming patterns, chords etc.). And a good video on YouTube that starts with a simple version of the song and then adds more and more feature are often the best help to start with, at least at my current level.
The source separation only seems to be available when downloading their app, which I didn't do, so I can't comment on that.
I found plenty of tools online to do this, but they were all credit-based and a bit annoying to use. I eventually found they were mostly using Demucs from Facebook: https://github.com/facebookresearch/demucs
Really nice tool if you need simple splitting of things like drums, vocals, etc. It's not perfect, but it's a great start.
No usage credits or cost, since it's all on your computer.
If the piano is a Rhodes then extracting electric guitar works well, extracting a piano not at all.
You can try it on their website https://lamucal.ai/
To be completely honest, as a human that does not speak English natively, i find some lyrics hard to understand. I've seen native English speakers also having this problem. I think it's only neutral for a NN to do the same mistakes.
One bit of feedback: with this track [0], I noticed that the lyrics highlighting eventually fell behind the YouTube audio.
[0] https://lamucal.ai/songs/def-leppard/pour-some-sugar-on-me-e...
I feel like that's where a lot of artifacts are introduced (at least for TTS) and the best methods a while ago were slow and autoregressive.
I just tried it with a song with a fairly complicated chord progression - yesterday by the beatles. It did pretty well! But it got a couple parts wrong.
Is there support for modifying the results of the chords/lyrics? I don't see it immediately.
def get_lyrics(waveform, sr, cfg): # asr and wav2vec2 raise NotImplementedError()
Major 7: M7, Maj7 or Ma7,
Guitar chords are totally whacked. Get a guitarist to help you out with those.
m7 and M7 are a reasonable choice, although min7/Maj7, or mi7/Ma7 are also good too (the pairs should match).
It shows G7 as 12ooo3, which is not how a guitarist would ever play that chord. (32ooo1, or 323oo3 of 353433, in increasing order of difficulty would be correct). Other chords have similar problems. e.g. C7 o3231o should be x3231o).
* Lamucal did better on the chords--to my ear they're not perfect [e.g. D vs. D minor], but guitar2tabs couldn't do chords at all. * Guitar2tabs did pretty well at figuring out the melody; they couldn't grok the rhythm, but got a pretty decent sequence of notes. Lamucal didn't even try; the "tab" is just a list of chords.
One very nice feature of guitar2tabs is that you can play either the original audio or the extracted music, so you can hear how close it is. I'd recommend adding that--just playing the original is still useful, to see they sync with the extracted music, but playing the extraction is more so.
Only things I've seen it get wrong in a few minutes of testing are french lyrics (try a Serge Gainsbourg for example).
But it is really, really amazing.
It's definitely on to something. I wonder how would it perform if it was trained on Jazz.
Sort of random G7 and C chords, with C / Eb7 in the turnaround.
Should either be G7 all the way through (on the lead sheet) to the turnaround which is
D7+9 | / | Eb7#9 | D7#9 | G7 | / / D7#9 |
Pretty safe bet that no AI will be able to do G7. But it should at least do:|: G7 / C | Dm7 / C :] &c.
I'm guessing it isn't going to do anything past a 7 chord, so C7#9 is probably not going to happen. Which probably makes it unusable for jazz. :-(