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
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:
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.