La Catedral del Ruido |
Para hacer tu mundo más interesante, puedes agregarle sonido. Estos pueden ser sonidos de ambiente, timbres, sirenas, lo que mejor te parezca.Todo esto se hace con dos tipos de nodos, Sound y AudioClip. Puedes imaginar al nodo Sound como la especificación del lugar en que se va a escuchar el soido, y en donde se origina. El propio sonido se especifica en el nodo AudioClip. En primer lugar, veremos el nodo Sound.
El sonido
El nodo Sound se usa para especificar la posicion y orientación
de una fuente de sonido en tu mundo. El nodo Sound se coloca
en un cierto lugar, y podrás oir ol sonido dependiendo del lugar
en que te coloques en la escena respecto al sonido. El sonido se emite
con un patrón elíptico, como se muestra en el cuadro de abajo:
Dentro del área roja, el sonido se oye con plena intensidad. Dentro del área amarilla, el sonido se desvanece segun la distancia del origen. Los campos minFront, maxFront, minBack y maxBack especificados en el nodo Sound son las distancias que miden esto, asi como la dirección. La sintaxis del nodo Sound es como sigue:
Sound { SFVec3f direction 0 0 1 SFFloat intensity 1 SFVec3f location 0 0 0 SFFloat maxBack 10 SFFloat maxFront 10 SFFloat minBack 1 SFFloat minFront 1 SFFloat priority 0 SFNode source NULL SFBool spatialize TRUE }
Los demás campos operan de la siguiente manera: direction es un vector que especifica la dirección a donde apunta el nodo sound. El campo intensity es el volumen del sonido. Un valor de 1 es volumen pleno, tal como se encuentra en el archivo original , y 0 es silencio. situation es la posición de la fuente de sonido en el mundo. Los cuatro parámetros max/min de Front/Back especifican la forma de la elipse correspondiente al diagrama de arriba. Por ejemplo, para tener un sonido que sea igualmente audible en todas las direcciones, tendrías el maxFront=maxBack, y minFront=minBack. Si no quisieras que este sonido disminuyera con la distancia, tendrías que poner todos los valores a la misma distancia, la cual deberá ser bastante grande como para cubrir tu mundo entero. Si quieres que el sonido vaya apagandose con la distancia, pon los valores máximos a 10 y los valores min darán una proporcion realista de caida.
El campo priority es la importancia del sonido. El navegador tendrá sólo un cierto número de canales de sonido disponibles para a él, y priority se utiliza para determinar cual de ellos se utilizará. Este campo toma valores de 0 a 1. Los sonidos de fondo de baja prioridad deben tener un valor de 0, y los prioritarios, sonidos cortos como timbres o lo que sea, deben tener un valor de 1.
El campo spatialize es usado por el navegador para determinar si debe espacializar el sonido. Esto significa que lo hara sonar a través de los altavoces como si viniera de su origen, y entonces oirás el sonido moviendose cuando te muevas relativamente a él. Si este campo es FALSE, el navegador no hará esto. Esto es útil para la optimización y para la creación de sonidos ambientales.
Sólo nos falta un campo del nodo Sound, y es el campo source (fuente, origen). Es realmente importante. Puede contener un nodo AudioClip o un nodo MovieTexture. Si usas MovieTexture, el navegador ejecutará el sonido del archivo de la película especificada. Esto puede ser útil para tocar archivos de sonido de MPEG, por ejemplo. ¡Más útil es el nodo AudioClip que cubriremos en detalle ahora mismo!
AudioClip
El nodo AudioClip especifica qué sonara por el nodo sound, y cuándo. La sintaxis es como sigue:
AudioClip { SFString description "" SFBool loop FALSE SFFloat pitch 1.0 SFTime startTime 0 SFTime stopTime 0 MFString url [] }
El AudioClip funciona así. El campo url es una lista de archivos en formato .WAV o General MIDI .MID tipo 1, que es útil para la representación compacta de música. El navegador tocará el primero de éstos que pueda cargar. loop especifica si el sonido se ejecuta en bucle, lo que es útil para los sonidos del ambiente y description es una descripción del sonido que el navegador puede desplegar si lo deseas. El campo pitch es un multiplicador para la velocidad de la cinta, y en consecuencia del sonido. Un pitch de 1.0 es la velocidad normal. Un pitch de 0.5 sonará a la mitad de la velocidad, y transpone el sonido abajo una octava. Un valor de 2.0 tendrá el efecto opuesto, mientras duplica la velocidad del sonido, y eleva la velocidad una octava.
El startTime y stopTime son valores SFTime que especifican cuándo el sonido comenzará y se detendrá. Si lo recuerdas, son los segundos desde el 1de enero de 1970. Puede parecer que esto no tiene mucho sentido, pero cuando los unamos a los sensores y rutas te aseguro que lo tendrá. Un sensor puede generar un EventOut activado con el tiempo, y si se dirige (via ROUTE) al AudioClip a través del eventIn set_startTime, se ejecutará el sonido. Esto Veremos más sobre esto después, cuando cubramos sensores e interacciones.
Desvanecerse en la lejanía...
Una cosa más sobre los nodos de sonido, y es acerca de los archivos no comprimidos tipo .WAV. El tema es que son GRANDES, y toman tiempos absolutamente enormes para descargarse. Por consiguiente, deben usarse con mucha moderación a favor de la eficencia. Los archivos MIDI son buenos para la música de fondo, de modo que intenta alejarte de archivos .WAV tanto como puedas. Si son los que tienes, házlos mas cortos y de baja calidad, dado que nadie esperará alrededor de 10 minutos para bajarse un archivo .WAV con calidad CD.
Ése es todo lo que necesitas saber sobre las cosas basicas de
sonido. Para poder producir sonidos verdaderamente utiles, como por ejemplo
timbres y demás, nosotros necesitamos poder actuar recíprocamente
con el mundo a través de sensores y cosas de ese tipo. No los hemos
cubierto todavía, así que dejaré una demostración
de sonidos interactivos para más adelante, y en este mundo de ejemplo
sólo he agregado redobles de tambor que vienen desde el podio al
observador. Después, cubriremos los sensores y podremos hacer cosas
más impresionantes.
Tutorial Mundo 9 y código.
Eso es todo entonces, en el próximo tutorial te mostraré cómo hacer formas más realistas y útiles con objetos avanzados.