A bit of a confusing question, but I'll try to answer it...
Are there any tools out there currently that can deconstruct a sound
track, i.e. separate vocals, from beats, from melodies, etc... So I
can use those attributes as dimensions to match things on.
-No, there aren't really. But in my opinion, it's most likely the wrong approach anyway.
If I have access to the waveform of a song, does that give me the
complete song itself or is waveform itself not music, i.e. it won't
give you type of instrument and keys and stuff.
The waveform is the song, in totality. But to find the instruments involved programmatically, you could analyse the harmonic and inharmonic signature to try to match against known instrument signatures, but it would be quite slow and would need a machine learning system with human feedback and an ever-growing database to get anywhere close to good results. But I suppose given a large enough pool, it would be pretty accurate in the end.
However, even if you know the instruments involved with a good level of certainty, that doesn't necessarily mean you can match similar songs. The same instruments can be used in very different ways in very different styles of music.
As for the key signature, it's relatively easy to interpret with the right analysis.
Some food for thought for you…
- You can think of the waveform as like the "fingerprint" - or the hash code - of the song. If you recreate an identical waveform, in time and relative amplitude, you have an identical song. This is basically how CD copiers check if a known CD was ripped flawlessly.
- The frequency spectrum or "spectral identity" could be stored and matched to songs with similar spectral content, e.g. similar frequency and relative amplitude bass content (given the right analysis of said spectral content).
- The chord pattern and key signature could be estimated by measuring the frequency of the lowest prominent harmonic/frequency throughout the song.
- The average BPM (Beats Per Minute) is one parameter that can be analysed and stored as a feature of the song relatively easily. Furthermore, a changing BPM can help match other songs with similarly changing BPMs. There would be a margin of error for unusually fast or slow tempos - you would get half or double-time BPMs, respectively.
- Likewise, the time signature could be interpreted from analysis quite easily. However, this would have a margin of error involved too, especially with complex or uncommon time signatures.
- The overall loudness or power of the song is another parameter one could match against.
- The change in power levels throughout the song, maybe stored as a ratio.
- The dynamic range; the difference between the highest and the lowest amplitude parts of the song. E.g. Classical music tends to have a relatively large dynamic range.
A lot of these would take quite a chunk of processing time and have margins of error, though - My personal opinion on the fastest and most reliable approach to match similar songs would simply be tags. You get users to tag songs with subjective as well as objective tags, and you use a complicated dynamic tag scoring system for matching.
FYI, my movie streaming services always recommend the wrong movies to me, because it doesn't know the difference between Alien and Alien Vs Predator or Arrival and Moonfall.