Vídeo y sonido (player)

El mecanismo básico de utilización de archivos de audio y animación está soportado por la instrucción play, pero la complejidad de estos archivos y la necesidad de mantener el tamaño del motor de una herramienta de autor en unos valores mínimos hacen recomendable poder descargar esta tarea en aplicaciones externas.

Para ver el funcionamiento de este objeto recurriré a un extracto del ejemplo didáctico, que sobre MetaCard realizó Antonio Serrano. La aplicación completa muestra algunos aspectos de MetaCard: controles básicos y ejemplos de código en funcionamiento. La Figura 4-24 muestra una sencilla botonera para controlar el vídeo que se reproduce en el centro de la misma. Obsérvese que el nombre se ha fijado, pero no se ha importado en la pila, si no que se incorpora desde el sistema de archivos en disco en el momento de la ejecución, lo que permitirá cambiarlo entre dos ejecuciones diferentes. Esto se muestra en el siguiente código:

#
# La tarjeta ("clip")
global nomvideo
on preOpenCard
  hide group aviso
  put " " into field vol
  put "video1.avi" into nomvideo
  put " " into field instruccion
end preOpenCard

on closeCard
  play stop videoClip  "videos\" & nomvideo
end closeCard
                  

Figura 4-24. Utilización de "play VideoClip".

Los controles específicos del vídeo son implementados con una intrucción que es copiada en un campo de mensajes para apoyar la parte didáctica de la aplicación. Así tenemos:

#
# Botón "play"
global nomvideo
on mouseUp
  play videoClip "videos\" & nomvideo
  put "play videoClip <nombre>" into field instruccion
end mouseUp

#
# Botón "looping"
global nomvideo
on mouseUp
  play videoClip "videos\" & nomvideo looping
  put "play videoClip <nombre> looping" into field instruccion
end mouseUp

#
# Botón "stop"
global nomvideo
on mouseUp
  play stop videoClip  "videos\" & nomvideo
  put "play stop videoClip <nombre>" into field instruccion
end mouseUp

#
# Botón "pause"
global nomvideo
on mouseUp
  play pause videoClip  "videos\" & nomvideo
  put "play pause videoClip <nombre>" into field instruccion
end mouseUp

#
# Botón "resume"
global nomvideo
on mouseUp
  play resume videoClip "videos\" & nomvideo
  put "play resume videoClip <nombre>" into field instruccion
end mouseUp

#
# Botón "back"
global nomvideo
on mouseUp
  play step back videoClip "videos\" & nomvideo
  put "play step back videoClip <nombre>" into field instruccion
end mouseUp

#
# Botón "forward"
global nomvideo
on mouseUp
  play step forward videoClip "videos\" & nomvideo
  put "play step forward videoClip <nombre>" into field instruccion
end mouseUp
                       

Nota: Ah, permítame una liger observación: las barras invertidas ("\") deberían ser, simplemente, barras ("/") por aquello de realizar un producto multiplataforma. La utilización de turas relativas permitiría un fácil transporte de la pila de un espacio físico a otro en el sistema de archivos de la máquina.

Pero con el devenir de las versiones de MetaCard hemos visto aparecer el objeto "player", que permite dejar esta tarea en manos de aplicaciones específicas: Xanim en plataforma Unix™, Media Player o QuickTime en Windows™ y Macintosh™. La definición básica de este contenedor la podemos ver en la figura Figura 4-25.

Figura 4-25. Aspecto y propiedades de un objeto tipo "player" (barra de desplazamiento).

Trabajar con estos controles es tanto o más sencillo que con la instrucción play. Ahora tenemos la posibilidad de fijar su posición en una tarjeta y los controles son más preciso. Un ejemplo simple de aplicación que dispone de un campo de texto (de nombre "y", un player (llamado "x") y un botón, cuya pulsación pone en marcha o para la reproducción del vídeo. En función del botón utilizado como se muestra a continuación:

# Botón
if quinBoto es 1 
 then
  set the filename of player "x" to fld "y"
  start player "y" 
 else
  stop player "y" 
end if