2. ObjetivosObjetivos
Crear instancias de las clases Sound,Crear instancias de las clases Sound,
SoundChannel y SoundTransform.SoundChannel y SoundTransform.
Control de la carga y ejecución de unControl de la carga y ejecución de un
archivo MP3 externo.archivo MP3 externo.
Uso de la clase SoundTransform paraUso de la clase SoundTransform para
controlar el volumen y balance (paneo) decontrolar el volumen y balance (paneo) de
sonidossonidos
Uso de un componente deslizador (Slider)Uso de un componente deslizador (Slider)
para controlar los valores de la clasepara controlar los valores de la clase
SoundTransform.SoundTransform.
3. ObjetivosObjetivos
Uso de un arreglo para almacenar la listaUso de un arreglo para almacenar la lista
de reproducción de los archivo MP3s.de reproducción de los archivo MP3s.
Uso de los métodos de la clase TextFieldUso de los métodos de la clase TextField
para añadir y remover los caracteres depara añadir y remover los caracteres de
una variable cadena.una variable cadena.
Uso de las etiquetas ID3 de los archivosUso de las etiquetas ID3 de los archivos
MP3s para accesar información sobre elMP3s para accesar información sobre el
archivoarchivo
5. Añadir deslizadores (Sliders) alAñadir deslizadores (Sliders) al
proyectoproyecto
Los deslizadores son componentes deLos deslizadores son componentes de
interfase de usuario (UI) que nosinterfase de usuario (UI) que nos
regresarán un número dentro de unregresarán un número dentro de un
rango.rango.
El parámetroEl parámetro snapIntervalsnapInterval nos regresa losnos regresa los
valores en el rango que le indiquemos.valores en el rango que le indiquemos.
El parámetroEl parámetro tickIntervaltickInterval determina lasdetermina las
líneas que se dibujan en la parte superiorlíneas que se dibujan en la parte superior
del deslizador.del deslizador.
6. Añadir deslizadores (Sliders) alAñadir deslizadores (Sliders) al
proyectoproyecto
Los parámetrosLos parámetros maximummaximum yy minimumminimum
determina los números máximos ydetermina los números máximos y
mínimos del rago, respectivamente.mínimos del rago, respectivamente.
El valor del parámetroEl valor del parámetro valuevalue determina eldetermina el
valor por omisión y por tanto, la posiciónvalor por omisión y por tanto, la posición
del indicador del deslizador.del indicador del deslizador.
7. Las clases Sound,Las clases Sound,
SoundChannel ySoundChannel y
SoundTransformSoundTransform
Unidad 9Unidad 9
8. Las clases de sonidoLas clases de sonido
Los sonidos en AS3.0 se dividen en 4 clases:Los sonidos en AS3.0 se dividen en 4 clases:
– SoundSound: Sirve para cargar el archivo externo y: Sirve para cargar el archivo externo y
reproducirlo.reproducirlo.
– SoundChannelSoundChannel: Esta clase sirve para administrar: Esta clase sirve para administrar
los canales (hasta 16) y recibe la clase para controlarlos canales (hasta 16) y recibe la clase para controlar
el volumen y el balance de los mismos. Cada objetoel volumen y el balance de los mismos. Cada objeto
SoundChannel es controlado individualmente.SoundChannel es controlado individualmente.
– SoundTransformSoundTransform : Nos sirve para controlar el: Nos sirve para controlar el
volumen y el balance (paneo) del sonido.volumen y el balance (paneo) del sonido.
– SoundMixerSoundMixer: (No se ve en este ejercicio) funciona: (No se ve en este ejercicio) funciona
para mezclar los sonidos de cada uno de los objetospara mezclar los sonidos de cada uno de los objetos
SounChannel.SounChannel.
9. Las clases de sonidoLas clases de sonido
Los pasos para cargar y ejecutar un sonido deLos pasos para cargar y ejecutar un sonido de
un archivo externo son:un archivo externo son:
– Crear los objetos de sonido (Sound, SoundChannel yCrear los objetos de sonido (Sound, SoundChannel y
SoundTransform).SoundTransform).
– Cargar el archivo externo mediante el objeto Sound.Cargar el archivo externo mediante el objeto Sound.
– Modificar los parámetros de volumen y paneo en elModificar los parámetros de volumen y paneo en el
objeto SoundTransform.objeto SoundTransform.
– Ejecutar el sondo desde el objeto SoundChannelEjecutar el sondo desde el objeto SoundChannel
– Asociar el objeto de transformación al objetoAsociar el objeto de transformación al objeto
SoundChannelSoundChannel
10. Las clases de sonidoLas clases de sonido
Nota: Como cortesía al usuario, siempre hayNota: Como cortesía al usuario, siempre hay
que mantener el sonido al 50% del volumen. Sique mantener el sonido al 50% del volumen. Si
lo mantiene en 100% podría resultar incómodolo mantiene en 100% podría resultar incómodo
para el usuario de su aplicación.para el usuario de su aplicación.
Si programa en la línea de tiempo, no esSi programa en la línea de tiempo, no es
necesario importar las clases de sonido, ya quenecesario importar las clases de sonido, ya que
se encuentran en el paquete “flash”se encuentran en el paquete “flash”
Si programa OOPs, deberá importar las clases:Si programa OOPs, deberá importar las clases:
import flash.media.Sound;import flash.media.Sound;
12. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Para poder desplegar los títulos de lasPara poder desplegar los títulos de las
canciones en los botones, tenemos quecanciones en los botones, tenemos que
acceder a los campos de texto dentro deacceder a los campos de texto dentro de
cada uno de los botones.cada uno de los botones.
A esta práctica común en Flash, deA esta práctica común en Flash, de
introducir un objeto dentro de otrointroducir un objeto dentro de otro
(anidación) lo conocemos como(anidación) lo conocemos como
““targetingtargeting””
13. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
En este caso, deseamos introducir a la caja deEn este caso, deseamos introducir a la caja de
texto “title”, que se encuentra dentro de cadatexto “title”, que se encuentra dentro de cada
uno de los botones, el nombre de la canción.uno de los botones, el nombre de la canción.
Para ello podemos acceder a la caja mediante laPara ello podemos acceder a la caja mediante la
siguiente instrucción:siguiente instrucción:
this.song1.title.text = “NombreCancion”;this.song1.title.text = “NombreCancion”;
Observe que el proceso para acceder aObserve que el proceso para acceder a
recursos en Flash, es parecido a manejarrecursos en Flash, es parecido a manejar
carpetas en el sistema operativo, sólo que encarpetas en el sistema operativo, sólo que en
lugar de diagonales (“/”) utilizamos puntos.lugar de diagonales (“/”) utilizamos puntos.
14. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Podríamos repetir esta sentencia paraPodríamos repetir esta sentencia para
cada uno de los 6 botones de la siguientecada uno de los 6 botones de la siguiente
forma:forma:
this.song1.title.text = “NombreCancion1”;this.song1.title.text = “NombreCancion1”;
this.song2.title.text = “NombreCancion2”;this.song2.title.text = “NombreCancion2”;
this.song3.title.text = “NombreCancion3”;this.song3.title.text = “NombreCancion3”;
this.song4.title.text = “NombreCancion4”;this.song4.title.text = “NombreCancion4”;
this.song5.title.text = “NombreCancion5”;this.song5.title.text = “NombreCancion5”;
this.song6.title.text = “NombreCancion6”;this.song6.title.text = “NombreCancion6”;
15. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Ahora suponga que tiene 100 botones. LaAhora suponga que tiene 100 botones. La
forma anterior no sería práctica.forma anterior no sería práctica.
Una mejor práctica es utilizar un cicloUna mejor práctica es utilizar un ciclo forfor
para llenar cada uno de los botones.para llenar cada uno de los botones.
Para ello debemos utilizar la propiedadPara ello debemos utilizar la propiedad
lengthlength de la clase Array, la cual regresa elde la clase Array, la cual regresa el
número de elementos de un arreglo.número de elementos de un arreglo.
Recuerde que los arreglos siempre inicianRecuerde que los arreglos siempre inician
del índice 0 (cero).del índice 0 (cero).
16. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Otro punto fundamental es hacerOtro punto fundamental es hacer
referencia a los objetos en formareferencia a los objetos en forma
dinámica.dinámica.
Si coloca una cadena como referencia,Si coloca una cadena como referencia,
ActionScript le mandará un mensaje deActionScript le mandará un mensaje de
error:error:
““song”+i = songList[i];song”+i = songList[i];
17. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Para ello hay que evaluar en formaPara ello hay que evaluar en forma
dinámica la cadena o variable condinámica la cadena o variable con
corchetes, por ejemplo:corchetes, por ejemplo:
this[“song”+i].title.text = songList[i];this[“song”+i].title.text = songList[i];
Esta expresión la toma el compilador y laEsta expresión la toma el compilador y la
interpreta como (que es lo queinterpreta como (que es lo que
buscamos):buscamos):
song1.title.text = songList[i];song1.title.text = songList[i];
18. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Finalmente el ciclo quedará de laFinalmente el ciclo quedará de la
siguiente forma:siguiente forma:
for(var i=0; i<songList.length; i++){for(var i=0; i<songList.length; i++){
this[“song”+i].title.text = songList[i];this[“song”+i].title.text = songList[i];
}}
En el ejemplo anterior, se generaría elEn el ejemplo anterior, se generaría el
objetoobjeto song0song0, el cual no existe y el, el cual no existe y el
compilador nos enviaría un mensaje decompilador nos enviaría un mensaje de
error.error.
19. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Para solucionar este problema, debemosPara solucionar este problema, debemos
sumarle 1 (uno) al índicesumarle 1 (uno) al índice ii..
Si lo hiciéramos directamente, noSi lo hiciéramos directamente, no
conseguiríamos lo que deseamos:conseguiríamos lo que deseamos:
trace(“song”+i+1); // song01trace(“song”+i+1); // song01
Para ello debemos dePara ello debemos de agruparagrupar la suma parala suma para
cambiar lacambiar la precedenciaprecedencia..
Los paréntesis nos servirán para cambiar laLos paréntesis nos servirán para cambiar la
precedencia, es decir, el orden en que seprecedencia, es decir, el orden en que se
efectúan las operaciones.efectúan las operaciones.
20. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Para cambiar la precedencia de laPara cambiar la precedencia de la
expresión anterior, se podría escribirexpresión anterior, se podría escribir
(suponiendo que i=0):(suponiendo que i=0):
trace(“song”+(i+1)); //song1trace(“song”+(i+1)); //song1
Las instrucciones para desplegar losLas instrucciones para desplegar los
títulos de las canciones en los botonestítulos de las canciones en los botones
quedaría de la siguiente forma:quedaría de la siguiente forma:
for(var i=0; i<songList.length; i++){for(var i=0; i<songList.length; i++){
this[“song”+(i+1)].title.text = songList[i];this[“song”+(i+1)].title.text = songList[i];
}}
21. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
El resultado es que las canciones seEl resultado es que las canciones se
despliegan con el nombre del archivodespliegan con el nombre del archivo
másmás la extensión mp3.la extensión mp3.
Para quitar la extensión de los botones laPara quitar la extensión de los botones la
eliminaremos con el métodoeliminaremos con el método replace()replace()
(nuevo en AS3.0).(nuevo en AS3.0).
El métodoEl método replacereplace cambia busca unacambia busca una
subcadena y si la encuentra, la cambiasubcadena y si la encuentra, la cambia
por otra.por otra.
22. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Por ejemplo:Por ejemplo:
var cadena:String = “foto.jpg”;var cadena:String = “foto.jpg”;
cadena = cadena.replace(“jpg”, “gif”);cadena = cadena.replace(“jpg”, “gif”);
trace(cadena); //foto.giftrace(cadena); //foto.gif
Si desea eliminar una subcadena,Si desea eliminar una subcadena,
sustitúyala por una cadena vacía:sustitúyala por una cadena vacía:
var cadena:String = “foto.jpg”;var cadena:String = “foto.jpg”;
cadena = cadena.replace(“.jpg”, “”);cadena = cadena.replace(“.jpg”, “”);
trace(cadena); //fototrace(cadena); //foto
23. Desplegar los títulos mediante unDesplegar los títulos mediante un
ciclociclo
Por último de esta sección, es una buenaPor último de esta sección, es una buena
práctica quitar de las manos del usuariopráctica quitar de las manos del usuario
todo aquello que pudiera causar algúntodo aquello que pudiera causar algún
problema si aún no esta listo, por lo queproblema si aún no esta listo, por lo que
quitaremos la visibilidad de losquitaremos la visibilidad de los
deslizadores hasta que el usuario hayadeslizadores hasta que el usuario haya
seleccionado una canción:seleccionado una canción:
panSlide.visible = false;panSlide.visible = false;
volSlide.visible = false;volSlide.visible = false;
24. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Unidad 9Unidad 9
25. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Para cada uno de los botones, debemos crearPara cada uno de los botones, debemos crear
un detector de eventos que lance la canciónun detector de eventos que lance la canción
seleccionada.seleccionada.
Lo anterior lo podemos hacer de forma dinámicaLo anterior lo podemos hacer de forma dinámica
o escribir uno escribir un listenerlistener para cada uno.para cada uno.
Una ves realizada la selección, debemosUna ves realizada la selección, debemos
determinar cuál canción fue seleccionada.determinar cuál canción fue seleccionada.
Esa información la tendremos en elEsa información la tendremos en el eventObjecteventObject,,
en la propiedaden la propiedad currentTargetcurrentTarget..name.name.
26. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Para seleccionar cada una de las cancionesPara seleccionar cada una de las canciones
podemos utilizar 6 estructuras condicionespodemos utilizar 6 estructuras condiciones if()if(), u, u
optar por una estructuraoptar por una estructura switch()switch()..
Como se vio en el capítulo 8, p165, la estructuraComo se vio en el capítulo 8, p165, la estructura
switch() crea una estructura ramificada paraswitch() crea una estructura ramificada para
sentencias de ActionScript.sentencias de ActionScript.
Al igual que la sentencia if, la sentenciaAl igual que la sentencia if, la sentencia switchswitch
prueba una condición y ejecuta sentencias si laprueba una condición y ejecuta sentencias si la
condición devuelve un valorcondición devuelve un valor truetrue..
27. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Todas las sentenciasTodas las sentencias switchswitch deberíandeberían
incluir un caso predeterminado.incluir un caso predeterminado.
El caso predeterminado debería incluirEl caso predeterminado debería incluir
una sentenciauna sentencia breakbreak para evitar un errorpara evitar un error
de paso al siguiente caso si se añadede paso al siguiente caso si se añade
posteriormente otro caso. Cuando se pasaposteriormente otro caso. Cuando se pasa
al siguiente caso, no se incluye unaal siguiente caso, no se incluye una
sentenciasentencia breakbreak..
28. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Una práctica común en la programaciónUna práctica común en la programación
orientada a objetos (oop) es determinar siorientada a objetos (oop) es determinar si
un objeto existe o no, pues el volverlo aun objeto existe o no, pues el volverlo a
crear nos marcaría un mensaje de error.crear nos marcaría un mensaje de error.
En este caso, necesitamos verificar si elEn este caso, necesitamos verificar si el
objeto existe para detener la canciónobjeto existe para detener la canción
previa.previa.
Los objetos que aún no están definidos,Los objetos que aún no están definidos,
tienen un valor predeterminado detienen un valor predeterminado de nullnull..
29. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Para ello, necesitamos determinar si elPara ello, necesitamos determinar si el
objeto existe antes de detener el sonido.objeto existe antes de detener el sonido.
Si no existe y lo queremos detener, elSi no existe y lo queremos detener, el
compilador nos enviará un mensaje decompilador nos enviará un mensaje de
error. La sentencia para ello es:error. La sentencia para ello es:
if(snd != null){if(snd != null){
channel.stop();channel.stop();
}}
30. Programar los botones paraProgramar los botones para
seleccionar una canciónseleccionar una canción
Para cargar un archivo externoPara cargar un archivo externo
necesitamos crear un objeto URLRequest.necesitamos crear un objeto URLRequest.
En esta rutina crearemos las instancias deEn esta rutina crearemos las instancias de
los objetos y ejecutaremos el sonido:los objetos y ejecutaremos el sonido:
channel = snd.play();channel = snd.play();
Asignamos el objeto de transformaciónAsignamos el objeto de transformación
para manejar volumen y sonido:para manejar volumen y sonido:
channel.soundTransform = trans;channel.soundTransform = trans;
31. Controlar la visibilidad delControlar la visibilidad del
volumen y del balance devolumen y del balance de
los sonidoslos sonidos
Unidad 9Unidad 9
32. Controlar la visibilidad del volumenControlar la visibilidad del volumen
y del balance de los sonidosy del balance de los sonidos
Una ves que el usuario ha seleccionado elUna ves que el usuario ha seleccionado el
botón, hacemos visibles los deslizadoresbotón, hacemos visibles los deslizadores
cambiando la propiedadcambiando la propiedad visiblevisible aa
verdadero.verdadero.
También desplegaremos el valor delTambién desplegaremos el valor del
paneo y del volumen, para ellopaneo y del volumen, para ello
multiplicaremos la fracción por 100.multiplicaremos la fracción por 100.
33. Controlar la visibilidad del volumenControlar la visibilidad del volumen
y del balance de los sonidosy del balance de los sonidos
Para redondear los decimales, podemosPara redondear los decimales, podemos
utilizar la función int() o los métodosutilizar la función int() o los métodos
Math.round() (redondea de .5 paraMath.round() (redondea de .5 para
arriba) , Math.floor() (trunca siemprearriba) , Math.floor() (trunca siempre
abajo) o Math.ceil() (Redondea siempreabajo) o Math.ceil() (Redondea siempre
para arriba).para arriba).
34. Añadir unAñadir un listenerlistener parapara
detectar las etiquetas de losdetectar las etiquetas de los
archivo MP3sarchivo MP3s
Unidad 9Unidad 9
35. Añadir unAñadir un listenerlistener para detectar laspara detectar las
etiquetas de los archivo MP3setiquetas de los archivo MP3s
Los archivos MP3 pueden ser codificadosLos archivos MP3 pueden ser codificados
con etiquetas (cadenas) que contengancon etiquetas (cadenas) que contengan
información sobre sus contenidos.información sobre sus contenidos.
El formato de etiquetas MP3 que aceptaEl formato de etiquetas MP3 que acepta
Flash es el ID3.Flash es el ID3.
Por ejemplo, un archivo MP3 puedePor ejemplo, un archivo MP3 puede
contener el nombre de la canción, sucontener el nombre de la canción, su
autor, el nombre del album, el número deautor, el nombre del album, el número de
pista, etc.pista, etc.
36. Añadir unAñadir un listenerlistener para detectar laspara detectar las
etiquetas de los archivo MP3setiquetas de los archivo MP3s
Flash puede detectar si el archivo deFlash puede detectar si el archivo de
sonido tiene dichas etiquetas, y envía unsonido tiene dichas etiquetas, y envía un
evento si es el caso.evento si es el caso.
Podemos verificar si las etiquetas sePodemos verificar si las etiquetas se
encuentran vacías o contienenencuentran vacías o contienen
información por medio del valorinformación por medio del valor nullnull..
Vaciaremos la información en la caja deVaciaremos la información en la caja de
textotexto infoinfo..
37. Añadir unAñadir un listenerlistener para detectar laspara detectar las
etiquetas de los archivo MP3setiquetas de los archivo MP3s
Para añadir texto a una cadena que yaPara añadir texto a una cadena que ya
existe, debemos utilizar el métodoexiste, debemos utilizar el método
appendText(), exclusivo de AS 3.0.appendText(), exclusivo de AS 3.0.
38. Añadir un objeto deAñadir un objeto de
formateo de textoformateo de texto
Unidad 9Unidad 9
39. Añadir un objeto de formateo deAñadir un objeto de formateo de
textotexto
Para poder darle formato a un texto, sePara poder darle formato a un texto, se
puede crear el objeto de la clasepuede crear el objeto de la clase
TextFormat.TextFormat.
Dentro de este, se puede darle un valor alDentro de este, se puede darle un valor al
parámetroparámetro urlurl para hacer un hipertexto.para hacer un hipertexto.
40. Añadir los controles aAñadir los controles a
los deslizadoreslos deslizadores
Unidad 9Unidad 9
41. Añadir los controles a losAñadir los controles a los
deslizadoresdeslizadores
Por último activaremos los deslizadoresPor último activaremos los deslizadores
por medio de detectores de eventospor medio de detectores de eventos
(listeners).(listeners).
El evento CHANGE se encuentra en laEl evento CHANGE se encuentra en la
clase SliderEvent, la cual fue importada alclase SliderEvent, la cual fue importada al
inicio del ejercicio.inicio del ejercicio.
Los nuevos datos los cargaremos en elLos nuevos datos los cargaremos en el
objeto de transformación y lo asignaremosobjeto de transformación y lo asignaremos
al canal de sonido (SoundChannel).al canal de sonido (SoundChannel).
43. Preguntas de revisiónPreguntas de revisión
¿Con cuál de las tres clases de ActionScript¿Con cuál de las tres clases de ActionScript
usted puede cargar, ejecutar y controlar unusted puede cargar, ejecutar y controlar un
archivo externo de sonido?archivo externo de sonido?
¿Cuáles son las dos propiedades de un¿Cuáles son las dos propiedades de un
archivo de sonido que usted puede controlararchivo de sonido que usted puede controlar
con la clasecon la clase SoundTransformSoundTransform??
¿Cuál es el método de la clase¿Cuál es el método de la clase TextFieldTextField queque
sirve para remplazar texto en una cadena?sirve para remplazar texto en una cadena?
44. Preguntas de revisiónPreguntas de revisión
¿Cuál es el método para añadir texto a¿Cuál es el método para añadir texto a
una cadena ya existente?una cadena ya existente?
¿Cuál es el evento de la clase¿Cuál es el evento de la clase SoundSound
que responde cuando se detectanque responde cuando se detectan
etiquetas ID3 de un archivo de sonidoetiquetas ID3 de un archivo de sonido
tipotipo MP3sMP3s??