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.
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ú , la opción . 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.
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.
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.
0 comentarios:
Publicar un comentario