Cristalab

                 ¿Quieres registrarte?

Ecualizador de sonido con el microfono en Flash

3 de Diciembre del 2006
15,658 visitas

Bueno, dejo aquí un código que emplea el micrófono y números aleatorios para simular un ecualizador (no tiene nada que ver con la modulación de voz, sólo con el volumen). Simplemente peguen este código en el primer fotograma de una película nueva. El código es todo lo que hace falta. Luego le dan CTRL+ENTER y hablan

Código :

//
var vertices:Number = 120;
var distBordes:Number = 80;
var altoMax:Number = 150;
//
var ancho:Number = 550;
var alto:Number = 400;
//
var distVertices = (ancho-distBordes*2)/vertices;
//
//
this.createEmptyMovieClip("grafico", this.getNextHighestDepth());
this.createEmptyMovieClip("sonido", this.getNextHighestDepth());
//
//
var microfono:Microphone = Microphone.get();
microfono.setSilenceLevel(80);
sonido.attachAudio(microfono);
//
this.onEnterFrame = function() {
   volumen = microfono.activityLevel;
   //
   graficar(volumen);
};
//
//
var graficar:Function = function (vol:Number) {
   //
   grafico.clear();
   //
   verde = (vol>50) ? vol-1 : 50;
   color = "0x00"+(verde)+"00";
   //
   grafico.lineStyle(.8, color);
   //
   grafico.moveTo(0, alto/2);
   grafico.lineTo(distBordes, alto/2);
   //
   for (i=1; i<vertices; i++) {
      //
      if (Math.round(Number(random(2))) == 1) {
         altura = alto/2+(Number(random(vol))/100)*altoMax;
      } else {
         altura = alto/2-(Number(random(vol))/100)*altoMax;
      }
      grafico.lineTo(distBordes+(distVertices*i), altura);
   }
   grafico.lineTo(ancho-distBordes, alto/2);
   grafico.lineTo(ancho, alto/2);
};
Otros usos podrían ser: modificar la boca de un personaje animado para que parezca que está hablando. Usar la clase micrófono y su propiedad activityLevel para detectar períodos de inactividad. Y si, siempre hay algo de ruido de fondo, pero se puede setear como "volumen de silencio" el volúmen máximo registrado durante un período en el que se pide al usuario que haga silencio o setearlo como 40 ó 50, un número más o menos normal de ruido de fondo.

No dejo el .fla o el .swf porque este código es lo único que hay en toda la película.

Espero que lo entiendan aún cuando no tiene comentarios (las dos barras están para organizar visualmente el código separando partes que hacen cosas totalmente distintas).

Saludos :wink:


Artículos Relacionados


Etiquetas actionscript

Comentarios | Enviar un comentario
Lindo efecto, HernanRivas. Por ahi hay un ejemplo que tengo pendiente de publicación con una aplicación muy creativa de esto.
Por: F®_blog
Buena idea. Muy creativo (y)
Por: Zah
es chevere para mi tesis que presentare en dos años
jejejej
gracias brother por esta ayudita que encontreee...!!!
XD
Por: Santo Fz_blog
el programa meparece muy curioso, y se ve que detecta la voz, pero queria hacer una pregunta. Se puede guardar el audio?
Por: juan_blog
No, no se puede grabar sonido con AS2, con AS3 no lo sé, pero supongo que es la misma respuesta.
Por: HernanRivas
Me imagino que más o menos así serán los sistemas para detectar la voz, digo yo (Claro mejorado).
¿Se podrá grabar las ecualizaciones generada?
Por: torrealbaruben
Si, pero en realidad, no es una ecualización "verdadera". Emplea números aleatorios para emular el efecto de un verdadero ecualizador.

Pero, de todos modos, se puede guardar. Hay 2 maneras. La más inútil es guardar en un Array la posición de cada punto dibujado. Por otro lado, hay un modo práctico, como el equalizador genera la equalización "al azar", sólo es necesario guardar los valores de volumen que recoje del micrófono y reproducirlos después (aunque la equalización no va a ser idéntica).
Por: HernanRivas
quisiera saber como grabar audio... he estado investigando... dices que no se puede pero yo vi una curiosa pagina que inclusive grababa video, es decir grababa el audio y el video de tu camara y tu microfono y despues lo podias reproducir... la idea de la pagina era que grabaras un video clip y lo enviaras por correo a alguna persona... me gustaria poder hacer eso... pero no logro dar con ello... ¿podrias ayudarme?
Por: Guillermo_blog
Hasta donde sé (sabía) no se puede, asi que no te puedo ayudar, pero podrías poner el link?
Por: HernanRivas
mira acá hay un sitio que lo hace, (graba el audio y/o el video) luego lo envía, todo en flash:

