I have several audio files of a song, performed in various languages, with the same backing. I want to extract the vocals from one of the audio files. However, the obvious approach (getting sample values from all the files, selecting one with least binary value, then writing it into the output file, then subtracting values out of this new file out of the original file) produces a file filled with noise (probably because of desynchronization between them). Could somebody tell me if there is another way? (Solutions using programming in Python are preferred, as I could reuse them.)
I don't think you'll find a method that completely removes the backing, but you may be able to reduce the volume enough for an acceptable result:
You simply put all the all the different versions on a track each in a multitrack program like Reaper, Cubase or Pro Tools. Make sure you precisely align the songs so the wave curves follow each other at sample level.
The outcome of this is that what is the same across the tracks, i.e. the music, is boosted and what differs, i.e. the vocals, is reduced. The more different versions you have the better.
Now you simply duplicate the track which you want to isolate the vocals from, and phase invert that and increase the gain to the point where the average music from the four other tracks cancels out the music in the fifth track.
You may need to route the four tracks to a group and reduce the volume of that instead of increasing the volume of the fifth as it may be hot already and cause clipping if you increase gain).