Mi piacerebbe avere qualcosa che assomigli a questo. Due colori diversi non sono necessari.Come visualizzare i dati audio?
audacity on mac http://audacity.sourceforge.net/about/images/audacity-macosx.png
Ho già i dati audio (un campione/millisecondi) da un WAV stereo a due array int, uno ciascuno per il canale destro e sinistro. Ho fatto alcuni tentativi ma non sembrano neanche lontanamente chiari come questo, i miei tentativi arrivano a spikey o un grumo compatto.
Qualche suggerimento? Sto lavorando in C# ma psuedocode è ok.
Supponiamo di avere
- una funzione DrawLine (colore, x1, y1, x2, y2)
- due array int con i dati a destra [] e sinistro [] di lunghezza L
- valori dei dati tra il 32767 e -32768
Se si apportano altre ipotesi basta scrivere giù nella vostra risposta.
for(i = 0; i < L - 1; i++) {
// What magic goes here?
}
Ecco come è avvenuto quando ho applicato the solution Han provided. (Un solo canale)
alt text http://www.imagechicken.com/uploads/1245877759099921200.jpg
Audacity è open source quindi è possibile controllare il codice. Assumerei qualcosa di simile al seguente ... func getHeight (v) {return abs (v) * 32767/viewArea.height/2); samplesPerPixelColumn = samples.len/viewArea.width; per i = 1 per viewArea.width {avgV = Avg (campioni [i-i + samplesPerPixelColumn]); colHeight = getHeight (avgV); se avgV> = 0 DrawLine (nero, i, viewArea.height/2, i, (viewArea.height/2) + colHeight) else DrawLine (nero, i, viewArea.height/2, i, (viewArea.height/2) - colHeight); Probabilmente avrai bisogno di fare un po 'di arrotondamento/gestione della gamma, ma quello dovrebbe essere il succo. – steamer25
Perché non lo metti in una risposta. – Nifle
Volevo darti qualcosa che potrebbe essere immediatamente utile ma non avere downvoted se parte di esso fosse disattivato. Altri pensieri: anziché le linee verticali, disegna diagonali tra il precedente punto del grafico e il prossimo ...Inoltre, se lo zoom è sufficiente, avrai più pixel per campione. – steamer25