Wie extrahiert man einen Gesangsteil aus einem Stereo-Audiosignal?

15

Ich verarbeite jetzt eine MP3-Datei und stoße auf dieses Problem. Mein MP3 ist stereo codiert. Was ich tun möchte, ist, den Gesangsteil für die weitere Verarbeitung zu extrahieren (egal, welcher Modus von Ausgangssignalen, Mono oder Stereo, beide in Ordnung sind).

Soweit ich weiß, wird Audio in MP3 in verschiedene getrennte Subfrequenzbänder codiert. Ich denke, ich kann die Signale durch ein Hochpass- / Tiefpassfilter mit korrekt eingestellter Grenzfrequenz auf den Stimmbereich begrenzen. Das Ergebnis muss in diesem Fall jedoch Teile des reinen Musiksignals enthalten. Oder ich denke, ich kann nach dem Googeln zuerst die Hintergrundsignale berechnen (indem ich einen Kanal invertiere und mit Signalen des anderen Kanals addiere, vorausgesetzt, der Gesangsteil ist im Stereo-Audio zentriert, was als Phasenlöschung bezeichnet wird). Nach dieser Transformation ist das Signal mono. Dann sollte ich die ursprüngliche Stereoanlage in Mono zusammenführen, aus dem das Hintergrundsignal extrahiert wird.

Welche ist angesichts der Wirksamkeit die bevorzugte (oder eine andere) Lösung? Wenn der 2. Kanal zwei Kanäle A und B hat, wird (BA) oder (AB) für die Berechnung des Hintergrunds verwendet? Bedeutet die Arithmetik wie beim Zusammenführen von zwei Kanälen genau genug? Oder kann ich jeden Kanal um den Faktor zwei heruntersampeln und die heruntergesampelten Signale als Mono-Ergebnis verschachteln?

Danke und viele Grüße.

Sommer_Mehr_Mehr_Tee
quelle

Antworten:

21

Zuallererst ist es für die Frage unerheblich, wie die Daten in einer MP3-Datei codiert sind, es sei denn, Sie möchten eine Verarbeitung in komprimierten Domänen durchführen (was ziemlich dumm wäre). Sie können also davon ausgehen, dass Ihr Algorithmus mit dekomprimierten Zeitbereichsdaten arbeitet.

Die Summe / Differenz ist ein sehr, sehr grundlegender Trick zur Unterdrückung von Stimmen (nicht zur Extraktion). Es wird davon ausgegangen, dass der Gesang in der Mitte des Stereofelds gemischt wird, während andere Instrumente seitlich verschoben werden. Das ist selten wahr. LR und RL klingen gleich (das menschliche Ohr reagiert nicht auf eine globale Phasenverschiebung) und geben Ihnen einen Monomix ohne die in der Mitte gemischten Instrumente. Das Problem ist, wenn Sie den Hintergrund wiederhergestellt haben, was werden Sie damit tun? Versuchen Sie, es aus dem mittleren (durchschnittlichen) Signal zu unterdrücken? Dies wird nicht funktionieren, Sie werden tun (L + R) / 2 - (L - R), das ist nicht sehr interessant ... Sie können beliebige Linearkombinationen von diesen (gemittelt und "Mitte entfernt") ausprobieren, nichts wird rauskommen!

In Bezug auf Filterungsansätze: Das f0 der Stimme überschreitet selten 1000 Hz, aber seine Harmonischen können darüber hinausgehen. Das Entfernen der höchsten Frequenz macht Konsonanten (insbesondere sss, chhh) unangenehm. Manche Männerstimmen gehen unter 100 Hz. Sie können jedoch sicher schneiden, was unter 50 oder 60 Hz liegt (Bass, Kick)

Einige neuere Entwicklungen bei der Sprachseparation, die es wert sind, erkundet zu werden:

  • Jean Louis Durrieus Hintergrund NMF + harmonisches Kamm> Filtermodell . Python-Code hier .
  • Rafiis Hintergrundextraktionsansatz . Unkompliziert zu programmieren und gut für computerproduzierte Musik mit sehr sich wiederholenden Mustern wie Electro, Hip-Hop ...
  • Der Ansatz von Hsu basiert auf der Erkennung, Verfolgung und Maskierung von f0. "Ein Tandem-Algorithmus zum Extrahieren der Tonhöhe und zur Trennung der Stimme von der Musikbegleitung" (barrierefreies PDF nicht verfügbar).
