2010-09-09 19 views
13

Ich möchte Vocals von MP3-Tonspuren entfernen. Ich suchte google und probierte einige Software, aber keiner von ihnen ist überzeugend. Ich plane, die MP3-Datei zu lesen, eine Wellenform zu erhalten und die Wellenform zu entfernen, die über einer bestimmten Grenze liegt.Algorithmus zum Entfernen von Vokal aus Tonspur

Haben Sie Vorschläge, wie Sie vorgehen sollen.

- Update

Ich möchte Code nur das MP3-Dateiformat lesen kann. Gibt es irgendwelche Software?

+0

Das wäre ziemlich cool ... was Software haben Sie schon versucht? – sholsapp

+0

audacity, wavosaur und extra boy pro – Boolean

Antwort

14

Dies ist nicht so sehr ein "Algorithmus" als ein "Trick", aber es könnte im Code automatisiert werden. Es funktioniert hauptsächlich für Stereo-Tracks, bei denen der Gesang zentriert ist. Wenn die Vocals zentriert sind, manifestieren sie sich in beiden Tracks gleichermaßen. Wenn Sie eine der Spuren invertieren und sie dann wieder zusammenführen, heben sich die Wellenformen des mittleren Vocals auf und werden praktisch entfernt. Sie können dies manuell mit den meisten guten Audio-Editoren wie Kühnheit tun. Es gibt Ihnen keine perfekten Ergebnisse und der Rest der Audio leidet ein wenig zu, aber es macht gute Karaoke-Tracks :)

+4

Es heißt Phasenauslöschung, der größte Nachteil ist, dass die produzierte Spur ist Mono. – arul

+0

> "Der Rest der Musik leidet auch ein bisschen" - dieses Glücksszenario ist selten. Der wahrscheinlichste Fall ist, dass noch wenig Ton übrig ist und es auch sehr falsch klingt. Allerdings kann normalerweise etwas Besseres getan werden, wenn man eine mehr als stereo Quelle (5.1, usw.) hat. aber es ist auch nicht so einfach –

0

Oberhalb einer festgelegten Grenze? klingt wie ein Hochpassfilter ... Sie könnten Phasenkompensation verwenden, wenn Sie die Acapella-Spur zusammen mit dem Original hätten. Ansonsten, es sei denn, es ist ein alter 60er-Jahre-Track, der Vocals direkt in der Mitte hat und alles andere ist hart gepancht, ich glaube nicht, dass es eine super saubere Art ist, Vocals zu entfernen.

+1

Gibt es irgendeinen Weg, den du kennst, um verschiedene Sounds vom Input Sound zu trennen? Ich meine zum Beispiel den Algorithmus geben uns zum Beispiel 100 verschiedene gefundene Laute und lassen das Finden der bestimmten Laute zu uns entfernt werden. – ConductedClever

+0

@ ConductedClever: https://en.wikipedia.org/wiki/Independent_component_analysis – user

+0

Oder, allgemeiner gesagt, https://en.wikipedia.org/wiki/Blind_signal_separation – user

8

Quelle: http://www.cdf.utoronto.ca/~csc209h/summer/a2/a2.html, geschrieben von Daniel Zingaro.

Sounds are waves of air pressure. When a sound is generated, a sound wave consisting of compressions (increases in pressure) and rarefactions (decreases in pressure) moves through the air. This is similar to what happens if you throw a stone into a pond: the water rises and falls in a repeating wave.

When a microphone records sound, it takes a measure of the air pressure and returns it as a value. These values are called samples and can be positive or negative corresponding to increases or decreases in air pressure. Each time the air pressure is recorded, we are sampling the sound. Each sample records the sound at an instant in time; the faster we sample, the more accurate is our representation of the sound. The sampling rate refers to how many times per second we sample the sound. For example, CD-quality sound uses a sampling rate of 44100 samples per second; sampling someone's voice for use in a VOIP conversation uses far less than this. Sampling rates of 11025 (voice quality), 22050, and 44100 (CD quality) are common...

For mono sounds (those with one sound channel), a sample is simply a positive or negative integer that represents the amount of compression in the air at the point the sample was taken. For stereo sounds (which we use in this assignment), a sample is actually made up of two integer values: one for the left speaker and one for the right...

Here's how the algorithm [to remove vocals] works.

  • Copy the first 44 bytes verbatim from the input file to the output file. Those 44 bytes contain important header information that should not be modified.

  • Next, treat the rest of the input file as a sequence of shorts. Take each pair of shorts left and right, and compute combined = (left - right) /2. Write two copies of combined to the output file.

Why Does This Work?

For the curious, a brief explanation of the vocal-removal algorithm is in order. As you noticed from the algorithm, we are simply subtracting one channel from the other (and then dividing by 2 to keep the volume from getting too loud). So why does subtracting the left channel from the right channel magically remove vocals?

When music is recorded, it is sometimes the case that vocals are recorded by a single microphone, and that single vocal track is used for the vocals in both channels. The other instruments in the song are recorded by multiple microphones, so that they sound different in both channels. Subtracting one channel from the other takes away everything that is ``in common'' between those two channels which, if we're lucky, means removing the vocals.

Of course, things rarely work so well. Try your vocal remover on this badly-behaved wav file . Sure, the vocals are gone, but so is the body of the music! Apparently, some of the instruments were also recorded "centred", so that they are removed along with the vocals when channels are subtracted.

+0

hast du das versucht? – ConductedClever

+0

Nein, ich habe nur die Klasse auditiert, also musste ich nicht. Sieht so aus, als ob der Link nicht mehr funktioniert ... – Daniel

+1

WAV-Dateien sind RIFF-Dateien mit einem oder mehreren WAVE-Abschnitten. Wenn Sie die Datei auf diese Weise modifizieren, können Dateien mit mehreren WAVE-Abschnitten beschädigt werden und andere Teile wie INFO- und ID3-Tags können nicht mehr verwendet werden. – meklarian

4

können Sie die pydub Toolbox verwenden, finden Sie here Einzelheiten, auch here für damit verbundene Frage sehen. Es ist abhängig von FFmpeg und jedes Dateiformat lesen kann

Dann Sie Folgendes tun können:

from pydub import AudioSegment 
from pydub.playback import play 

# read in audio file and get the two mono tracks 
sound_stereo = AudioSegment.from_file(myAudioFile, format="mp3") 
sound_monoL = sound_stereo.split_to_mono()[0] 
sound_monoR = sound_stereo.split_to_mono()[1] 

# Invert phase of the Right audio file 
sound_monoR_inv = sound_monoR.invert_phase() 

# Merge two L and R_inv files, this cancels out the centers 
sound_CentersOut = sound_monoL.overlay(sound_monoR_inv) 

# Export merged audio file 
fh = sound_CentersOut.export(myAudioFile_CentersOut, format="mp3") 
+0

Wie entferne ich die resultierenden centersOut aus dem Original. –

Verwandte Themen