http://www.quieroverunfantasma.com/

tienes que verlo hasta el final....

P.D.: dá miedo, pero está hecho a propósito. (y no, esto no es spam)
Por: LuisinLandaes_blog
Perdón que escriba de nuevo (y enseguida), el caso es que he estado investigando el asunto (porque necesito hacerlo para un proyecto) y creo (ojo, creo) que hay que hacerlo con Flash comunication Server, pero hasta allì es todo lo que sé.
Por: LuisinLandaes_blog
tambien estoy en la misma. quiero hacer un flash que me permita grabar un audio atravez de flash y reproducirlo.

lo que se hasta el minuto que se puede hacer con un panel de control en red5 pero no se si se puede subir en la web.

si fuese asi. seria la oportunidad .
Por: hernan cortes - diseñador
Para grabar, tanto vídeo como audio desde una aplicación flash, se necesita tener un servidor de streaming, ya sea el que proporciona macromedia que es Flash Media Server, o bien uno de software libre basado en java que se llama red5, algo más difícil de configurar, pero gratis y que funciona perfectamente.

Una vez instalado el servidor, utilizaremos los siguientes clases en flash:
NetConnection - Para conectar.
Microphone - Capturar el microfono
Camera - Campturar el video
NetStream - Transmitir tanto audio, y video.

Para ver ejemplos de funcionamiento podéis
ir a esta página:
http://www.adobe.com/devnet/flashmediaserver/
Por: Jose Manuel http://innova
hola, estoy con un proyecto y no se como utilizar el ActivityLevel para q pasando un umbral (por ej 75) pase de frame o scene, y de esta forma utilizar el mic como boton, se les ocurre como puedo hacer?
Por: cristian_blog
pseudocódigo:

Código :

stop ();
this.onEnterFrame = function () {
if (micorofono.activityLevel > 75) {
play ();
}
};

Por: HernanRivas
MIL GRACIAS HERNAN RIVAS!!!

me funciono muy bien, apenas termine mi proyecto te paso el link para q lo veas.

saludos!
Por: cristian_blog
Mi no entenderrr!...segun este tutorial, solo hay que pegar el codigo en el primer fotograma, presionar ctrl+enter y hablar, hice esas tres sencillas cosas y no veo absolutamente ningun resultado...què me falta?.

Gracias. :crap:
Por: Gabrielito
32 color = "0x00"+(verde)+"00";

Case-insensitive identifier 'color' will obscure built-in object 'Color'.

Me manda este mensaje de error en la linea 32 del codigo y la pelicula flash sigue siendo solo un recuadro (en mi caso) color blanco sin nada mas....cero resultados!.
Por: Gabrielito
Una pregunta... es necesario el servidor de streaming para que grafique (no grabe) el volumen de la voz... de ser asi... donde lo bajo o consigo o adquiero...

gracias
Por: Kutai-blog
De nuevo yo... lo de la "boca animada" que comenta HernanRivas, como es posible?
Por: Kutai-blog
Hola Hernan, querría saber si se puede desarrollar un Frecuencimetro para detectar las notas musicales de una guitarra por ejemplo por medio del micrófono como en los afinadores java pero en flash.
Por: Federico-blog
hernán, dices.. que hay 2 formas de guardar el sonido, esto seria temporalmente sin usar un servidor ni nada?... si es asi las ondas que qegera el ecualizador son aleatorias.. por tanto no va a reproducir lo que dices.. ya que se distorsionara.. hay forma de que las ondas del ecualizador sean mas exactas??...


saludos y gracias de antemano ;)

Hay 2 maneras. La más inútil es guardar en un Array la posición de cada punto dibujado. Por otro lado, hay un modo práctico, como el equalizador genera la equalización "al azar", sólo es necesario guardar los valores de volumen que recoje del micrófono y reproducirlos después (aunque la equalización no va a ser idéntica).
Por: John-blog
He estado pensando en como hacer que al hablar por el microfono se haga una previsualizacion en fractal, he estado pensando en incorporar el sistema fractal desarrollado por Freddie®, con este ejemplo. Solo que no entiendo muy bien ninguno de los dos codigos. Bueno este lo entiendo algo.
Por: ytfreak
hola, a los que lo les funciona: es porque es para actionScript 2.0.

mola un montonr! se pueden sacar muchas cosas de ese codigo, no lo tienes para as3??
salut
Por: alfonsofonso-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.