Ir al contenido


Foto

Spectrum Analyzer


  • Por favor identifícate para responder
10 respuestas en este tema

#1 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 06 abril 2009 - 03:31

Aquí­ les dejo un Spectrum Analyzer en consola que hice gracias al ocio.

Imagen Enviada
En la imagen se ve el Spectum Analyzer en azul, y sobre la consola otro proyecto con fin ilustrativo)

Recordé que el proyecto Delphamp (que es un Winamp v1~ escrito en Delphi) tiene dicha visualización sin realizar por si mismo ninguna transformación, en cambio utiliza una librerí­a llamada FMOD que entre otras cosas, realiza la DSP FFT. Con ésta interesante librerí­a tampoco es necesario encargarse del Streaming multimedia.



delphi
  1. program Spectrum; {$apptype console}
  2.  
  3. uses Windows, fmod, fmodtypes;
  4.  
  5. var Screen: array [0..80 * 25 - 1] of TCharInfo;
  6.  
  7. procedure WriteXY(const X, Y: SmallInt; AsciiChar: Char; Attributes: Word = FOREGROUND_BLUE);
  8. var Index: Cardinal;
  9. begin
  10. Index := Y * 80 + X;
  11. Screen[Index].AsciiChar := AsciiChar;
  12. Screen[Index].Attributes := Attributes;
  13. end;
  14.  
  15. type
  16. TSingleArray = array [0..511] of Single;
  17.  
  18. const
  19. NumFreq = 18;
  20. BlockFreq = 128 / NumFreq;
  21.  
  22. var
  23. ConsoleCursorInfo: TConsoleCursorInfo = (dwSize: 1);
  24. Rect: TSmallRect = (Left: 0; Top: 0; Right: 79; Bottom: 24);
  25.  
  26. Single: System.Single;
  27. hOutput, x, y, Value: Integer;
  28. Vector: ^TSingleArray;
  29.  
  30. begin
  31. hOutput := GetStdHandle(STD_OUTPUT_HANDLE);
  32. SetConsoleCursorInfo(hOutput, ConsoleCursorInfo);
  33.  
  34. FSOUND_Init(44100, 2, 0);
  35. FSOUND_Stream_Play(FSOUND_FREE, FSOUND_Stream_Open('Every little thing is gonna be all right.mp3',  FSOUND_NORMAL, 0, 0));
  36. FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit, True);
  37.  
  38. repeat Sleep(55); // do you remember [int 1Ch] ?
  39.   Vector := Pointer(FSOUND_DSP_GetSpectrum);
  40.   FillChar(Screen, SizeOf(Screen), 0);
  41.   for x := 0 to (NumFreq - 1) do
  42.   begin
  43.     Single := 0;
  44.     Value := Trunc(x * BlockFreq);
  45.     for y := 0 to Trunc(BlockFreq) do
  46.     if Vector[y + Value] > Single then
  47.       Single := Vector[y + Value];
  48.  
  49.     Single := 60 * Single;
  50.     if Single > 16 then
  51.     Single := 16;
  52.     Value := 16 - Trunc(Single);
  53.  
  54.     for y := 0 to (Value div 2) - 1 do
  55.     WriteXY(x, y, #219);
  56.     if (Value mod 2) <> 0 then
  57.     WriteXY(x, Value div 2, #223);
  58.     WriteXY(x, 8, #223);
  59.   end;
  60.   for y := 0 to 7 do
  61.   WriteXY(18, y, #219);
  62.   WriteXY(18, 8, #223);
  63.  
  64.   Inc(Rect.Right);
  65.   Inc(Rect.Bottom);
  66.   WriteConsoleOutput(hOutput, @Screen, PCoord(@Rect.Right)^, PCoord(@Rect)^, Rect);
  67. until FSOUND_GetChannelsPlaying = 0;
  68. FSOUND_Close;
  69. end.



FMOD se descarga de aquí­, en cualquier caso solo es necesaria la librerí­a.

Enjoy!
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 06 abril 2009 - 03:34

Hey little Bro, que ocio tan bueno tienes :D (y)

Salud OS


  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 abril 2009 - 03:51

Hola Javier, tendrí­a que ponerme a ver las operaciones del tipo aritméticas para comprender el tema...

Esto me recuerda el tema del vúmetro que intenté investigar y hacer hace tiempo... cuando comenzaba a hacerme mi reproductor (si habrá pasado tiempo).

Mi duda, disculpa lo tonta que pueda sonar, que diferencia hay entre ¿vúmetro y un equalizador? *-) :s No se si podrás evacuarme esa duda, pero me tengo que sacar la pregunta :D.

Cuando cursé redes y estaba viendo el tema de las ondas, frecuencias, Furrier y demás... le pregunté a mi profe si existe una relación entre db (decibeles) y la frecuencia y si la hay como dado un valor hallar otro. El me comentó que es un tanto complejo el tema y como no daba tiempo dentro y fuera del programa como para verlo desistí­ de ello.

Esto te comento porque lo que ves en un reproductor de música es un equalizador ¿o no?

Ahora bien... lo que tu graficas, en el analizador de espectro ¿que és? Disculpa que "suene" demasiada tonta la pregunta pero me asalta la duda... y además ya tengo demasiado oxidados los conceptos :( :.

Saludos,
  • 0

#4 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 06 abril 2009 - 04:25

...que ocio tan bueno tienes :D (y)...


verdad?

...tendrí­a que ponerme a ver las operaciones del tipo aritméticas para comprender el tema...


Lo dicho, simplemente FFT

...que diferencia hay entre ¿vúmetro y un equalizador? *-) :s...


Epa no se que es vúmetro... creo que es la misma cosa solo que el termino no esta asociado al DSP multimedia.

...Cuando cursé redes y estaba viendo el tema de las ondas, frecuencias, Furrier y demás... le pregunté a mi profe si existe una relación entre db (decibeles) y la frecuencia y si la hay como dado un valor hallar otro. El me comentó que es un tanto complejo el tema y como no daba tiempo dentro y fuera del programa como para verlo desistí­ de ello...


Un amigo electronico me dijo; "el hombre se paso al mundo digital porque no pudo comprender la complejidad del mundo analógico"

...Esto te comento porque lo que ves en un reproductor de música es un equalizador ¿o no?...


En mis palabras; El ecualizador que tu defines con el ratón son factores multiplicadores que modifican la onda de sonido, un Spectrum Analyzer al igual que un Osciloscopio es una visualizacion (representacion) del sonido.

...lo que tu graficas, en el analizador de espectro ¿que és?...


Creo haberlo dicho, pero acoto que cada barra es una frecuencia de sonido.

Salud
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 06 abril 2009 - 05:13

Interesante código cHackAll(y)

Desde mi punto de vista un Vúmetro es un instrumento para visualizar los niveles de audio. Clásicamente eran instrumentos de aguja. Un ecualizador es un dispositivo que sirve para atenuar o aumentar los niveles comprendidos en rangos de frecuencias establecidos, y a la par, puede representar esos niveles por cada rango.

Saludos.
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 abril 2009 - 05:45

Hola
Como me gusta ver lo que haces amigo, siempre innovando.
Saludos
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 abril 2009 - 06:23

Muchas gracias Javier por las aclaraciones,

Tendré que volver a los libros porque de Fourier no recuerdo prácticamente nada.... por tanto menos aún recuerdo la FFT :

Entonces deberé darle más que una mirada al tema.

Saludos,
  • 0

#8 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 08 abril 2009 - 08:38

Hey little Bro, que ocio tan bueno tienes :D (y)

Salud OS


jajajajajajaja , solo eso se te ocurre decirle al maestro. :D :D :D


Un Saludo.

PD:Esta bueno eso bro. (y)

#9 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 09 abril 2009 - 09:46

...un Vúmetro es un instrumento para visualizar los niveles de audio. Clásicamente eran instrumentos de aguja...


Claro de volúmen jejeje, adjunto la primea prueba :D

...Tendré que volver a los libros porque de Fourier no recuerdo prácticamente nada.... por tanto menos aún recuerdo la FFT :

Entonces deberé darle más que una mirada al tema...


Delphius; no tienes que aprender más que la teoria basica de lo que es FFT gracias a la ayuda de la libreria FMOD ;)

Salud!
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 09 abril 2009 - 11:56

Delphius; no tienes que aprender más que la teoria basica de lo que es FFT gracias a la ayuda de la libreria FMOD ;)

Salud!

Recuerda con quien estás hablando amigo, ¡con Delphius! Si no lo repaso bien no lo entiendo :p :s

¡Lo peor de todo es que cuando dí­ el final de redes hablé hermosamente del tema!... se vé que no me quedó nada :|. Eso me pasa por estudiarlo de memoria :

Pero bueno serí­a cuestión de ponerme a ver FMOD...
Revisando...

...

¿No le podrí­an haber agregado una función o procedimiento más no? :o  :p
¡Son más de 150! :o :s (cálculo a ojo)

Saludos,
  • 0

#11 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 10 mayo 2009 - 05:07

...¡Son más de 150! :o :s (cálculo a ojo)...


FMOD 3.75 Programmers API (incluye ejemplos y documentacion)

 

Habiéndoles presentado la librerí­a FMOD, ahora les presento otra librerí­a con facultades comparables, me refiero a la librerí­a bass que también es utilizada en numerosos proyectos multimedia facilitando principalmente el Audio streming. (En el ejemplo adjunto, se demuestra el uso de bass con un mí­nimo de verificación de errores)

Para hacerlo más llamativo se ha creado en el ejemplo una clase base simple (TVis) que permite escribir visualizaciones simples comentadas brevemente según í­ndice;

TVisOBlur
Imagen Enviada Es un analizador de espectro con efecto de bruma.

TVisOBRotate
Imagen Enviada Es un anailzador de espectro que cambia de color mientras gira contra las agujas del reloj dejando una bruma*.

TVisSwa
Imagen Enviada Es un analizador de espectro común que muestra las primeras frecuencias sonoras.

TVisVP
Imagen Enviada Es un "voice print" simple.

TVisOScale
Imagen Enviada Es un osciloscopio mostrado a una curva de tiempo reducida (falta optimizar).

TVisCFire
Imagen Enviada Es un osciloscopio mostrado en una circunferencia la cual "deja" un efecto de fuego simple.

TVisSpectrum
Imagen Enviada Es un analizador de espectro "normal".

TVisVol
Imagen Enviada Es un vúmetro (requiere optimización).

TVisOscilloscope
Imagen Enviada Es un osciloscopio simple.

TVisCTunel
Imagen Enviada Es un osciloscopio circular, base para crear un efecto de túnel 3d.

Como podrán ver en el cogido, todas las visualizaciones varí­an en cuanto a su complejidad, demostrando la creación de efectos visuales en pocas lí­neas.

Dejo 6 visualizaciones libres para que Uds. en sus momentos de ocio puedan completar el ejemplo. Solo deben crear una clase hija de TVis sobreescribir los métodos Clear y/o Process con su codigo y añadirlo en la creacion del formulario.

PD; el ejemplo incluye un "SeekBar" (parte inferior) y re-Open (click derecho sobre el formulario)

Enjoy!
  • 0




IP.Board spam blocked by CleanTalk.