Método Sonido

| domingo, 2 de mayo de 2010
Este ejemplo es tomado del sitio: http://www.faq-mac.com/cursos/flash/Capt7...

En este caso, vamos a ver el objeto sonido. El método que he utilizado para añadir los sonidos utiliza una vinculación de biblioteca. Esta forma de añadir sonidos hace que todos los sonidos se exporten en el primer fotograma, lo cual hace muy dificil hacer una versión web, ya que se exportan todos los sonidos.

Esta opción, permite un mayor control del evento sonido y es muy util para aplicaciones off-line (que no necesiten precarga) como Cd´s o intranets.

Es por todo esto que el ejercicio 7 sólo estará disponible para descargarlo.

Existen otras funciones para importar y trabajar con audios, ya sea cargándolos dinámicamente loadSound... o bien vinculándolos a bibliotecas compartidas, pero el comportamiento del objeto Sound, será el mismo que lo expuesto en este ejercicio.







Crear y colocar los elementos

Lo primero que haremos es crear y colocar los diferentes elementos que vamos a necesitar, en nuestra pantalla. Como en otras ocasiones, dividiremos en capas los elementos para tenerlos ordenados. Como son pocos, en este caso, tendremos una capa para los botones y textos, una capa para las acciones y otra para los fondos.

En la capa objetos, insertaremos los elementos necesarios.
Explico brevemente cada grupo siguiendo la imagen superior, (las líneas verdes no aparecen en el archivo flash), y más adelante indicaremos las funciones de cada botón.

Tres botones. Cada uno de ellos cargará un sonido. Aunque podríamos hacer que el sonido se cargase con una sóla función, para facilitar la compresión, he duplicado los códigos en los tres botones.

Dos botones. Play/Stop. Controlan la reproducción del sonido actual.

Volumen. Dos botones, uno para aumentar y otro para reducir. Un campo de texto de tipo Dinámico con nombre de variable Var: vol.

Tiempo. Una campo de texto de Introducción, con nombre de variable Var: tiempo_v, para poder indicar un segundo concreto del sonido y un botón para ir a ese segundo concreto.

Dos campos de texto de tipo Dinámico, con nombres de variable Var: duracion y total. En el campo duración almacenaremos los segundos que lleva el sonido y en el campo total, los segundos totales.

Dos botones, para desviar el sonido hacia el altavoz izquierdo o derecho.

Importando Audios

Flash permite importar los siguientes formatos de audio:

WAV (sólo en Windows)
AIFF (sólo en Macintosh)
MP3 (Windows o Macintosh)

Si tienes QuickTime 4 o posterior instalado en tu sistema podrás importar los siguientes formatos:

AIFF (Windows o Macintosh)
Sound Designer II (sólo en Macintosh)
Películas QuickTime sólo sonido (Windows o Macintosh)
Sun AU (Windows o Macintosh)
Sonidos System 7 (sólo en Macintosh)
WAV (Windows o Macintosh)

Para importar un sonido, seleccionaremos el menú Archivo, la opción Importar/Importar a biblioteca. Al hacerlo, nos mostrará una ventana de sistema en la cual podremos seleccionar el archivo. Una vez seleccionado, este archivo se coloca en la biblioteca.

Cuando tenemos todos los archivos de audio ubicados en la bibloteca, tenemos que vincularlos a un objeto . Mediante este proceso, lo que hacemos es identificar los sonidos de biblioteca como objetos que vamos a utilizar. Estos objetos de audio se cargarán con nuestra película, en el primero fotograma, y estarán presentes para que los llamemos cuando queramos.

Para vincular un sonido a un objeto (identificarlo), seleccionamos el sonido en la ventana biblioteca y con el botón derecho (windows) o pulsando en el sonido + Manzana (macintosh), nos aparecerá un menú con opciones de biblioteca, entre las cuales escogeremos Vinculación...

Cuando vinculamos un objeto de biblioteca, aparece una ventana dónde debemos indicar el nombre del objeto (casilla identificador) y marcar las opciones Exportar para ActionScript y Exportar en primer fotograma. Con esto, el sonido, con nombre sonido1, por ejemplo, estará disponible para utilizarlo desde el primer fotograma de nuestra película.

