Stellen Sie fest, wo das Singen in einer Nur-Sprachaufnahme beginnt

  • Ich habe eine kleine Karaoke-App, bei der ein Benutzer 4 Zeilen eines Songs singt, wobei zwischen jeder Zeile eine Sekunde Lücke liegt. Es gibt keine Hintergrundmusik, also nur die Stimme, wodurch das Problem leichter zu lösen ist.

    Ich suche die robusteste Methode, um genau zu erkennen, wo in meiner Aufnahme der Benutzer die Zeile 1 beginnt und endet, die Zeile 2 beginnt und endet.

    Ich habe einen einfachen Algorithmus zusammengeschustert, der funktioniert, wenn in der Aufnahme sehr wenig Hintergrundgeräusche auftreten (wie wann passiert das?), aber in Gegenwart des kleinsten zerfällt Lärm.

    Kann mich jemand auf etwas Robusteres hinweisen?

    10 June 2018
    Adam
5 answers
  • Wenn das Hintergrundrauschen weiß ist, können Sie die spektrale Ebenheit und messen Betrachten Sie es als Stimme, wenn die Amplitude über einer bestimmten Schwelle liegt und die spektrale Ebenheit unter einer bestimmten Schwelle liegt.

    Im Grunde nehmen Sie einfach eine FFT eines Teils des Signals und teilen dann das geometrischer Mittelwert der Amplitude des Spektrums durch den arithmetischen Mittelwert.

    Sie können auch einen Bandpassfilter verwenden, um nur die Frequenzbereiche hervorzuheben, in denen die menschliche Stimme normalerweise sitzt Setzen der unerwünschten Bereiche der FFT vor dem Messen der spektralen Ebenheit auf 0)

    15 May 2012
    Michael Haren
  • Ich habe in der Vergangenheit Spektralfluss verwendet und es scheint gut zu funktionieren. Die Grundidee ist, ein Spektrogramm Ihres Signals über die Bänder hinweg zu erstellen, die Sie interessieren. Nehmen wir an, Ihre Frequenz liegt auf der Y-Achse und Ihre Zeit auf der X-Achse. wie so .

    Dies bedeutet, dass Ihr Spektrogramm eine Matrix ist. Jede Spalte stellt den absoluten Wert der FFT eines Snapshots Ihres Signals dar und jede Zeile zeigt, wie sich die Energie eines Bandes im Laufe der Zeit ändert.

    Nehmen Sie jetzt einfach die Differenz der Spalten auf. Nehmen Sie also eine Spalte und subtrahieren Sie die Spalte davor und tun Sie dies für alle Spalten. (Offensichtlich allein die Startspalten). Dann summiere dich über alle Bands. Das heißt, summieren Sie einfach alle Zeilen zusammen.

    Am Ende erhalten Sie ein 1-D-Signal, das die Signaleinsätze kodiert. Dadurch erfahren Sie, wo Ihre Stimme beginnt.

    BEARBEITEN:

    Nun, da Sie Onsets erkannt haben, wenn Sie das Gegenteil erkennen möchten (dh, wann ein Signal vorliegt) geht von Aktivität zu keiner), der spektrale Fluss gibt Ihnen diese Informationen. Wo immer Sie ansetzen, haben Sie einen positiven Peak, und wo auch immer Sie ein Deset haben (mangels eines besseren Wortes), haben Sie einen negativen Peak.

    Ich würde einfach den ersten positiven Peak und den letzten negativen Peak nehmen, um die gesamten Start- und Stoppzeiten meines Signals zu markieren.

    29 May 2012
    Spacey
  • Aus meiner Erfahrung würde ich versuchen, einen Blick auf Mel-Frequency-Cepstrum-Coefficients (MFCCs) zu werfen ) . MFCCs sind relativ einfach zu implementieren, wenn Sie über eine FFT verfügen, die häufig in der Sprachverarbeitung verwendet wird.

    Mit MFCCs sollten Sie in der Lage sein, tatsächliche Sprachdaten von Rauschen zu unterscheiden.

    15 May 2012
    Michael Haren
  • " Spektralfluss " (auch als "Spektraldifferenz" bezeichnet) ") ist eine gebräuchliche Methode zur" Onset-Erkennung ". Grundsätzlich nehmen Sie sequentielle FFTs des Signals und summieren die Beträge der Differenzen der FFT-Buckets von einer Probe zur nächsten. "Onset" wird im Allgemeinen durch einen erheblichen "Sprung" in diesem Wert dargestellt.

    Google "Onset-Erkennung" für andere Ideen.

    15 May 2012
    Alex
  • Die alleinige Verwendung des Spektralflusses kann für bestimmte Geräusche falsch positive Ergebnisse erzeugen und eine Singstimme erkennen.

    Das Singen impliziert normalerweise einen Signalinhalt, der eine Tonhöhe enthält könnte einen Pitch-Detektor oder einen Schätzer (Cepstrum usw.) verwenden. Sie können den Bruchteil der Energie, der als Pitch erfasst wird, im Vergleich zur Gesamtsignalenergie überprüfen und prüfen, ob die geschätzte Tonhöhe im Bereich der menschlichen Stimme liegt. Dies würde die False-Positive-Rate für ungepitchtes Rauschen sowie für Musikgeräusche außerhalb des normalen Stimmbereichs verringern.

    18 May 2012
    Leigh Riffel