Me gustaría tener algo que se parece a esto. Dos colores diferentes no son necesarios.¿Cómo visualizo los datos de audio?
audacity on mac http://audacity.sourceforge.net/about/images/audacity-macosx.png
que ya se disponen de datos de audio (una muestra/milisegundos) de un archivo WAV estéreo en dos matrices INT, uno para cada canal izquierdo y derecho. He hecho algunos intentos pero no se ven tan claros como este, mis intentos llegan a ser puntiagudos o un bulto compacto.
¿Alguna buena sugerencia? Estoy trabajando en C# pero psuedocode está bien.
Asumamos que tenemos
- un DrawLine función (color, x1, y1, x2, y2)
- dos matrices int con los datos de la derecha [] y derecha [] de longitud L valores de datos
- entre 32767 y -32768
Si tiene alguna otra suposición simplemente escríbalas en su respuesta.
for(i = 0; i < L - 1; i++) {
// What magic goes here?
}
Así es como resultó cuando apliqué the solution Han provided. (solo un canal)
alt text http://www.imagechicken.com/uploads/1245877759099921200.jpg
Audacity es de código abierto para que pueda ver el código. Asumiría algo como lo siguiente ... func getHeight (v) {return abs (v) * 32767/viewArea.height/2); samplesPerPixelColumn = samples.len/viewArea.width; para i = 1 para viewArea.width {avgV = Avg (samples [i-i + samplesPerPixelColumn]); colHeight = getHeight (avgV); if avgV> = 0 DrawLine (negro, i, viewArea.height/2, i, (viewArea.height/2) + colHeight) else DrawLine (negro, i, viewArea.height/2, i, (viewArea.height/2) - colHeight); Probablemente necesites hacer un poco de manejo de redondeo/rango, pero esa debería ser la esencia. – steamer25
¿Por qué no pones eso en una respuesta? – Nifle
Quería darte algo que pudiera ser útil de inmediato pero que no te desanime si parte de él estaba desactivado. Más pensamientos: en lugar de líneas verticales, dibuje diagonales entre el punto del gráfico anterior y el siguiente ...Además, si amplía lo suficiente, tendrá múltiples píxeles por muestra. – steamer25