Haremos esta operación con los tres sonidos que hemos importado: los vincularemos y los denominaremos sonido1, sonido2, sonido3 respectivamente.

Insertamos la programación

Con todos los elementos (botones y textos) colocados en su sitio y los archivos de audio importados y vinculados, ya podemos comenzar a programar la interacción.

En el fotograma 1, de la capa Acciones, insertaremos el siguiente código:

s1 = new Sound();
s1.attachSound("sonido1");
//
s2 = new Sound();
s2.attachSound("sonido2");
//
s3 = new Sound();
s3.attachSound("sonido3");
//
var sonido_actual = "s1";
var tiempo_actual = 1;
var ejecutando = 0;
//
tiempo.restrict = "0-9";
//
this.onEnterFrame = function() {
if (ejecutando == 1) {
total = Math.floor(eval(sonido_actual).duration/1000);
duracion = Math.floor(eval(sonido_actual).position/1000);
}
}

Los tres primeros párrafos se utilizan para asociar los objetos de biblioteca a objetos dinámicos de flash.
La estructura es:

nombre objeto_dinámico=new Sound();
objeto_dinámico.attachSound("objeto de biblioteca");

Luego definimos tres variables, sonido_actual, tiempo_actual y ejecutando.

var sonido_actual = "s1";
var tiempo_actual = 1;
var ejecutando = 0;

Sonido_actual almacenará el valor del audio que esté sonando en ese momento (s1, s2 o s3). Al comenzar, indicamos que el sonido_actual es s1.

Tiempo_actual almacena el tiempo transcurrido hasta este momento, en el audio. Lo inicializamos a 1, para evitar un error en la división que veremos más adelante.

Ejecutando, almacenará dos valores, 1 o 0. 1 significará que hay un sonido reproduciéndose, 0 significará que no hay ningún sonido reproduciéndose.

La siguiente línea:

tiempo.restrict = "0-9";

Limita los caracteres que podemos introducir en la casilla de tiempo. Con la función restrict, limitamos dicha casilla a caracteres numéricos, bloqueando la inserción de otros caracteres.

Por último, está la función que controla el tiempo que lleva reproduciéndose el audio:

this.onEnterFrame = function() {
if (ejecutando == 1) {
total = Math.floor(eval(sonido_actual).duration/1000);
duracion = Math.floor(eval(sonido_actual).position/1000);
}
}

Esta función se ejecuta continuamente, y controla un valor, ejecutando. Si ejecutando tiene valor 1, un sonido se está reproduciendo. Si esto es así, hacemos que las casillas de texto total y duración reciban valores.

total, calcula la duración del audio que está sonando. Para ello, coge el valor .duration, que nos devuelve el tiempo total en milisegundos de un sonido.

duracion, calcula el tiempo transcurrido del audio que se está reproduciendo. Para ello, coge el valor .position, que nos devuelve el tiempo transcurrido en milisegundos de un sonido.

Acciones de los tres botones que cargan audios (Ver imagen superior)

on (press) {
stopAllSounds();
sonido_actual="s1";
s1.start();
s1.setVolume(vol);
ejecutando=1;
}

Este es el código del botón 1, el resto de botones son iguales, pero cambia el s1 por s2 o por s3, según el sonido a reproducir.

StopAllSounds(); Para todos los sonidos actuales. De esta manera evitamos que haya un efecto eco. Es una solución "drastica" y poco eficiente en programación. Lo lógico sería conocer cuales sonidos se están reproduciendo y parar dichos sonidos.

sonido_actual="s1"; de esta manera sabemos cual es el sonido que hemos seleccionado.

s1.start(); comenzamos a reproducir el sonido.

s1.setVolume(vol); Colocamos el volumen del sonido al valor que se haya introducido en la casilla vol.

ejecutando=1; Indicamos a nuestra aplicación, que hay un sonido ejecutándose.

Play | Stop (Ver imagen superior)

on (press) {
stopAllSounds();
eval(sonido_actual).start(duracion);
eval(sonido_actual).setVolume(vol);
ejecutando=1;
}

