Given a music file, is it possible to split out each instrument that is being played? I.e. let's say I have someSong.mp3, and in that song there's vocals, guitar, bass and drums. I'd want to get 4 "tracks" - one for each distinct instrument.
I'm guessing that it's almost impossible to do this, given that instruments can overlap, and it's notoriously difficult to distinguish overlapping voices let alone instruments.
However is there is a library, or an algorithm, or SOME way of doing this, I'd be curious to hear how.
The first step in identifying an instrument is to determine how it produces its sound. There are generally considered to be five broad categories of musical sound production, forming the basis for a widely used classification system for musical instruments.
With the help of our AI-powered Tune Identifier Pro app you can now find out what exact musical instruments sound and recognize specific ones in any song. By using the neural engine system, the application has the capability to isolate individual instruments within a piece of music.
There is no software for isolating different instruments within a song. It's like unbaking a cake. Once everything is mixed together, it stays that way. You can reduce some areas of the frequency spectrum using EQ, but that's about it.
In simple terms, timbre is what makes a particular musical instrument or human voice have a different sound from another, even when they play or sing the same note. For instance, it is the difference in sound between a guitar and a piano playing the same note at the same volume.
My undergraduate project dealt with transcribing notes from a WAV file to a MIDI file. We handled only the simple case of one instrument, possibly playing more than one note at a time (a piano, for instance). Our research into the subject before we started showed that even this (i.e. only one instrument) is considered non-trivial. Basically, the problem is:
Now, if you have more than one instrument at a time, and no two are playing the same notes or harmonies thereof at one time, you might be able to tell the instruments apart using some heuristic on the magnitudes of the harmonies or on the sequences of notes they're playing. Most likely there will be times when two instruments are playing the same note. Then you don't really have any way to decide if there is (a) one instrument playing the note, (b) two instruments playing at the same volume, (c) one playing soft and the other playing loud or (d) any combination thereof.
Anyway, that's the short list of problems to solve. I don't know of any algorithm that solves this in the general case. I don't think this problem has been solved yet.
Edit: My project presentation can be found at http://www-sipl.technion.ac.il/new/Archive/Special_Events/sipl2004/Projects_PowerPoint/WAV-to-MIDI.pdf
I have actually bumped into a very interesting algorithm called ICA (Independent Component Analysis). The concept behind this algorithm doesn't come from the signal processing world, but from probabilistic theories. We used it to separate two songs that were mixed into single mp3 file. You can find an implementation library in Matlab \ C++ \ Python called FastICA here. Give it a shot it's really nice.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With