Chciałbym mieć coś, co wygląda tak. Dwa różne kolory nie są konieczne.Jak wizualizować dane audio?
audacity on mac http://audacity.sourceforge.net/about/images/audacity-macosx.png
mam już dane audio (jedna próbka/milisekund) od wav stereo w dwóch tablicach int, po jednym dla lewego i prawego kanału. Podjąłem kilka prób, ale nie wyglądają tak jasno, jak to, moje próby stają się spiczaste lub zwarte.
Jakieś dobre sugestie? Pracuję w języku C#, ale psuedocode jest w porządku.
Załóżmy, że mamy
- DrawLine funkcja kolorze (x1, y1, X2, Y2)
- dwa Int tablice z danymi prawo [] i lewo [] o długości L
- wartości danych między 32767 a -32768
Jeśli masz inne założenia, po prostu zapisz je w swojej odpowiedzi.
for(i = 0; i < L - 1; i++) {
// What magic goes here?
}
Tak się okazało po złożeniu the solution Han provided. (Tylko jeden kanał)
alt text http://www.imagechicken.com/uploads/1245877759099921200.jpg
Audacity jest open source, więc możesz spojrzeć na kod. Zakładam coś takiego jak ... func getHeight (v) {return abs (v) * 32767/viewArea.height/2); samplesPerPixelColumn = samples.len/viewArea.width; dla i = 1 to viewArea.width {avgV = Avg (sample [i-i + samplesPerPixelColumn]); colHeight = getHeight (avgV); jeśli avgV> = 0 DrawLine (czarny, i, viewArea.height/2, i, (viewArea.height/2) + colHeight) else DrawLine (czarny, i, viewArea.height/2, i, (viewArea.height/2) - colHeight); Prawdopodobnie będziesz musiał wykonać pewne operacje zaokrąglania/zasięgu, ale to powinno być najważniejsze. – steamer25
Dlaczego nie umieszczasz tego w odpowiedzi. – Nifle
Chciałem dać ci coś, co może być od razu pomocne, ale nie zostanie obniżone, jeśli część z nich jest wyłączona. Więcej myśli: zamiast pionowych linii, narysuj przekątne między poprzednim punktem wykresu a następnym ...Ponadto, jeśli powiększysz wystarczająco, będziesz mieć wiele pikseli na próbkę. – steamer25