El botón de play, controla el sonido que está reproduciendose actualmente eval(sonido_actual) y lo comienza en el valor de duracion, un valor que como hemos visto antes, almacenará el tiempo transcurrido hasta el momento.

De esta manera si paramos una reproducción, podremos volver a retomarla en el segundo que la dejamos.

Stop
on (press) {
eval(sonido_actual).stop();
ejecutando=0;
}

El botón de stop, para el sonido actual eval(sonido_actual).stop() y define la variable de reproducción a 0, de manera que el sistema sabe que no hay ningún sonido ejecutándose.

Volumen (Ver imagen superior)

El grupo de volumen, tiene dos botoens, para aumentar el volumen y para reducirlo.

El botón para reducir de volumen:

on (press) {
if (vol>=10)
{
vol = Number(vol)-10;
eval(sonido_actual).setVolume(vol);
}
}

Comprueba que nuestro volumen sea mayor o igual a 10. Si cumple esta propiedad, resta 10 a vol. y establece el volumen del sonido .setVolume al valor que ha calculado (después de restarle 10)

El botón para aumentar de volumen:

on (press) {
if (vol<=90) {
vol = Number(vol)+10;
eval(sonido_actual).setVolume(vol);
}
}

Comprueba que nuestro volumen es menor o igual a 90. Si cumple esta propiedad, suma 10 a vol. y establece el volumen del sonido .setVolume al valor que ha calculado (después de sumarle 10)

Tiempo (Ver imagen superior)

El grupo de tiempo, tiene un campo de texto llamado tiempo_v dónde podemos insertar el valor que queramos y un botón con la siguiente acción.

on (press) {
stopAllSounds();
eval(sonido_actual).start(tiempo_v);
eval(sonido_actual).setVolume(vol);
ejecutando = 1;
}

Para todos los sonidos, empieza el sonido actual en el tiempo definido en tiempo_v, coloca el volumen según lo que esté escrito en la casilla vol y le indica al sistema que hay un sonido ejecutándose.

Variables (Ver imagen superior)

Dos campos de texto que almacenan los segundos totales del sonido actual y la cantidad de segundos reproducidos, según la función de fotograma

Altavoces (Ver imagen superior)

Con estos botones, controlamos los altavoces. Un botón nos desvia el audio al altavóz derecho y otro al altavóz izquierdo.

Izquierdo.
on (press) {
if (eval(sonido_actual).getPan()>-100)
{
eval(sonido_actual).setPan(eval(sonido_actual).getPan()-10);
}
}

Derecho
on (press) {
if (eval(sonido_actual).getPan()<100) class="Estilo20">
{
eval(sonido_actual).setPan(eval(sonido_actual).getPan()+10);
}
}

La función .setPan define dónde se desvía el audio.

Un pan de -100 significa que todo el audio se escucha con el altavoz izquierdo y un pan de 100 significa que se escucha por el derecho. Un pan de 0, indica que el sonido se reproduce por igual por ambos altavoces.

Y ya está...

Este ejercicio ha resultado más largo de lo que me hubiera gustado, pero el objeto sonido, su complejidad e implicaciones, lo merecía.

El próximo ejercicio, se centrará en hacer animaciones sencillas no con programación, sino a través de línea de tiempo.
Pequeños movimientos, órbitas, y efectos sencillos pero efectivos para nuestras animaciones.







Materiales del curso ( Lista completa )

ejercicio 7: Objeto Sonido
ejercicio 6: Operaciones matemáticas
ejercicio 5: Flash y javascript
ejercicio 4: Trabajo con Arrays
ejercicio 3: Pequeñas utilidades
ejercicio 2: Precarga/Galería de fotos
ejercicio 1: Cómo hacer un puzzle

Enlaces interesantes:
Una gran sorpresa de este verano, para aprender más de flash...
http://www.e-tonilopez.com/after-hours/phpBB2/index.php

En castellano
http://www.nomaster.com/
http://www.webexperto.com/flash/
http://www.lawebdelprogramador.com

Un maestro de flash y la integración con bases de datos
http://www.kadazuro.com/tutoriales

La comunidad Flash y de desarrolladores de código de Macuarium es muy útil para comenzar si eres maquero
http://www.macuarium.com/foro/

0 comentarios:

Publicar un comentario