Pichenetten
quelle
4

Danke für den Hinweis! Sie haben vergessen, Ihre Arbeit an der Schlagzeugverbesserung zu erwähnen , was auch für die Anwendung von Summer_More_More_Tea von Interesse sein kann. Nun, das hängt wirklich davon ab, was Sie damit machen wollen. Haben Sie eine bestimmte "Endanwendung" im Sinn?

Ich stimme den obigen Aussagen von pichenettes vollkommen zu. Abschließend möchte ich jedoch sagen, dass die von Ihnen erwähnte Stimmverbesserung auch in einigen Werken von Matti Ryynänen zur Karaoke-Track-Generation verwendet wurde, um die Ergebnisse zu verbessern.

Um Ihre Fragen zu beantworten:

Welche ist angesichts der Wirksamkeit die bevorzugte (oder eine andere) Lösung?

Wie Pichenetten sagten, scheint beides nicht Ihren Bedürfnissen zu entsprechen: Tiefpass- / Hochpassfilterung scheitern mit Sicherheit an der harmonischen Struktur der menschlichen Stimme (und generell an "interessanten" Geräuschen - also alles, was über die Sinuskurven hinausgeht ... ).

Wenn der 2. Kanal zwei Kanäle A und B hat, wird (BA) oder (AB) für die Berechnung des Hintergrunds verwendet? Bedeutet die Arithmetik wie beim Zusammenführen von zwei Kanälen genau genug?

Auch die zweite Methode, die Sie erwähnen, funktioniert nicht, da Sie nur das Signal entfernen können, das sich in der Mitte befindet, und nicht abrufen können. Mit anderen Worten, auch wenn der Gesang im "Zentrum" liegt, gibt es keine einfache Mathematik, um nur ein Signal für den Gesang zu erhalten.

Oder kann ich jeden Kanal um den Faktor zwei heruntersampeln und die heruntergesampelten Signale als Mono-Ergebnis verschachteln?

er ... Die Mittelung der Kanäle, um ein Monokanalsignal zu erhalten, wie oben vorgeschlagen, ist sinnvoll und beeinträchtigt die spektralen Eigenschaften Ihres Signals nicht (vorausgesetzt, das Stereosignal ist nicht entartet). Sie erhalten also ein Monosignal, in dem Sie im Grunde den gleichen musikalischen Inhalt wie zuvor haben.

Ein korrektes Downsampling für jeden Kanal bedeutet, dass Sie zuerst einen Tiefpassfilter (in Ihrem Fall mit der Grenzfrequenz von sample_rate / 4) anwenden und dann alle 2 Samples sicher abtasten können. Über die Verschachtelung der so heruntergetasteten Kanäle gibt es jedoch nicht viel zu sagen: In den meisten Fällen führt dies zu einer Störung der spektralen Eigenschaften Ihres Signals. Das wollen Sie wahrscheinlich nicht.

In der Tat führt die Operation der Tiefpassfilterung, gefolgt von dem Setzen auf 0 alle 2 Abtastwerte und dem Halten dieser Nullen im Fourier-Bereich zum "Spiegeln" der Niederfrequenzkomponenten, die auf den Hochfrequenzkomponenten gehalten wurden. Denken Sie daran, dass Sie Lektionen zur Signalverarbeitung in der Abtasttheorie lernen: Multiplizieren mit einer Folge von Impulsen (oder Diracs) führt zu einer Faltung mit einer anderen Folge von Diracs im Fourier-Bereich, dh in diesem Fall wird das Frequenzspektrum des Signals wiederholt (periodisiert). entlang der Frequenzachse mit einer Periode gleich der Abtastrate.

Normalerweise entfernen Sie beim Downsampling die Nullen (da Sie eine neue Abtastrate annehmen). Hier führt die Beibehaltung jedoch zu sehr störenden zusätzlichen Hochfrequenzkomponenten. Das Verschachteln dieser Signale wird dies nicht korrigieren.

Alles in allem die kurze Antwort: Tu das nicht . :-)

Zum Schluss kann ich Ihnen auch vorschlagen, die GUI zu verwenden, die ich für die LVAICA 2012-Konferenz entwickelt habe: Es gibt ein Git-Repo dafür. Ich bin immer noch am Debuggen und Verbessern, daher sind Kommentare willkommen: D

Ich hoffe, das hilft!

Jean-Louis Durrieu
quelle