Analysieren von wav und Zeichnen eines Graphen

8

Ich versuche eine Wave aus einer WAV-Datei auszudrucken, aber ich bin irgendwie verloren, wie lange ich für eine Probe nehmen sollte.

das würde ich gerne machen (ohne die Farben):

Zum Lesen meiner Daten verwende ich den folgenden Code:

%Vor%

BytesToFloat = Konvertiert 2 Bytes in einen Float zwischen -1 und 1

So, jetzt habe ich 2 Listen von Daten, aber wie soll ich nun, wie viele Zahlen sollte ich für die Erstellung von 1 Zeile nehmen?

Was mich am meisten verwirrt: Wenn Sie einen Song abspielen, können Sie in den meisten Musikplayern die folgenden Daten sehen, dies ist in meinen Augen die Darstellung von 1 Sample.

Aber woher wissen Sie den Wert jedes dieser Balken und wie viele Balken in einem Beispiel enthalten sind

    
Kiwi 29.11.2012, 15:38
quelle

1 Antwort

10

Ihre Frage bezieht sich auf zwei verschiedene Audio-Visualisierungen. Um den Signalverlauf zu zeichnen, ist der Code, den Sie gepostet haben, kurz davor, aus ihm zu zeichnen, aber Sie fügen Ihrer Liste einen einzelnen Eintrag pro Beispiel hinzu. Da Audio oft 44100 Samples pro Sekunde ist, würde die Wellenform für einen 3-minütigen Song fast 8 Millionen Pixel benötigen. Also, was Sie tun, ist sie stapelweise. Suchen Sie für jedes Wort 4410 Pixel (d. H. 100 ms) den Wert mit den höchsten und niedrigsten Werten, und verwenden Sie dann diesen, um die Linie zu zeichnen. In der Tat können Sie in der Regel damit fertig werden, nur den maximalen Abs-Wert zu finden und eine symmetrische Wellenform zu zeichnen.

Hier ist ein Code, um ein grundlegendes WaveForm einer Audiodatei in WPF zu zeichnen, mit NAudio für leichteren Zugriff auf die Beispielwerte (es kann WAV- oder MP3-Dateien tun). Ich habe keine Aufteilung von linken und rechten Kanälen eingeschlossen, aber das sollte ziemlich einfach hinzuzufügen sein:

%Vor%

Die zweite Visualisierung wird manchmal als Spektrogramm oder Spektrumanalysator bezeichnet. Es repräsentiert nicht 1 Sample, sondern repräsentiert die Frequenzen, die in einem Block von Samples vorhanden sind. Um diese Informationen zu erhalten, müssen Sie Ihre Proben über eine schnelle Fourier-Transformation (FFT) übergeben. Normalerweise passiert man Blöcke von 1024 Samples (es sollte eine Potenz von 2 sein). Unglücklicherweise kann es schwierig sein mit FFTs zu arbeiten, wenn Sie neu in DSP sind, da es mehrere Dinge gibt, die Sie lernen müssen:

  • wendet eine Fensterfunktion an
  • bringen Sie Ihr Audio in das richtige Eingabeformat (viele FFTs erwarten Eingabe als komplexe Zahlen)
  • ermitteln Sie, welche BIN-Nummern welcher Frequenz entsprechen,
  • finde die Größe jedes Fachs und wandle es in eine Dezibelskala um.

Zu StackOverflow sollten Sie weitere Informationen zu jedem dieser Themen finden. Ich habe ein wenig darüber geschrieben, wie Sie FFT in C # in diesem Artikel verwenden können.

    
Mark Heath 30.11.2012, 10:57
quelle

Tags und Links