Die Analyse von wav-und zeichnen ein Diagramm
Ich versuche, drucken Sie eine Welle aus einer wav-Datei,
aber ich bin irgendwie verloren, wie die Länge ich nehmen sollte für eine Probe.
dies ist, was ich lieben würde, zu erreichen (ohne die Farben):
also für das Lesen meiner Daten ich verwende den folgenden code:
//first we need to read our wav file, so we can get our info:
byte[] wav = File.ReadAllBytes(filename);
//then we are going to get our file's info
info.NumChannnels = wav[22];
info.SampleRate = bytesToInt(wav[24], wav[25]);
//nr of samples is the length - the 44 bytes that where needed for the offset
int samples = (wav.Length - 44) / 2;
//if there are 2 channels, we need to devide the nr of sample in 2
if (info.NumChannnels == 2) samples /= 2;
//create the array
leftChannel = new List<float>();
if (info.NumChannnels == 2) rightChannel = new List<float>();
else rightChannel = null;
int pos = 44; //start of data chunk
for (int i = 0; i < samples; i++) {
leftChannel.Add(bytesToFloat(wav[pos], wav[pos + 1]));
pos += 2;
if (info.NumChannnels == 2) {
rightChannel.Add(bytesToFloat(wav[pos], wav[pos + 1]));
pos += 2;
}
}
BytesToFloat = Wandelt 2 bytes in ein float zwischen -1 und 1
So, jetzt habe ich 2 Listen von Daten, aber jetzt, wie ich, wie viele zahlen ich nehmen soll für die Erstellung von 1 Zeile?
was verwirrt mich am meisten:
wenn Sie einen song Abspielen, können Sie sehen, in den meisten Musik-Playern die folgenden Daten, dies ist in meinen Augen die Darstellung von 1 sample.
aber wie Sie wissen, der Wert jeder dieser bars, und wie viele bars gibt es in einer Probe
- zu wissen, Ihre # Muster und die Breite des Bildes oder die Steuerung, es wird eine Frage der Zuordnung n samples pro pixel?
- ja, aber das ist nicht das problem (denke ich), ich fügte hinzu, ein wenig text zu erklären, ein bisschen mehr auf, was mich verwirrend
- Ich denke was du suchst ist ein Spektrogramm? es gibt ein paar threads auf, SO dass könnte dir helfen: stackoverflow.com/questions/8781556/spectrogram-and-what-it-is stackoverflow.com/questions/2133651/spectrogram-c-library etc...
- Als Gigasoft Gründer, wir haben eine Lösung, die vereinfacht charting wav-audio-Daten und enthält Beispiel-code, um zu spielen und chart die wav-Daten ähnlich wie adobe autdition oder der nero wave-editor. Sehen Sie unsere kleine 18meg v8 charting demo und abgeben demo-Beispiel 123. Der download enthält auch WPF und MFC-exes. Die Quelle für das Lesen, Diagramm und spielen wav nicht Antworten auf alle abhängigen Bibliotheken und destilliert wird, bis ein minimum für das Lesen-Fähigkeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage ist über zwei verschiedene Visualisierungen von audio. Zeichnen Sie die Wellenform, die code, den Sie geschrieben ist nahe, bereit zu ziehen aus, aber Sie sind das hinzufügen einer einzigen Eintrag pro Probe auf Ihre Liste. Da audio-oft 44100 samples pro Sekunde, die Wellenform für ein 3-Minuten-song würde erfordern fast 8 Millionen Pixel über. Also, was Sie tun, ist batch Sie. Für jeden sagen, 4410 Pixel (d.h. 100ms), finden, die mit die höchsten und niedrigsten Werte, und dann verwenden, um die Linie zu zeichnen. in der Tat, können Sie in der Regel Weg mit nur finden das max-Abs-Wert und die Zeichnung einer symmetrischen Wellenform.
Hier code zum zeichnen basic WaveForm einer audio-Datei in WPF mit NAudio für den einfacheren Zugriff auf die sample-Werte (er kann WAV-oder MP3-Dateien). Ich habe nicht enthalten beliebige Splittung aus dem linken und rechten Kanal, das sollte aber ziemlich einfach sein-add:
Die zweite Visualisierung ist manchmal auch ein spectogram oder ein Spektrum-analyser. Es repräsentiert nicht 1 Probe, sondern stellt die Frequenzen vorhanden, ein block von samples. Um an diese Informationen, die Sie brauchen, um passieren Ihre Proben durch eine Fast-Fourier-Transformation (FFT). In der Regel passieren Sie Blöcke von 1024 samples (es sollte eine Potenz von 2 ist). Nur leider FFTs kann schwierig sein, mit zu arbeiten, wenn man neue DSP, da gibt es mehrere Dinge, die Sie brauchen, um zu lernen, wie zu tun:
Sollten Sie in der Lage sein, finden Sie weitere Informationen über jedes dieser Themen hier auf StackOverflow. Ich habe geschrieben ein wenig darüber, wie Sie verwenden können, FFT in C# in dieser Artikel.