66

Click here to load reader

CAPÍTULO 11

  • Upload
    hinago

  • View
    244

  • Download
    3

Embed Size (px)

Citation preview

Page 1: CAPÍTULO  11

1

VRML 2.0 con Java CAPÍTULO 11

CAPÍTULO 11 Trabajo con sonidos en 3-D

Page 2: CAPÍTULO  11

2

VRML 2.0 con Java CAPÍTULO 11

Contenido CAPÍTULO 11

• Sonido Básico de VRML • Creación de un fondo básico de sonido • Ejemplo de sonido ambiente de fondo • Fundamentos de sonido • Creación de un fondo local de sonido • Recopilación de fuentes de sonido de su • Sonidos en el tiempo • Sincronización de los sonidos y Eventos • Secuencias de sonido MIDI • Sonido MovieTexture • Temas avanzados de sonido • Las Instrucciones de sonido en VRML

Page 3: CAPÍTULO  11

3

VRML 2.0 con Java CAPÍTULO 11

VRML Sonido Básico

Sonido trae la vida a un mundo muerto. Junto con la animación y la interacción, sonido VRML 2.0 permite crear mundos vivos, mientras que la mayoría de VRML 1.0 era bueno para producir el tipo de muertos y vacíos paisajes que a veces se denomina "bomba de neutrones-ciudades" en el mundo de los gráficos 3D. El sonido es probablemente la más sumergiendo parte de la experiencia de VRML. Típico VRML sus usuarios a obtener el estímulo de un gráfico de 15-pulgadas, que tiene sólo una pequeña parte de su campo de visión. Cuando el sonido viene de un par de altavoces que, cuando se gira hacia arriba, fácilmente puede saturar sus sentidos auditivos, la experiencia del usuario es mucho mayor. (VRML Pocos usuarios tienen la realidad virtual y gafas de auricular con auriculares que pone los dos sentidos en un plano de igualdad.)

¿Qué puedo hacer con el sonido?

VRML proporciona una experiencia sonora de otra forma no disponible en Internet. El sonido no se juegan simplemente-que desempeña en el espacio 3-D. VRML es spatialized sonido, lo que significa que lo que los usuarios escuchar los cambios en función de cómo se mueven a través del espacio de VRML. Sonidos jugar más fuerte que el usuario enfoques y obtener más suave que el usuario se aleja. Además, el sonido se reproduce más en el canal izquierdo o el derecho de la mezcla dependiendo de si el usuario se ve a la izquierda oa la derecha del sonido. La combinación de la inmersión de la calidad de sonido espacial y la naturaleza de VRML de audio permite que el mundo usa el constructor de la forma en que un director de cine lo utiliza para

• Crear el estado de ánimo y el ambiente de fondo para una escena • Añadir auditivo señales sobre lo que está pasando • Marcar la presencia de objetos ruidosos

En algunos casos, estos objetos y los acontecimientos no pueden ser visibles para el usuario, y la buena señal es el único que el usuario recibe la notificación. Cualquiera que haya jugado el juego DOOM o cualquiera de sus parecen sabe cómo juego autores utilizan el sonido como consejos para pistas peligro acechando.

La experiencia del usuario es lo que cuenta

Cuando se utiliza el sonido de VRML herramientas, muchos autores se chagrined nodo que el sonido no proporcionar de inmediato un mecanismo para producir el sonido del mundo real en un entorno VRML. Esta reacción es como esperar a tener una primitiva VRML para un determinado paisaje. Así como el VRML autor debe construir cualquier intrigante paisaje con geometría compleja, el sonido autor debe construir cualquier soundscape eficaz con el uso creativo de las herramientas de sonido. Dado que los instrumentos básicos de sonido (el sonido del nodo, el nodo

Page 4: CAPÍTULO  11

4

VRML 2.0 con Java CAPÍTULO 11

AudioClip, y el nodo MovieTexture) son bastante limitados, el autor debe maximizar para crear el efecto deseado.

Cuando Tenga cuidado con sonido

Casi todos los mundos VRML son más sumergiendo experiencias si incluyen el uso eficaz de sonido, sin embargo, el sonido puede arruinar una presentación de otro modo eficaz de VRML. Sonidos son normalmente el componente más grande del mundo. Si no se maneja adecuadamente, sonidos desperdiciar tanto tiempo de descarga que el cliente pierde interés antes que el mundo se carga. Para ser contundente, archivos de sonido son muy grandes. Ya los sonidos largos-como la oración o la música son realmente grandes, y MovieTextures puede pasar rápidamente de la escala. Más adelante en este capítulo, la manera de cubrir el mantenimiento de los sonidos lo más pequeño posible. Asimismo, discutir las posibilidades de streaming de sonido que se encuentran actualmente en desarrollo para varios navegadores de VRML. Para las aplicaciones de Internet, sólo debería utilizar MovieTextures muy corto hasta la transmisión de vídeo se convierte en una característica común navegador.

Creación de un fondo básico de sonido

Piense por un momento acerca de la música que forma la espina dorsal de una película sonora. Este sonido establece el estado de ánimo para la acción en la pantalla. Esta música ayudas notablemente la inmersión en el espectador, y prácticamente no se producen películas modernas sin ella. Mundos VRML se beneficien del mismo tratamiento. Esta sección discute las partes técnicas necesarias para crear un sonido en un mundo VRML y muestra cómo utilizarlos para crear el sonido más simple VRML: el sonido ambiente de fondo, que es un sonido que juega a través de una gran parte de la escena y no tiene fuerte asociación espacial.

El sonido del Nodo

El nodo de VRML de sonido (ver Listado de 11,1) es un objeto que crea el sonido en un escenario VRML-sólo como un altavoz de su sistema estéreo de sonido crea en su sala de estar. El sonido es como un nodo único de alimentación de altavoces que usted puede tener conectado a su ordenador. No necesita un amplificador, pero sí necesitamos una fuente de sonido. Normalmente, la fuente es el nodo AudioClip, lo que se discute en la sección "Audio Clip Nodo." El sonido de nodo contiene toda la información espacial para su sonido:

• En caso de que se • ¿Qué forma toma el sonido • ¿Hasta que llegue

Page 5: CAPÍTULO  11

5

VRML 2.0 con Java CAPÍTULO 11

• ¿Qué dirección está señalando el sonido

Listado de 11,1 Especificación del sonido Nodo

Sonido { exposedField SFVec3f dirección 0 0 1 exposedField SFFloat intensidad 1 exposedField SFVec3f ubicación 0 0 0 exposedField SFFloat maxBack 10 exposedField SFFloat maxFront 10 exposedField SFFloat minBack 1 exposedField SFFloat minFront 1 exposedField SFFloat prioridad 0 exposedField SFNode fuente NULL campo SFBool spatialize TRUE }

Desde la localización del sonido es su nodo más importante, por lo general el sonido debe ir en la escena gráfica en relación con el mismo grupo como nodo de la geometría del objeto que hace que el sonido. Sonidos ambientales suelen mantenerse cerca de la raíz de la escena, sobre todo las piezas móviles de la escena estructura.

El sonido del nodo tiene dos mecanismos para el volumen relativo de un sonido en un punto particular en la escena: variedad y la intensidad. La gama que cubre un sonido viene determinado por los valores de los parámetros de serie (maxFront, maxBack, minFront, y minBack). El alcance máximo definir los parámetros de un elipsoide que marca el máximo de la gama de sonido. En un principio, mantener la parte trasera y delantera de la misma varía de modo que el sonido es una forma simple esfera. El rango de valores mínimos de definir el espacio en el interior, que el sonido se reproduce a todo volumen. Observe que el valor de las escalas de intensidad del volumen de un sonido que juega, pero, a diferencia del mundo real, se sube la intensidad no aumente la gama de sonido.

En la Figura 11.1, la más grande de color gris oscuro elipsoide ilustra el alcance máximo del sonido y muestra cómo la maxFront y maxBack definir los parámetros de su forma. En el interior de color gris claro elipsoide, definido por minFront y minBack, el sonido se reproduce a plena intensidad.

Figura 11.1 Esquema del nodo de sonido

Page 6: CAPÍTULO  11

6

VRML 2.0 con Java CAPÍTULO 11

El clip de audio Nodo

AudioClip El nodo (ver Listado de 11,2) es la fuente de sonido para tu sistema de sonido de VRML. Es como un reproductor de CD con un disco de titular, el juego botones y un control de echada. El AudioClip se elimina de la distribución espacial de las preocupaciones de VRML, su trabajo es controlar el momento de la reproducción de sonido. Al igual que el reproductor de CD, AudioClip el nodo tiene un bucle botón que dice el sonido al bucle atrás y jugar de nuevo cuando termine.

Listado de 11,2 Especificación del nodo AudioClip

AudioClip { exposedField SFString descripción "" exposedField SFBool bucle FALSE exposedField SFFloat pitch 1.0 exposedField SFTime startTime 0 exposedField SFTime stopTime 0 exposedField MFString url [] eventOut SFTime duration_changed eventOut SFBool isActive }

Los elementos clave de la AudioClip son la URL y la startTime. La url es titular el CD en su sistema de sonido. El startTime es como el botón de reproducción. Para reproducir un sonido en un clip de audio de nodo, que estableció startTime a la hora actual. Esta acción es similar al caso de la mayoría de los demás basado en acciones se estableció en VRML, por lo que los sonidos de activación de la misma manera que se inicie la animación y otros eventos. Véase el capítulo 2, "El Modelo de Ejecución de VRML," para obtener más información sobre el evento basado en acciones.

El archivo de sonido

El archivo de sonido contiene los datos de sonido real desempeñado por el nodo de sonido. El archivo de sonido es como el disco del CD que se pone en el reproductor de CD. La principal consideración en la preparación de un archivo de sonido para VRML es que lo mantenga lo más pequeño posible. El próximo examen es el número de canales que tiene en su sonido. En la mayoría de los casos, debe ser VRML sonidos solo canal, esto es, monoaural. También debe seleccionar una muestra-tipo, es decir, el número de muestras por segundo de juego almacenado en el archivo de sonido. Superior muestra las tasas de proporcionar una mejor calidad de sonido, pero requieren más tiempo y descarga más el tiempo de procesamiento de baja calidad y menor frecuencia de muestreo de sonidos. Usted debe determinar la frecuencia de muestreo que elija sobre la base de lo que contiene el sonido y cómo y cuándo se utiliza. Hablamos más acerca de

Page 7: CAPÍTULO  11

7

VRML 2.0 con Java CAPÍTULO 11

estas opciones en la sección "Cuestiones de frecuencia de muestreo," más adelante en este capítulo.

NOTA: los archivos de sonido digital se almacenan como una serie de números que especifican la amplitud del sonido en los momentos sucesivos en el tiempo. La tasa de muestreo de un sonido digital especifica cuántos números de amplitud en el archivo de un segundo de tiempo. Por ejemplo, los CD de audio se graba en 44,1 kHz, lo que significa que hay 44.100 "muestra" la amplitud de los números (por canal) por cada segundo de tiempo.

Ejemplo de sonido ambiente de fondo

Vamos a caminar a través de los pasos y opciones para crear un ambiente de sonido. Primero tiene un archivo de sonido que puede bucle. Configuración de puntos por un bucle de fondo puede ser un proceso que consume tiempo. Incluso para los trabajadores de sonido profesional, para obtener una pieza de música para bucle sin clics y repeticiones es un desafío. Sea creativo acerca de dónde y cómo establecer puntos de bucle, y no se desanime si le toma algún tiempo para obtener derecho.

Una vez que haya un sonido, lo que necesita

1. Crear un nodo de sonido para que pueda desempeñar a través de. 2. Colocar el sonido en el centro de su mundo. 3. Una cifra que incluye su radio de todo el mundo, y fijar los cuatro valores que la gama de radio. 4. En la fuente sobre el terreno, definir un nodo AudioClip con bucle activado. 5. Asegúrese de que la URL contiene el nombre del archivo de sonido para el sonido de fondo.

Aquí hay un ejemplo de uso de la más simple de sonido en VRML el sonido ambiente de fondo, VRML la versión sonora de una película. Listado de 11,3 existente en el paisaje de una pequeña isla y crea el ambiente de sonido de los grillos que impregna todo el espacio alrededor de la isla. Figura 11.2 se muestra la gama de sonido ambiental.

Figura 11-2 muestra la isla de sonido ambiental gama

Listado de 11,3 sonido ambiente Ejemplo: Crickets en una pequeña isla

# VRML V2.0 utf8 CosmoWorlds V1.0

Grupo {

Page 8: CAPÍTULO  11

8

VRML 2.0 con Java CAPÍTULO 11

  los niños [    DEF terrainInline transformación {    los niños en línea {     url "islandTerrain.wrl"     }   }   DEF pondInline transformación {    los niños en línea {     url "pondInline.wrl"     }   }   DEF oceanInline transformación {    los niños en línea {     url "oceanInline.wrl"     }   }   Transformar de fondo (DEF     Antecedentes niños {      groundAngle 1,01      groundColor [0,1 0,1 0,09,             0,48 0,48 0,45]      Skyangle [0,05, 0,1, 1, 1,57]      skyColor [1 1 0,                1 1 0,5,                0,125 0,125 0,5,                0,3 0,3 0,55,                0,64 0,73 0,84]     )

    traducción 139,537 161,86 -16,62     rotación 0 0 1 0    )    DEF Light1 DirectionalLight (     dirección 0,2 -0,7 0,7    }   DEF IslandSound sonido {    DEF fuente cricketClip AudioClip {    url "crickets.wav"      descripción "de depuración"      TRUE bucle     }

Page 9: CAPÍTULO  11

9

VRML 2.0 con Java CAPÍTULO 11

    ubicación 0 10 0     dirección 0 0 1     minFront 400     maxFront 550     minBack 400     maxBack 550     spatialize FALSE    }   Transformar puntos de vista (DEF     los niños [      Punto de vista (DEF VP2       posición -955,266 285,332 1151 .13       orientación -0,03 -0,995377 -0,0907122 0,699859       fieldOfView 0.785398       descripción de "la vista"     }      Punto de vista (DEF VP1       posición 5,18484 194,517 158,337       orientación -0,0321899 -0,995106 -0,0934276 0,703927       fieldOfView 0.785398       descripción "estanque vista"      }     ]    }  ] }

     SUGERENCIA: Si no está seguro de cuán grande es tu mundo, empezar con la creación de una simple caja cúbicos forma y ver si se encierra el mundo y, a continuación, utilizar la mitad del tamaño de la caja para los cuatro valores de gama.

     NOTA: A diferencia de otros capítulos de este libro, la mayoría de los ejemplos en este capítulo se han creado con una herramienta de autoría de VRML, específicamente de la Silicon Graphics CosmoWorlds. Utilizando una herramienta como esta permite crear mundos complejos más rápidamente que usted puede hacer a mano.

Fundamentos de sonido

Antes de entrar en detalles sobre el uso de VRML de sonido para crear experiencias de inmersión para los usuarios, vamos a revisar brevemente cómo funciona el sonido en el mundo real. La gente es sensible a cómo responder a los sonidos del espacio. Todos

Page 10: CAPÍTULO  11

10

VRML 2.0 con Java CAPÍTULO 11

sabemos que los ruidos fuertes cuando están más cerca, y somos capaces de juzgar la distancia a los objetos sobre la base de cómo son los sonidos fuertes. También podemos juzgar la dirección de un sonido viene de y utilizar esa información para localizar los objetos. Tomamos ventaja de estos dos efectos en VRML. La gente también recoger las señales de sonido ubicación de la cantidad de eco y resonancia que tiene un sonido. Estos efectos no son una parte específica del VRML sonido, pero podemos modelo cuando se forma una parte importante de la escena. Voy a mostrar varios ejemplos de esto más adelante en este capítulo.

Las computadoras son ahora utilizados para modelar los aspectos más sutiles de la buena percepción de que se utilizan para crear experiencias de inmersión sonora, pero estos no son una parte estándar de VRML. En un sencillo modelo de sonido estéreo, un sonido directamente enfrente de usted no se puede distinguir de un sonido directamente detrás de usted. En el mundo natural, sin embargo, nuestros oídos filtro de las ondas sonoras en las proximidades de nuestras cabezas antes de que lleguen a nuestros tímpanos. Minuto diferencia en la forma de reflejar los sonidos a través de la forma de nuestros oídos y nuestros tímpanos nos dan bastante sutiles señales para saber si el sonido es por delante o por detrás de nosotros. La gente también sentido la diferencia de tiempo entre la llegada de un sonido en el oído cerca de el sonido y el oído que es más lejos. Si bien esta diferencia es muy pequeña, es una señal importante en nuestra percepción del sonido.

Computadoras modelo función oído humano, utilizando la cabeza relacionados con funciones de transferencia (o HRTFs), pero dado que son los efectos de modelado de sonidos en el tímpano, es difícil emitir esos sonidos sin tener que pasar por los filtros de la oreja de nuevo. Escuchando a los sonidos en los auriculares ayuda a estos efectos a través de la oreja, pero escuchando a los oradores de ellos por lo general pierde. El VRML autor no puede saber si el usuario está usando auriculares, así que por lo general los autores no pueden tomar ventaja de estos efectos. Algunos navegadores de VRML auriculares tienen una opción que permite al usuario encender GEDH efectos.

     NOTA: Para información más detallada sobre la teoría de 3-D de sonido, sonido para ver en 3D y Realidad Virtual Multimedia por Durand R. Begault publicado por AP Professional (Academic Press).

Transmisión de sonido en el mundo real

En un mundo ideal-lo que llamamos un anecoico espacio, donde no hay eco o resonancia-sonido sigue algunas leyes muy simples. El volumen de sonido es inversamente proporcional al cuadrado de la distancia entre el sonido y el oyente. El sonido es transmitido como ondas que vibran y se mueven en el aire. La amplitud de estas ondas determina el volumen del sonido. La percepción humana también entra en esta foto. Que percibimos como un sonido fuerte cuando la mitad de la amplitud de onda es una décima

Page 11: CAPÍTULO  11

11

VRML 2.0 con Java CAPÍTULO 11

parte de su valor original. Esta caída de amplitud se corresponde con un descenso de un decibelio (dB).

La situación es mucho más complicado en el mundo real, y sigue más allá del alcance incluso de los superordenadores más rápidos con precisión el modelo a la reflexión de los sonidos en situaciones del mundo real. El modelo más básico que tienen que comprender cómo el sonido viaja a través y alrededor de obstáculos como paredes simples y cómo manejar las diferencias en la transferencia de propiedades y la reflexión de las paredes.

VRML se ocupa de la floración, zumbido de confusión del mundo real sonido dejando a los autores de VRML para emplear a unos pocos (quizá muy pocos), simple pero potente para crear un paisaje sonoro para el usuario. Tales sonidos proporcionar una experiencia que puede o no se parecen sonido del mundo real. Cómo emplear estas herramientas queda a usted como el constructor del mundo VRML, como tampoco lo es la responsabilidad de un director de cine para crear una banda sonora para obligar a la moviegoer. Esta tarea es un poco más complejo porque, a diferencia de las películas, VRML es interactivo y tridimensional. La mayoría del resto de este capítulo se habla de diferentes formas de utilizar estas herramientas de sonido: el sonido del nodo AudioClip nodo y nodo MovieTexture.

Atenuación de sonido en VRML

En VRML, el sonido de atenuación es controlada por la gama de los campos de sonido nodo. Sonido se reproduce al máximo volumen en el interior del mínimo y no se dice nada fuera del alcance máximo. Entre ellos, VRML se especifica que el sonido se atenúa linealmente en decibelios. Esto corresponde a una atenuación atenuación logarítmica que se aproxima el efecto de la ley del cuadrado inverso-. De hecho, si el rango de los parámetros se fijan de forma que el rango máximo es de diez veces el mínimo, el sonido se aproxime a la atenuación de sonido de atenuación en un mundo real, espacio anecoico. Este conocimiento es una directriz útil, pero la mayoría de los mundos más creativos requieren el uso de herramientas de sonido para obtener resultados.

Dirección de sonido

En un mundo anecoico, el sonido no tiene sentido-que se expande por igual en todas las direcciones de su fuente. En realidad, muchas fuentes de sonido, como altavoces, el sonido directamente en un bloque de dirección y de viajar en la dirección opuesta. En VRML, se puede especificar una dirección de sonido mediante el establecimiento de valores diferentes para la parte delantera y trasera gama parámetros. Si los valores están cerca, la forma sigue siendo casi

Page 12: CAPÍTULO  11

12

VRML 2.0 con Java CAPÍTULO 11

esférica, pero cuando la relación de adelante hacia atrás va a 3:1 o 4:1, el sonido se convierte en verdaderamente direccional. Para especificar el sonido en el nodo de sonido, utilice el campo de dirección.

Frente a Spatialized de sonido estéreo

La mayoría de las grabaciones que la gente crea para la ejecución se hacen en estéreo (dos canales de sonido). Estéreo es un simple dispositivo de espacialización. Incluso si un sonido viene de un único punto (por ejemplo, un jugador solo de flauta), grabaciones estéreo capturar algunas de las cualidades espaciales de la zona en la que se realizó la grabación. Desde un navegador de VRML es la creación de su propio espacio mezcla de todos los sonidos que son audibles en la escena, casi siempre es preferible utilizar un sonido monoaural. Y desde sonidos estéreo tener el doble de memoria y ancho de banda como el sonido monoaural, con sonido monoaural es uno de los pocos puntos en los que el mejor formato es también el más eficiente. Si el sonido no es nodo spatialized, la especificación de VRML recomienda que el navegador de preservar la separación de estéreo en la reproducción. La única vez que tiene sentido utilizar un sonido estéreo en VRML es un ambiente de sonido de fondo, que tiene la suficiente separación estéreo entre los canales para justificar el ancho de banda adicional necesaria para cargarla.

     ¡PRECAUCIÓN!: Si proporciona un archivo de sonido estéreo a sonido spatialized un nodo, el navegador por lo general hace caso omiso de un canal o fusiona el sonido estéreo en sonido monoaural que antes de jugar. Su mundo carga más rápido y funciona mejor si usted hace esto en el proceso en lugar de hacer el navegador hacerlo en tiempo de ejecución.

Creación de un fondo local de sonido

En la sección "Creación de un fondo básico de sonido", anteriormente en este capítulo, me mostró un ejemplo simple de un ambiente de sonido. Ahora vamos a pasar a la creación de un fondo asociado a un objeto concreto en una escena. Para este ejemplo, agregamos un estanque de la pequeña isla que hemos creado en el Listado 11.3. En Listado de 11.4, cuando se aproxime el estanque, se oye ranas chirruping junto con los grillos. Figura 11.3 muestra los rangos de el estanque de sonido.

#VRML V2.0 utf8 CosmoWorlds V1.0

Group { children [ DEF terrainInline Transform { children Inline { url "islandTerrain.wrl" } } DEF pondGroup Transform { children [ DEF pondInline Transform { children Inline { url "pondInline.wrl"

Page 13: CAPÍTULO  11

13

VRML 2.0 con Java CAPÍTULO 11

} } DEF pondSound Sound { source DEF frogClip AudioClip { url "frogs.wav" startTime 1 loop TRUE } location 150 161 -17.2 minFront 60 maxFront 80 minBack 60 maxBack 80 } ] translation -6 0 0 } DEF oceanInline Transform { children Inline { url "oceanInline.wrl" } } DEF background Transform { children Background { groundAngle 1.01 groundColor [ 0.1 0.1 0.09, 0.48 0.48 0.45 ] skyAngle [ 0.05, 0.1, 1, 1.57 ] skyColor [ 1 1 0, 1 1 0.5, 0.125 0.125 0.5, 0.3 0.3 0.55, 0.64 0.73 0.84 ] } translation 139.537 161.86 -16.62 rotation 0 0 1 0 } DEF Light1 DirectionalLight { direction 0.2 -0.7 0.7 } DEF IslandSound Sound { direction 0 0 1 location 0 10 0 maxBack 550 maxFront 550 minBack 400 minFront 400 source DEF cricketClip AudioClip { url "crickets.wav" loop TRUE } spatialize FALSE } DEF viewpoints Transform { children [ DEF VP2 Viewpoint { position -955.266 285.332 1151.13

Page 14: CAPÍTULO  11

14

VRML 2.0 con Java CAPÍTULO 11

orientation -0.0300014 -0.995425 -0.0907165 0.699859 fieldOfView 0.785398 description "full view" } DEF VP1 Viewpoint { position 5.18484 194.517 158.337 orientation -0.0321899 -0.995106 -0.0934276 0.703927 fieldOfView 0.785398 description "pond view" } ] } ]}

¿Dónde poner su sonido en la escena Gráfico

En el ejemplo de sonido ambiente (Listado de 11,3), puse el sonido en el nivel superior de la escena gráfica. En este ejemplo, el sonido está en la transformación que sitúa el arroyo geometría en la isla. En un caso como este, donde el objeto identificado con el sonido no puede moverse, puede colocar su sonido en el nivel superior. Debo hacer para que el sonido local en caso de que decida cambiar mi modelo de pasar el arroyo y más tarde en mi proceso de desarrollo, para que el sonido se mueve con él automáticamente.

Localización de los sonidos en el espacio

Ambiente local y colocar sonidos de fondo era muy simple: el valor por defecto de 0, 0, 0 el sonido ubicado en el centro del mundo o el centro del estanque, que fue justo donde y como queríamos. En muchos casos, usted puede poner el sonido en relación con el mismo nodo de transformación como el ruido de objetos, sin embargo, a veces hay que localizar el sonido cuidadosamente en relación con su objeto asociado. En estos casos, se utiliza el campo del sonido para compensar su posición a la derecha lugar en o cerca del objeto.

Para ajustar la posición de la multa es un buen modelo el sonido procedente de un altavoz (ver Listado de 11,5). El ejemplo utiliza una dirección de sonido (véase la Figura 11-4 para los rangos de sonido direccional), sin embargo, tenga en cuenta que el posicionamiento del sonido ligeramente en frente del altavoz de sonido localiza el máximo elipsoide en su totalidad en frente del altavoz. Esta técnica permite que el sonido sea audible, pero lo hace desaparecer rápidamente detrás de la caja de altavoces.

Page 15: CAPÍTULO  11

15

VRML 2.0 con Java CAPÍTULO 11

Figura 11-4 configuración de altavoces con sonido direccional rangos

#VRML V2.0 utf8 CosmoWorlds V1.0

EXTERNPROTO debugSound [ field SFVec3f direction field SFFloat intensity field SFVec3f location field SFFloat maxBack field SFFloat maxFront field SFFloat minBack field SFFloat minFront field SFFloat priority field SFNode source field SFBool spatialize] "dsp.wrl"Group { children [ DEF background Transform { children Background { skyColor 1 1 1 } translation 25.977 -1.7159 1.89899 } DEF loudSpeakerDiagram Transform { children [ Inline { url "speakerInline.wrl" } Transform { children DEF demoSound debugSound { direction 0 0 1 location -3.30151 11.9677 -8.002 maxBack 80 maxFront 500 minBack 20 minFront 100 source DEF Sound1clip AudioClip { url "forest.wav" loop TRUE startTime 1 } } translation 0 0 25 } ] } DEF VP1 Viewpoint { position -600 20 250 orientation 0 -1 0 1.54264 fieldOfView 0.785398 description "entry"

Page 16: CAPÍTULO  11

16

VRML 2.0 con Java CAPÍTULO 11

} DEF navInfo NavigationInfo { avatarSize [ 5, 20, 10 ] type "EXAMINE" } ]}

Configuración correcta de distancia

Si el maxFront y maxBack valores son iguales, el sonido tiene un esférico de rango natural forma de un sonido en un espacio anecoico. El valor maxFront nunca debe ser inferior al valor maxBack. Para definir el máximo de el sonido como un elipsoide, que especifique un mayor número de maxFront. El primer punto se encuentra ahora en el sonido. El sonido está dirigido en la actualidad a lo largo de la dirección del vector. El segundo punto focal se encuentra a lo largo de la dirección del vector a una distancia que es igual a (maxFront-maxBack). Por lo tanto, mayor es la diferencia entre maxFront y maxBack, más alargada, con forma de cigarro, la medida del sonido se convierte en.

Su recopilación de fuentes de sonido

La parte más difícil de crear un buen sonido para su escena es la recopilación y selección de los sonidos. La mayoría de los constructores mundo uso de sonidos pregrabados de otras fuentes, pero la grabación de su propios sonidos se pueden satisfacer, aunque tal vez mucho tiempo. En ambos casos, el plan de pasar algún tiempo la preparación de sonidos para su escenario VRML.

Música y Efectos de sonido

La mayoría de los sonidos utilizados en VRML son realmente los efectos de sonido, ruidos emitidos por los objetos o las interacciones entre los objetos. Música de fondo hace que una eficaz, pero requiere una cuidadosa preparación. Hasta el momento en que el streaming de audio es una característica común del navegador, es necesario limitar la duración de su música con el fin de mantener el tiempo de descarga razonable. Seleccione la música que no es tan distintivo que el usuario que la repetición de los anuncios, pero que tiene suficiente carácter para crear el fondo de humor. Encontrar puntos limpios bucle puede ser muy difícil, por lo que planea pasar mucho tiempo trabajando en bucle creativo.

Grabación de sus propios sonidos

Si usted no es un músico, grabar tu propia música, probablemente, no es una buena idea. Creación de una pista de obligar a la música grabada puede ser un reto incluso para un profesional. Pero tus propios efectos de grabación puede ser divertido y gratificante.

Page 17: CAPÍTULO  11

17

VRML 2.0 con Java CAPÍTULO 11

Además, usted no tiene que preocuparse por los derechos de autor y de licencia. Aunque la mejor forma de registro ha sido tradicionalmente el uso de un buen sistema de grabación de audio digital, estos sonidos son representados en forma digital compacta. Por lo tanto, simples grabaciones analógicas multa VRML hacer efectos de sonido. Estar seguro de que encontrar un lugar para hacer sus grabaciones, que no tiene ruido de fondo, o que vendrán a través de sus efectos de sonido.

Además, efectos de sonido no tiene que consistir de sonidos procedentes de los objetos que representan en su escenario VRML. Cualquier programa de edición de sonido razonable, le permite hacer cambios drásticos a cualquier sonido grabado. Cambiar el tono, añadir eco, y la aplicación de diversos filtros pueden convertir en un simple sonido un efecto dramático.

¿Dónde puedo obtener un sonido pregrabados?

Fuentes abundan pregrabados para efectos de sonido y música, tal como lo hacen de las imágenes prediseñadas y clip de modelos. Algunos de estos están disponibles en CD-ROM y CD de audio. Estas bibliotecas se utilizan en gran medida por el cine y las industrias de producción de vídeo, así que usted puede encontrar los proveedores de CD en busca de sonidos por los proveedores a los productores de cine y vídeo. También puede buscar en Internet para las bibliotecas de sonido o Clip de sonido, donde se encuentra de licencia libre de sonidos para la venta. He tenido buena suerte con el borde de Hollywood (http://hollywoodedge.com) y voz de cristal. Al llegar sonidos, prestar atención a las limitaciones de licencia. Normalmente, se le prohíbe a la redistribución de los sonidos. Idealmente, usted debe estar libre de otras restricciones sobre el uso de los sonidos. En cualquier caso, asegúrese de que usted tiene el derecho de poner en su página Web.

Su preparación de Sonidos

No utilizar directamente los sonidos que se han reunido, ya sean sus propias grabaciones o que proceden de las bibliotecas. Usted debe convertir y editar para obtener lo más pronto posible, clips de sonido que se logre el efecto deseado:

     1. Elige un formato de sonido para el título, y convertir todos sus sonidos a ese formato.      2. Seleccione una velocidad de muestreo y convertir todos sus sonidos de este tipo.      3. En la mayoría de los casos, combinar sonidos estéreo en un solo canal.      4. Reducir el sonido en la mayoría de la longitud efectiva.

Page 18: CAPÍTULO  11

18

VRML 2.0 con Java CAPÍTULO 11

Muestra los tipos de

La tarifa de la muestra que usted elija se basa en una directa relación entre la calidad versus el tiempo de descarga y la utilización de la memoria. La frecuencia más alta que se pueden reproducir en un clip de sonido sin distorsiones graves es la mitad de la tarifa de la muestra. Ya que pueden reproducir una completa gama de frecuencias, una mayor frecuencia de muestreo de sonido mejor, pero son más caros para cargar y almacenar. Si el título se descarga a través de módems de 28.8 kbps-, esta elección es muy difícil.

Como punto de referencia, la tasa de muestreo de CD de música es 44.100 muestras por segundo (44,1 kHz). La mitad de la tasa de muestreo de CD (22,05 kHz) es suficiente, incluso cuando se entrega en una intranet de alta velocidad, para producir un sonido de calidad para cualquier usuario de VRML. Esta tasa es ligeramente inferior a la calidad de transmisión de radio FM. Para el uso de Internet, efectos de sonido puede reproducir a una velocidad de 11,025 kHz (una cuarta parte de la tasa de CD) o incluso a 8 kHz (aproximadamente la calidad de sonido de la radio AM). Efectos de sonido y voz son generalmente aceptable a 8 kHz, sin embargo, a veces la música que no puede reproducir las frecuencias de más de 4 kHz suena demasiado plana a 8 kHz. Por lo tanto, puede ser el valor de los bits adicionales para aumentar la tasa de 11,025 kHz. Longitud de clip de sonido Cuestiones

Muchas muestras de sonido disponibles comercialmente son más largas que las que necesita. Si el sonido es loop, el sonido debe ser lo suficientemente largo que el bucle no es obvia. La mayor variación en el sonido, más tiempo tiene que ser. Cada caso es una elección personal. Estos son los pasos a seguir:

     1. Cargar el sonido en un editor de sonido.      2. Pruebe a establecer diferentes puntos de bucle y escuchar cómo suena cuando se repite.      3. Pregúntese: "¿Cuánto tiempo se puede escuchar este sonido, sin volverse loco?" Y, "¿Cuánto tiempo debo esperar para pasar mi usuario en el área donde este es un bucle de sonido?"

Las respuestas a estas preguntas que deben guiar en el establecimiento de la adecuada bucle puntos. Más adelante en el capítulo hablo de algunos otros trucos para romper la monotonía con bucles, sonidos sin agregar mucho a la duración de sus clips de sonido. Formato de sonido que debo utilizar?

La decisión de hacer sobre el formato de sonido es menos directamente relacionados con el tamaño de su sonido suena más a la longitud. Varios son los formatos estándar de uso común en Internet.

Page 19: CAPÍTULO  11

19

VRML 2.0 con Java CAPÍTULO 11

Archivos WAV

El más prominente es el de Windows WAV (onda) el formato. Todos los navegadores sonido que son necesarias para apoyar el formato WAV sin comprimir archivos de sonido. Si necesita la aceptación universal, utiliza el formato WAV, que apoya una variedad de sistemas de compresión. Sin embargo, estos sistemas no están ampliamente apoyados. Para comprimir el sonido, el formato MPEG es probablemente preferible.

MPEG consta de dos formatos de compresión (MPEG-1 y MPEG-2) creado por la Motion Picture Experts Group para comprimir película de calidad o de calidad de vídeo de TV. Dado que el sonido es parte del código fuente, estos formatos de sonido incluye un esquema de compresión. Además, dado que es el MPEG VRML MovieTexture, el apoyo que la mayoría de los navegadores. MPEG utiliza un esquema de compresión con pérdida, que no reproducen exactamente la misma secuencia que se muestra inicialmente comprimido. (Lossy compresión de sonido sistemas de comprimir el sonido en la medida en que la información se pierde. Cuando descomprimido, el sonido no es idéntico a la información antes de la compresión.) Además, MPEG le da cierto control sobre la cantidad de compresión que desea aplicar. Usted puede obtener 3:1 o 4:1 de compresión sin comprometer seriamente su sonidos. Si está dispuesto a perder un poco de fidelidad a cambio de archivos de sonido significativamente menor, el MPEG es el formato para usted. Si bien el soporte de sonido MPEG no es una característica necesaria del navegador, el MPEG es el formato estándar para el nodo MovieTexture, por lo que pueden esperar que la mayoría de los navegadores de apoyo para MPEG y sonido.

AIFF

AIFF (Formato de archivo de audio de intercambio) es el formato de archivo de sonido de Macintosh, que también es a menudo el apoyo de las computadoras de Windows, sin embargo, AIFF no es tan universal como WAV. AIFF es probablemente una mala elección, a menos que su público objetivo es principalmente basada en el Mac. AIFC (o AIFF-C) es una versión comprimida de AIFF. Hay algunos comúnmente aceptados libre determinación de los regímenes de compresión AIFC. Este formato puede ser útil en casos especiales, pero probablemente todavía MPEG es una mejor elección.

UA

UA es la siguiente nativo / UNIX formato de archivo de sonido, pero no es suficiente el apoyo ampliamente en la Internet a ser un serio contendiente aquí. La Unión Africana el formato es muy similar a la de PC estándar de los archivos de la onda, pero sin la identificación de información de cabecera.

Sonidos en el tiempo

El nodo de sonido lugares su sonido en el espacio, el nodo AudioClip lugares su sonido en el tiempo. El AudioClip es uno de los VRML nodos en función del tiempo que Justin discutido en el Capítulo 2, "El Modelo de Ejecución de VRML." Al entender el

Page 20: CAPÍTULO  11

20

VRML 2.0 con Java CAPÍTULO 11

funcionamiento de la sutil startTime, stopTime, bucle y campos de la AudioClip, puede conseguir todo el control de un reproductor de CD con un temporizador. El nodo MovieTexture también puede ser una fuente de sonido para un nodo, y todo lo dicho sobre el nodo AudioClip calendario se aplica a la reproducción de un nodo MovieTexture.

Control de Sonidos en el tiempo

El sonido de fondo anteriores ejemplos demuestran la forma más sencilla de reproducir un sonido. Si está configurado en bucle TRUE, y el startTime es mayor o igual a la stopTime, el sonido empieza jugando tan pronto como se carga en la escena y continúa hasta recorrer la escena termina. Además, el sonido se inicia en el medio del archivo de sonido en el punto exacto donde sería jugar si hubiera iniciado en la startTime (probablemente cero sentido la medianoche del 1 de enero de 1970) y ha sido bucle desde entonces. Para hacer el sonido de inicio en el momento actual, crear un disparador que los incendios cuando el sonido está cargado. (Muestra un ejemplo de esta técnica en el Listado de 11.6, a continuación.)

#VRML V2.0 utf8Group { children [ DEF worldProx ProximitySensor { size 1000 1000 1000 } Sound { maxFront 100 maxBack 100 source DEF entryClip AudioClip { url "weirdWorldNoise.wav" loop TRUE } } Inline { url "restOfTheWorld.wrl" } ]}ROUTE worldProx.enterTime TO entryClip.startTime

Disparadores y Rutas

Para reproducir un sonido en un momento determinado, crear un disparador que genera un evento en ese momento. Luego VÍA este caso a la startTime del AudioClip. Sensor de generar todos los nodos de eventos en tiempo (todos ellos tienen campos con eventOut tipo SFTime), por lo que cualquier nodo sensor puede funcionar como un disparador para iniciar o detener un sonido.

Veamos el problema de la reproducción de un sonido desde el principio cuando el usuario entra en la primera escena. Puede utilizar esta técnica para cualquier momento en las operaciones que desea comenzar en el inicio de la escena. Cuando se combina con un ProximitySensor, puede

Page 21: CAPÍTULO  11

21

VRML 2.0 con Java CAPÍTULO 11

utilizar una secuencia de comandos para construir un nodo de toda la programación de eventos que empezar por el principio de una escena. ProximitySensor configurar el tamaño para abarcar todo el mundo, de modo que definitivamente incluye el lugar donde el usuario entra en la escena. Por lo tanto, el ProximitySensor enterTime evento tan pronto como la escena se ha cargado. ProximitySensor ruta al startTime del AudioClip, y el clip comienza a jugar en ese momento (ver Listado de 11,6).

Creación de un simple sonido Toggle Switch

También puede utilizar secuencias de comandos para generar eventos de tiempo para iniciar y detener los sonidos. De hecho, cualquier juego la lógica más compleja que "empezar ahora" requiere el uso de un script sencillo. En esta sección se examina con un script para crear un simple conmutador (ver Listado de 11,7)-una construcción que ha sido útil para mí en la creación de VRML con sonido. Yo a menudo en un conmutador, por lo que puede convertir el sonido mientras estoy de pruebas y, a continuación, eliminarlo después de su publicación. Pocas cosas molestan a su vecino de manera más efectiva que la repetición de un odioso efecto de sonido unos pocos cientos de veces mientras que usted está desarrollando una escena.

Listado de 11,7 sonido Toggle A Simple Switch

#VRML V2.0 utf8Group { children [ DEF switchGroup Group { children [ DEF toggleScript Script { eventIn SFTime touchTime eventOut SFTime start eventOut SFTime stop field SFBool isPlaying FALSE url "javascript: function touchTime(value, time) { if (isPlaying) { isPlaying = FALSE; stopTime = value; } else { isPlaying = TRUE; startTime = value; } }" } Sound { maxFront 100 maxBack 100 source DEF noiseClip AudioClip { url "obnoxiousNeighborNoise.wav" loop TRUE } }

Page 22: CAPÍTULO  11

22

VRML 2.0 con Java CAPÍTULO 11

DEF touchIt TouchSensor {} Shape { geometry Box {size 1 1 1} } ] } Inline { url "restOfTheWorld.wrl" } ]}ROUTE touchIt.touchTime TO toggleScript.touchROUTE toggleScript.start TO noiseClip.startTimeROUTE toggleScript.stop TO noiseClip.stopTime

Otro uso para las secuencias de comandos en el arranque y parada es la programación de sonidos startTimes y stopTimes en el futuro. Usted puede hacer aritmética en el tiempo valores como si fueran números de punto flotante. Recuerde que contamos segundos. En el WorldEntry ejemplo, supongamos que hemos querido iniciar el 5 segundos de sonido en la escena y dejar que 15 segundos después del inicio de la escena. En Listado de 11,8, he modificado el código WorldEntry y añadió una secuencia de comandos que establece los tiempos de inicio y finalización adecuada.

Listado de 11,8 WorldEntry proximidad con Time Compensaciones

#VRML V2.0 utf8Group { children [ DEF worldProx ProximitySensor { size 1000 1000 1000 } DEF timeOffsetScript Script { eventIn SFTime enter eventOut SFTime start eventOut SFTime stop url "javascript: function enter(value, time) { start = value + 5.0; stop = value + 15.5; } " } Sound { maxFront 100 maxBack 100 source DEF entryClip AudioClip { url "weirdWorldNoise.wav" loop TRUE } } Inline { url "restOfTheWorld.wrl" } ]}ROUTE worldProx.enterTime TO timeOffsetScript.enterROUTE timeOffsetScript.start to entryClip.startTimeROUTE timeOffsetScript.stop to entryClip.stopTime

Page 23: CAPÍTULO  11

23

VRML 2.0 con Java CAPÍTULO 11

Sincronización de los sonidos y Eventos

Base de sincronización en VRML es fácil porque todos los eventos se basan en tiempo real, y todas las acciones que se pueden programar en tiempo real. Eso suena bien en teoría, y para la mayoría de los problemas de sincronización, la teoría funciona. Si desea sincronizar un sonido con una animación, la serie startTime del nodo fuente de sonido (AudioClip o MovieTexture, que tienen un startTime) y el de la animación startTime TimeSensor al mismo valor. Ese valor puede ser ahora-como el caso touchTime de un TouchSensor-o puede ser algún tiempo en el futuro según los cálculos de un nodo de secuencias de comandos. La animación y el sonido, y después empezar a la misma hora.

Programación de secuencias de sonido

Programación de las combinaciones de sonidos es bastante simple si usted no necesita utilizar ningún sonido más de una vez. Crear un nodo con una secuencia de comandos de activación SFTime eventIn y eventOut para un SFTime cada sonido que desea reproducir. A continuación, escribir una función para la eventIn que añade el número de segundos para activar el tiempo de manera que cada sonido se reproduce en el momento oportuno.

Programación de múltiples sonidos es más complicado si tiene que utilizar un sonido más de una vez, porque no se puede enviar un sonido de su nueva hora de inicio hasta que se haya detenido la reproducción. Según el pliego de condiciones, en función del tiempo un nodo no responde a un nuevo evento startTime si se encuentran activos. Por lo tanto, en un AudioClip, no puede configurar una segunda startTime hasta que el sonido ha dejado de jugar después de la primera vez que inicie la misma.

Para reiniciar un sonido que es (o podría ser) se está reproduciendo actualmente, debe enviar un stopTime primero. Idealmente, usted puede enviar el mismo tiempo a los campos startTime y stopTime del AudioClip. La mayoría de los navegadores manejar correctamente esta situación, pero desde el orden de los acontecimientos no está garantizada, la AudioClip startTime podría obtener la primera, mientras que el sonido se sigue jugando-y hacer caso omiso de él y, a continuación, obtener el stopTime y simplemente detener la reproducción. Para protegerse de este problema, puede enviar un startTime que es un poco más tarde de la stopTime. Sin embargo, esta solución podría dejar un vacío en el marco de sonido. Experimentar con diferentes navegadores para encontrar lo que funciona mejor para su mundo.

Para programar un sonido para jugar dos veces en dos veces con una pausa entre ellos, iniciar la primera instancia del sonido y de iniciar un temporizador con un cycleInterval que termina cuando

Page 24: CAPÍTULO  11

24

VRML 2.0 con Java CAPÍTULO 11

el sonido debe comenzar a jugar por segunda vez. Usted necesita un script para manejar esta situación debido a que el cycleTime caso de los incendios TimeSensor comienza cuando el TimeSensor, así como cuando los ciclos. Tener la secuencia de comandos de ignorar la primera cycleTime evento, y la segunda una ruta a la AudioClip, de modo que el sonido se reproduce por segunda vez. Para asegurar que el sonido se reinicia, incluso cuando aún no ha terminado su primer juego, enviar un evento a la cycleTime stopTime AudioClip. En caso contrario, el AudioClip ignora la segunda startTime valor. Véase el ejemplo de submarinos en el CD-ROM para mayor aclaración.

Creación de secuencias de sonidos

Para reproducir una compleja secuencia de sonidos que no varía, montamos todo de los sonidos en un solo sonido usando una pista orientada al editor de sonido, como la op-del Código StudioVision, Digidesign del SoundTools, y Steinberg Cubase. Estos editores permiten posición cada sonido en el momento en que usted quisiera que jugar, además, crear un único archivo de sonido que juega a todos. Si necesita cambiar la fecha más tarde, puede volver a entrar en el editor de pistas, deslice el sonido a donde quieras, y guardarlo como un único archivo de sonido nuevo.

Secuencias de sonido MIDI

MIDI, que significa Interfaz digital de instrumentos musicales, se desarrolló en la década de 1980 como un mecanismo para permitir a los jugadores teclado electrónico de control de múltiples sintetizadores a partir de un único teclado. Casi inmediatamente, los desarrolladores de software MIDI como ocupándose de un gran lenguaje de representación de secuencias largas de la música en un compacto formato legible por ordenador. El protocolo MIDI tiendas de música de representar una corriente de los acontecimientos y lo difícil, cuando las teclas de un sintetizador se presionan. Deja la responsabilidad de crear los sonidos que el sintetizador que se asigna a los proceso de los acontecimientos.

Controlado por ordenador secuenciador MIDI programas que actualmente representan un porcentaje importante de desarrollo de la música comercial. Estos eran grandes secuencias MIDI para componer la música y la realización de un estudio, pero dado que casi cada estudio tenía una colección de diferentes instrumentos conectados entre sí, es difícil tomar una canción MIDI y obtener el mismo rendimiento de ella en otro estudio. En el decenio de 1990, el protocolo MIDI se ha ampliado para incluir a General MIDI, lo que sugiere una cartografía de eventos de nota MIDI tipos básicos de instrumentos (por ejemplo, Grand Piano). General MIDI ha hecho mucho más probable que una secuencia de sonidos más o menos la misma como lo hizo en el estudio donde se ha creado.

La especificación de VRML recomienda pero no exige que los navegadores jugar archivos MIDI de tipo 1. La especificación también indica que los navegadores deben asumir el archivo MIDI utiliza

Page 25: CAPÍTULO  11

25

VRML 2.0 con Java CAPÍTULO 11

la revisión de las asignaciones de General MIDI. Uso de MIDI en VRML es muy fácil: Simplemente especifique un archivo MIDI General en la dirección URL de un nodo AudioClip. Reproducir los controles son idénticos a un AudioClip jugar con cualquier otro tipo de archivo de sonido. Iniciar y detener un archivo MIDI es el mismo que el de arranque y parada de cualquier otro archivo de sonido en un AudioClip. Sin embargo, la mayoría de los navegadores no se inician archivos MIDI en el medio, aunque antes de startTime es "ahora".

NOTA: Los archivos MIDI describir la música como una secuencia de eventos que representa a pulsar y soltar las teclas de un teclado sintetizador. Archivos MIDI de tipo 1 (con mucho, el tipo más común) organizar estas secuencias nota en las pistas, cada una de las cuales puede utilizar un instrumento de sonido diferente, llamado un parche. Otros eventos MIDI especificar parche que debe utilizar una pista, la pista de cómo se controla el volumen, la posición panorámica de los sonidos de una pista, y muchos otros parámetros que pueden ser cambiados en la reproducción del archivo MIDI.

Ventajas de Tamaño

Porque representan la música con la nota en lugar de eventos muestras de sonido, MIDI corrientes son mucho más pequeñas que una buena muestra, y que requieren sólo una pequeña fracción del ancho de banda de red y la memoria de la computadora. De hecho, secuencias MIDI de VRML son análogos a la geometría de la misma manera que los archivos de sonido son análogos a las imágenes en píxeles. El primer pensamiento, que parece ser una respuesta al problema de ancho de banda de sonido, MIDI y, de hecho, con VRML proporciona una excelente banda sonora de fondo.

En VRML, el problema viene cuando con MIDI que desea utilizar como un spatialized sonido. Un flujo tiene comandos MIDI incorporado para control de volumen y de izquierda / derecha el control de pan. Estos comandos se encuentran en conflicto directo con los métodos de espacialización que el navegador de VRML quiere aplicar al sonido. Además, la mayoría de las computadoras sólo puede desempeñar un arroyo MIDI a la vez. La mayoría de las implementaciones actuales del navegador se limitan a un único flujo de MIDI, y es poco probable que la corriente es atenuada o spatialized correctamente.

La variabilidad de la Calidad y Costo

Sonido MIDI pueden ser generados de tres formas distintas por una computadora, con muy diferentes resultados.

Tradicionalmente, el equipo simplemente pasa el eventos MIDI a un sintetizador de hardware independiente que realiza la generación de sonido. Para las personas que tienen instrumentos MIDI, esto da una muy alta calidad para casi sin costo alguno en la memoria de la computadora o la potencia de procesamiento de CPU. Muy pocos de los usuarios para VRML tienen General MIDI dispositivos conectados a sus computadoras, sin embargo.

Page 26: CAPÍTULO  11

26

VRML 2.0 con Java CAPÍTULO 11

La mayoría de las veces, MIDI sonido es generado por una tarjeta de sonido con un sintetizador MIDI en. Esas tarjetas de sonido tienen un costo muy bajo en la memoria o uso de la CPU, pero el rendimiento real de la música MIDI varía con el tipo de tarjeta de sonido que el usuario tiene. Además, la calidad de sonido que generan las tarjetas suele ser bajo. Con el General MIDI y una tarjeta de sonido, que se limitan a utilizar los 128 General MIDI presets que proporciona la tarjeta, no se puede descargar de cualquier otro sonido.

Algunos equipos, generalmente de Macintosh y Silicon Graphics de trabajo, también pueden tener software de los sintetizadores para generar el sonido de archivos MIDI. Estos sintetizadores de software suele generar gran calidad de la música el archivo MIDI, pero el proceso requiere tanta potencia de CPU que no hay suficiente izquierda para hacer la gráfica para una tasa de cuadros.

Futuro de MIDI

El punto brillante en el horizonte para MIDI en VRML es el formato de volcado MIDI de muestra que se ha creado para descargar las muestras para la toma de muestras teclados. La muestra incluye el formato de volcado de forma de onda de sonido para cada instrumento, junto con el flujo de eventos MIDI. Por lo tanto, el sonido de cada instrumento es el mismo. Esta perspectiva es similar a lo que hace para VRML forma gráfica cuando se envía una pequeña textura de píxeles junto con un gráfico la estructura de la forma. Cuando este formato está apoyado por un importante número de tarjetas de sonido y se hace más común en la Web, el navegador también prestará apoyo a la ejecución, ya que permite un ancho de banda relativamente bajo de la representación real de la música y efectos de sonido.

MovieTexture Sonido

Hasta el momento, tengo la mayoría a que se refiere el nodo AudioClip como la fuente de sonido para un nodo. Puede utilizar un nodo MovieTexture en cualquier lugar de usar un nodo AudioClip (a la inversa no es cierto). Si uno se VRML herencia múltiple objeto estructura, entonces MovieTexture se heredan de los genéricos y el nodo de textura TimeDependent nodo.

El uso más común de un nodo MovieTexture DEF es en su papel como una textura y luego utilizarlo como la fuente de sonido de un nodo. Además de proporcionar el control de espacio separado el audio y el vídeo de la película, este mecanismo deja la responsabilidad de toda la sincronización de audio-vídeo en el navegador problemas implementaciones. Actualmente, sin embargo, todas las implementaciones de la demanda tanto MovieTextures potencia de CPU que la velocidad de cuadro cuando están jugando es bastante baja. Actualmente, son probablemente MovieTextures útil sólo cuando la película es la pieza central de la escena. El simple ejemplo en el Listado 11-9 muestra cómo configurar un MovieTexture para reproducir el vídeo como una textura sobre un objeto y el audio como fuente de sonido para un nodo.

Page 27: CAPÍTULO  11

27

VRML 2.0 con Java CAPÍTULO 11

#VRML V2.0 utf8Group { children [ Transform { children [ Shape { appearance Appearance { texture DEF MOVIE MovieTexture { loop TRUE url "testMovie.movie" } } geometry Box {} } Sound { direction 0 0 1 maxFront 100 maxBack 50 source USE MOVIE } DEF CLICK TouchSensor {} ] } Transform { translation 2.2 0 0 children [ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Box {} } DEF CLICKOFF TouchSensor {} ] } ]}ROUTE CLICK.touchTime TO MOVIE.startTimeROUTE CLICKOFF.touchTime TO MOVIE.stopTime

Temas avanzados de sonido

La primera mitad de este capítulo abarca los elementos básicos de sonido y VRML spatialized describe cómo trabajar con el sonido en el espacio y en el tiempo. Ahora me gustaría ahondar en algunos aspectos del sonido de VRML y describir algunas técnicas que puede utilizar para ir más allá de la simple de las estructuras de sonido de VRML nodo y el modelo de comportamiento racional en el mundo real.

Page 28: CAPÍTULO  11

28

VRML 2.0 con Java CAPÍTULO 11

Su configuración de sonido

VRML sonido viene en un sabor único-elipsoidal. Sonido en el mundo real rara vez toma una forma elipsoidal, o incluso la forma esférica que la mayoría de uso. Rebota y se envuelve alrededor de todos los objetos en su entorno, cambiando su frecuencia y su volumen como se va. Como creadores de sonido VRML, usamos nuestro modelo elipsoides a la realidad, así como podemos.

Cuándo utilizar el sonido más Transforma Nodo

Puede moldear el sonido en VRML una forma elipsoidal de dos maneras. En el altavoz ejemplo anterior, el uso de las características direccionales del sonido para crear un nodo elipsoide que tiene la fuente del sonido en un punto focal de la elipse. El sonido se atenúa más lentamente en el largo eje de la elipse. En esta sección, utilizo un factor de escala no uniforme en uno de transformación por encima de la escala de sonido a un sonido en una esférica forma elipsoidal con la fuente de sonido en el centro (ver Listado de 11,10). También montamos dos nodos de sonido para crear una línea de sonido. Figura 11.5 muestra los dos sonidos que cubre el arroyo de la isla. Esta técnica funciona bien en la línea simple en forma de sonidos, pero causa problemas de rendimiento si necesita usar un montón de segmentos de línea.

Figura 11-5 muestra la isla de dos sonidos que abarca el arroyo

Listado de 11.10 La Isla con sonido en los sobres Creek

#VRML V2.0 utf8 CosmoWorlds V1.0

Group { children [ DEF terrainInline Transform { children Inline { url "islandTerrain.wrl" } } DEF streamGroup Transform { children [ DEF streamInline Transform { children Inline { url "streamInline.wrl" } translation 0 0 0.86 }

Page 29: CAPÍTULO  11

29

VRML 2.0 con Java CAPÍTULO 11

DEF upperStreamSoundX Transform { children DEF upperStreamSound Sound { source DEF streamClip AudioClip { url "stream.wav" } location 0 0 0 direction -0.7 0 0.7 minFront 40 maxFront 60 minBack 40 maxBack 60 } translation 54.3724 150 63.4805 rotation 0 -1 0 0.575525 scale 1 1 1.8} DEF lowerStreamSoundX Transform { children DEF lowerStreamSound Sound { source DEF streamClip AudioClip { url "stream.wav" } location -1.15131 -0.000106519 -0.32568 direction -0.270864 3.05128e-07 0.962618 minFront 40 maxFront 60 minBack 40 maxBack 60 } translation -1.9744 65.4665 231.756 rotation 0.95971 -0.27975 -0.0263893 0.565217 scale 1 1 3 } ] } DEF pondGroup Transform { children [ DEF pondInline Transform { children Inline { url "pondInline.wrl" } } DEF pondSound Sound { source DEF frogClip AudioClip { url "frogs.wav" loop TRUE } location 150 161 -17.2 direction 0 0 1 minFront 60 maxFront 80 minBack 60 maxBack 80 } ] translation -6 0.780754 0 } DEF oceanInline Transform {

Page 30: CAPÍTULO  11

30

VRML 2.0 con Java CAPÍTULO 11

children Inline { url "oceanInline.wrl"}

} DEF background Transform { children Background { groundAngle 1.01 groundColor [ 0.1 0.1 0.09, 0.48 0.48 0.45 ] skyAngle [ 0.05, 0.1, 1, 1.57 ] skyColor [ 1 1 0, 1 1 0.5, 0.125 0.125 0.5, 0.3 0.3 0.55, 0.64 0.73 0.84 ] } translation 139.537 161.86 -16.62 rotation 0 0 1 0 } DEF Light1 DirectionalLight { direction -0.30 -0.945 0.124 } DEF IslandSound Sound { source DEF cricketClip AudioClip { url "crickets.wav" loop TRUE } location 0 10 0 direction 0 0 1 minFront 400 maxFront 550 minBack 400 maxBack 550 spatialize FALSE } DEF viewpoints Transform { children [ DEF VP2 Viewpoint { position -955.266 285.332 1151.13 orientation -0.0300014 -0.99 -0.09 0.7 fieldOfView 0.785398 description "full view" } DEF VP1 Viewpoint { position 5.18484 194.517 158.337 orientation -0.032 -0.995 -0.093 0.704 fieldOfView 0.785398 description "pond view" } ] } ]}

En este ejemplo, mantener el nivel de sonido Creek casi constante como usted se mueve a lo largo

Page 31: CAPÍTULO  11

31

VRML 2.0 con Java CAPÍTULO 11

de la quebrada por la organización de los sonidos para que los máximos se solapan y casi tocar el mínimo (plena intensidad) de la otra gama de sonido.

La isla contiene un ejemplo a escala de sonido. La ola de sonido círculos de la costa de la isla con un único nodo de sonido. Este se aprovecha de la geometría de la isla, que es casi redondo y tiene bastante empinadas laderas de alta a su estanque central. La onda de sonido es un simple esférico sonido, aproximadamente el mismo tamaño que la isla del sonido ambiental. A transformar el sonido por encima de aplana en un disco que rodea la isla de la costa (véase la figura 11.6).

Figura 11-6 muestra la isla de la forma de navegar por el sonido

La manipulación de sonido de oclusión

Otra propiedad del sonido que requiere apoyo adicional en VRML es la oclusión. Dado que los navegadores de VRML no modelo caminos sonido, el navegador no puede detectar si el mundo tiene una buena prueba de la pared entre el punto de vista y la fuente de sonido. Para modelar este caso, usted necesita utilizar un ProximitySensor para realizar un seguimiento de la posición del usuario y controlar el volumen del sonido. Puede manipular el sonido de encenderlo y con la startTime y stopTime del AudioClip. Puede utilizar esta técnica, por ejemplo, al crear una sala en la que el sonido juega sólo cuando el usuario está presente. Se puede aplicar esto simplemente con un ProximitySensor en el interior de la sala de cable directamente a la AudioClip. En este caso, el alambre enterTime del ProximitySensor startTime a la del sonido y la exitTime del sensor a la stopTime del sonido.

Si desea más fino control sobre la forma en que el sonido se desvanece y se hincha, puede cambiar la intensidad o el rango de los valores de sonido del nodo. Véase el tren en un túnel de ejemplo (Listado 11-11, a continuación) para un ejemplo de la utilización de un guión y un temporizador de un sonido a desaparecer lentamente.

#VRML V2.0 utf8

WorldInfo { info ["Created in CosmoWorlds", "Packaged by CosmoPackage"]}DEF navInfo NavigationInfo { avatarSize [ 5, 10, 5 ] headlight FALSE type "FLY"

Page 32: CAPÍTULO  11

32

VRML 2.0 con Java CAPÍTULO 11

}Background { skyColor 0.38 0.63 0.75}DEF entryView Viewpoint { position -320 56 2003 orientation -0.974 0.218 -0.0575 0.13 fieldOfView 0.785 description "entry"}DEF trainGroup Transform { children [ DEF echoTimer TimeSensor { cycleInterval 0.5 loop FALSE startTime 0 } DEF fadeTimer TimeSensor { cycleInterval 0.5 loop FALSE startTime 0 } Group { children [ DEF trainLoop Group { children DEF trainTimer TimeSensor { cycleInterval 24 loop TRUE startTime 0 stopTime 1 }

} DEF trainGroupTransInterp PositionInterpolator { key [ 0, 0.0667, 0.125, 0.192, 0.25, 0.317, 0.375, 0.442, 0.5, 0.567, 0.625, 0.692, 0.75, 0.875, 0.942, 1 ] keyValue [ 37.8 9.16e-05 52.8, 171 -1.67 111, 344 -4.55 145, 509 -3.73 119, 618 14.6 75.5, 695 36.6 -18.8, 743 63.1 -165, 725 80.2 -319, 657 85.7 -443, 530 90 -538, 371 93.1 -557, 211 87.3 -538, 92.3 76.6 -478, -47.6 38.2 -206, -39.5 18.3 -66.5, 37.8 9.16e-05 52.8 ] } DEF trainGroupRotInterp OrientationInterpolator { key [ 0, 0.0667, 0.125, 0.192,

Page 33: CAPÍTULO  11

33

VRML 2.0 con Java CAPÍTULO 11

0.25, 0.317, 0.375, 0.442, 0.5, 0.567, 0.625, 0.692, 0.75, 0.875, 0.942, 1 ] keyValue [ -0.178 0.983 0.0414 0.465, 0.103 0.964 0.246 0.842, 0.148 0.97 0.195 1.05, 0.146 0.968 0.206 1.3, -0.00263 0.98 0.2 1.75, -0.089 0.983 0.161 2.1, -0.0246 0.989 0.145 2.49, -0.0172 0.993 0.115 2.89, -0.0365 0.993 0.116 3.26, -0.0536 0.985 0.166 3.86, -0.045 0.978 0.202 4.13, -0.0514 0.986 0.159 4.39, 0.0525 -0.992 -0.119 1.28, 0.0439 -0.996 -0.0776 0.707, 0.365 -0.931 -0.0275 0.256, -0.178 0.983 0.0414 0.465 ] } ] } DEF touchTrain TouchSensor { } DEF trainSoundFXScript Script { eventOut SFFloat mainintensity eventOut SFFloat echointensity eventOut SFTime startEffects eventOut SFTime stopEffects eventOut SFTime startTrainOut eventOut SFTime echoStart eventOut SFTime fadeStart eventOut SFTime stopTrainOut eventIn SFFloat echoFract eventIn SFFloat fadeFract eventIn SFTime startTrain eventIn SFTime stopTrain eventIn SFTime cycleTrain field SFTime soundStart 0 field SFBool entering FALSE url "vrmlscript: function echoFract(value, time) { echointensity = value; mainintensity = 1 - value; } function fadeFract(value, time) { echointensity = 1-value; mainintensity = value; }

function startTrain(value, time) { soundStart = value; startTrainOut = value; }

Page 34: CAPÍTULO  11

34

VRML 2.0 con Java CAPÍTULO 11

function stopTrain(value, time) { soundStart = 0; stopTrainOut = value; stopEffects = value; } function cycleTrain(value, time) { startEffects = value+18; stopEffects = value+22; echoStart = value+18.75; fadeStart = value+21.25; }

" } DEF trainGeomInline Transform { children Inline { url "trainGeomInline.wrl" }

translation -524 -140 1.29e+03 rotation 0.233 0.964 0.128 0.592 scale 1 1 1 center -95.9 -29 124 } DEF trainSound Sound { source DEF trainclip AudioClip { url "train.wav" loop TRUE startTime 0 stopTime 1 }

intensity 1 location -614 -141 1.44e+03 direction 0.0456 -0.612 0.79 minFront 40 maxFront 400 minBack 40 maxBack 400 } DEF trainEcho Sound { source DEF trainEchoClip AudioClip { url "trainTunnel.wav" loop TRUE startTime stopTime 1 } intensity 1 location 614 -142 1.44e+03 direction 0.0456 -0.612 0.79 minFront 40 maxFront 400 minBack 40 maxBack 400

Page 35: CAPÍTULO  11

35

VRML 2.0 con Java CAPÍTULO 11

} DEF cabView Viewpoint { position -629 -163 1.4e+03 orientation -0.0229 0.992 0.12 3.72 fieldOfView 0.785 description "cabcam" } ] center -620 -169 1420}DEF terrainGeomInline Transform { children Inline { url "terrainGeom.wrl" }

}DEF tunnelGroup Transform { children DEF tunnelGeomInline Transform { children Inline { url "tunnelGeomInline.wrl" }

translation -598 -86.6 1.06e+03 rotation 0.219 -0.976 0.0161 0.471 scale 1 1 1 }

translation 0 48.7 6.27 rotation 1 0 0 0.0467 scale 1 1 1}DEF trackGroup Transform { children Inline { url "trackInline.wrl" }

}DEF Light1 DirectionalLight { intensity 0.796 ambientIntensity 0.41 color 0.974 1 0.947 direction -0.797 -0.13 -0.59}DEF VP2 Viewpoint { position -749 -119 1.33e+03 orientation 0.0252 -0.998 -0.0534 0.655 fieldOfView 0.785 description "tunnelView"}ROUTE trainSoundFXScript.echoStart TO echoTimer.set_startTimeROUTE trainSoundFXScript.fadeStart TO fadeTimer.set_startTimeROUTE touchTrain.touchTime TO trainTimer.set_startTimeROUTE cabView.bindTime TO trainTimer.set_startTimeROUTE trainTimer.fraction_changed TO trainGroupTransInterp.set_fractionROUTE trainTimer.fraction_changed TO trainGroupRotInterp.set_fractionROUTE echoTimer.fraction_changed TO trainSoundFXScript.echoFractROUTE fadeTimer.fraction_changed TO trainSoundFXScript.fadeFract

Page 36: CAPÍTULO  11

36

VRML 2.0 con Java CAPÍTULO 11

ROUTE trainTimer.startTime_changed TO trainSoundFXScript.startTrainROUTE trainTimer.cycleTime TO trainSoundFXScript.cycleTrainROUTE trainSoundFXScript.startTrainOut TO trainclip.set_startTimeROUTE trainSoundFXScript.stopTrainOut TO trainclip.set_stopTimeROUTE trainSoundFXScript.mainintensity TO trainSound.set_intensityROUTE trainSoundFXScript.startEffects TO trainEchoClip.set_startTimeROUTE trainSoundFXScript.stopEffects TO trainEchoClip.set_stopTimeROUTE trainSoundFXScript.echointensity TO trainEcho.set_intensityROUTE trainGroupTransInterp.value_changed TO trainGroup.set_translationROUTE trainGroupRotInterp.value_changed TO trainGroup.set_rotation

La combinación de sonidos de efectos complejos

En el ejemplo anterior Creek, que muestran cómo usar múltiples sonidos para crear la geometría compleja de sonido. Puede usar múltiples sonidos para crear complejos efectos de sonido y señales para el usuario acerca de dónde son y qué entorno les rodea. En esta sección discutir algunas de las técnicas que han funcionado bien en algunos mundos que hemos desarrollado en Silicon Graphics.

Eco y resonancia

Algún día, en un mundo con superordenadores en cada vuelta, efectos de sonido como eco y resonancia-que dependen del medio ambiente que rodea el sonido puede ser calculado automáticamente, y los autores de un mundo VRML 99,0 obtendrá el efecto deseado, simplemente especificando el sonido propiedades de reflexión en torno a todos los materiales. Por ahora, en el mundo real, que los autores de VRML debe agregar estos efectos directamente en nuestros mundos. Hacemos esto mediante la creación de una segunda versión de la original de sonido que incluye o bien añade el eco o la resonancia, y hace que la segunda de sonido cuando el objeto es hacer el sonido en la zona de resonancia o echoic. Esta solución es imperfecta, porque significa que podemos añadir eco y resonancia a los sonidos que sólo se puede conocer o moverse a través de resonancia echoic o espacios.

La mejor manera de aplicar uno de estos efectos sobre el medio ambiente es tener en su sonido original y pasarla a través de un procesador de efectos que tiene efectos sólo una salida. Grabar un clip de la parte del sonido que es exactamente la misma duración que el sonido original. Añadir este efecto de sonido al sonido original, cuando el sonido que emiten objetos en el entorno adecuado. Por la animación de la intensidad de los efectos de sonido, puede incluso desaparecer en forma gradual y fuera. Cuando se inicia el efecto de sonido, debe tener el mismo startTime que el original. Si ambos son sus clips exactamente la misma longitud, los dos sonidos se sincronización exacta. (Para más información sobre la sincronización de sonido, consulte la sección "Sincronización de los sonidos y Eventos", anteriormente en este capítulo.)

Si su procesador de efectos no tiene efectos sólo una salida, puede grabar una nueva versión del sonido con el efecto añadido a la misma y cambiar a este sonido en el momento oportuno. Este método tiene el peligro de clics o el sonido aparece como interruptores, y

Page 37: CAPÍTULO  11

37

VRML 2.0 con Java CAPÍTULO 11

usted no tiene el lujo de ser capaces de desaparecer el efecto de entrada y salida.

Tomemos el ejemplo del sonido de clic en un tren a lo largo de una pista, y el efecto en el sonido de clic cuando el tren pasa por un túnel. En el fragmento de código VRML en el Listado 11.11, cuando el tren comienza un bucle alrededor de la pista, la animación horarios cycleTime un temporizador que se desvanece el tren normal de sonido en el sonido del tren en el túnel como el tren entra en el túnel, y un segundo temporizador a desaparecer el túnel de sonido de eco y reanudar el tren normal de sonido como el tren sale del túnel.

Para otro ejemplo de una cuidadosa sincronización entre la animación y las múltiples sonidos programados, véase el ejemplo del submarino en el CD-ROM.

Efectos a distancia

En el mundo natural, el sonido no atenuar uniformemente a lo largo de la distancia, por lo que el timbre de un sonido como los cambios que se alejan de ella. Frecuencias más altas atenuar más rápidamente, especialmente en un entorno con muchas superficies, como un escenario al aire libre con árboles y hierbas. Un ejemplo conocido de esta idea es el sonido de una cascada. Al acercarse a una distancia de, la cascada tiene un bajo ruido de los cuelgues de la línea principal de agua abajo la cuesta, pero como que se acerque, se oye el silbido de la pulverización que rodea la principal caída. Siseo que no lleva más lejos. En VRML, este modelo puede tener dos sonidos con diferentes rangos. Tome una cascada de sonido completo y utilizar un programa editor de sonido o efectos de sonido a la caja de filtro en un componente de baja frecuencia y un alto componente de frecuencia. Ponga ambos sonidos en el mismo lugar y definir el rango de valores de la componente de alta frecuencia mucho menor. Listado de 11-12 muestra una versión ligeramente modificada de nuestra isla con una cascada en medio de la corriente.

La combinación de sonidos de efectos complejos

En el ejemplo anterior Creek, que muestran cómo usar múltiples sonidos para crear la geometría compleja de sonido. Puede usar múltiples sonidos para crear complejos efectos de sonido y señales para el usuario acerca de dónde son y qué entorno les rodea. En esta sección discutir algunas de las técnicas que han funcionado bien en algunos mundos que hemos desarrollado en Silicon Graphics.

Eco y resonancia

Algún día, en un mundo con superordenadores en cada vuelta, efectos de sonido como eco y resonancia-que dependen del medio ambiente que rodea el sonido puede ser calculado automáticamente, y los autores de un mundo VRML 99,0 obtendrá el efecto deseado, simplemente especificando el sonido propiedades de reflexión en torno a todos los materiales. Por ahora, en el mundo real, que los autores de VRML debe agregar estos efectos directamente en nuestros mundos. Hacemos esto mediante la creación de una

Page 38: CAPÍTULO  11

38

VRML 2.0 con Java CAPÍTULO 11

segunda versión de la original de sonido que incluye o bien añade el eco o la resonancia, y hace que la segunda de sonido cuando el objeto es hacer el sonido en la zona de resonancia o echoic. Esta solución es imperfecta, porque significa que podemos añadir eco y resonancia a los sonidos que sólo se puede conocer o moverse a través de resonancia echoic o espacios.

La mejor manera de aplicar uno de estos efectos sobre el medio ambiente es tener en su sonido original y pasarla a través de un procesador de efectos que tiene efectos sólo una salida. Grabar un clip de la parte del sonido que es exactamente la misma duración que el sonido original. Añadir este efecto de sonido al sonido original, cuando el sonido que emiten objetos en el entorno adecuado. Por la animación de la intensidad de los efectos de sonido, puede incluso desaparecer en forma gradual y fuera. Cuando se inicia el efecto de sonido, debe tener el mismo startTime que el original. Si ambos son sus clips exactamente la misma longitud, los dos sonidos se sincronización exacta. (Para más información sobre la sincronización de sonido, consulte la sección "Sincronización de los sonidos y Eventos", anteriormente en este capítulo.)

Si su procesador de efectos no tiene efectos sólo una salida, puede grabar una nueva versión del sonido con el efecto añadido a la misma y cambiar a este sonido en el momento oportuno. Este método tiene el peligro de clics o el sonido aparece como interruptores, y usted no tiene el lujo de ser capaces de desaparecer el efecto de entrada y salida.

Tomemos el ejemplo del sonido de clic en un tren a lo largo de una pista, y el efecto en el sonido de clic cuando el tren pasa por un túnel. En el fragmento de código VRML en el Listado 11.11, cuando el tren comienza un bucle alrededor de la pista, la animación horarios cycleTime un temporizador que se desvanece el tren normal de sonido en el sonido del tren en el túnel como el tren entra en el túnel, y un segundo temporizador a desaparecer el túnel de sonido de eco y reanudar el tren normal de sonido como el tren sale del túnel.

Para otro ejemplo de una cuidadosa sincronización entre la animación y las múltiples sonidos programados, véase el ejemplo del submarino en el CD-ROM.

Efectos a distancia

En el mundo natural, el sonido no atenuar uniformemente a lo largo de la distancia, por lo que el timbre de un sonido como los cambios que se alejan de ella. Frecuencias más altas atenuar más rápidamente, especialmente en un entorno con muchas superficies, como un escenario al aire libre con árboles y hierbas. Un ejemplo conocido de esta idea es el sonido de una cascada. Al acercarse a una distancia de, la cascada tiene un bajo ruido de los cuelgues de la línea principal de agua abajo la cuesta, pero como que se acerque, se oye el silbido de la pulverización que rodea la principal caída. Siseo que no lleva más lejos. En VRML, este modelo puede tener dos sonidos con diferentes rangos. Tome una cascada de sonido completo y utilizar un programa editor de sonido o efectos de sonido a la caja de filtro en un componente de baja frecuencia y un alto componente de frecuencia. Ponga ambos sonidos en el mismo lugar y definir el rango de valores de la componente de alta

Page 39: CAPÍTULO  11

39

VRML 2.0 con Java CAPÍTULO 11

frecuencia mucho menor. Listado de 11-12 muestra una versión ligeramente modificada de nuestra isla con una cascada en medio de la corriente.

#VRML V2.0 utf8Group { childern [ DEF terrainInline Transform { children Inline { url "terrainInline.wrl" } } DEF oceanInline Transform { children Inline { url "oceanInline.wrl" } } DEF background Transform { children Background { groundAngle 1.01 groundColor [ 0.1 0.1 0.09, 0.48 0.48 0.45 ] skyAngle [ 0.05, 0.1, 1, 1.57 ] skyColor [ 1 1 0, 1 1 0.5, 0.125 0.125 0.5, 0.3 0.3 0.55, 0.64 0.73 0.84 ] } translation 139.537 161.86 -16.62 rotation 0 0 1 0 } DEF Light1 DirectionalLight { direction -0.302 -0.945 0.124 } DEF IslandSound Sound { source DEF cricketClip AudioClip { url "crickets.wav" loop TRUE startTime 1 } location 0 10 0 direction 0 0 1 minFront 400 maxFront 550 minBack 400 maxBack 550 spatialize FALSE } DEF viewpoints Transform { children [ DEF VP2 Viewpoint { position -955.266 285.332 1151.13 orientation -0.030 -0.995 -0.091 0.6998

Page 40: CAPÍTULO  11

40

VRML 2.0 con Java CAPÍTULO 11

fieldOfView 0.785398 description "full view" } DEF VP1 Viewpoint { position 5.184 194.517 158.337 orientation -0.0322 -0.995 -0.093 0.704 description "pond view" } ] } Transform { children DEF waveSound Sound { source DEF waveclip AudioClip { url "waves.wav" loop TRUE startTime 1 } location 0 0 -34.8102 direction 0 0 1 minFront 56.4 maxFront 564 minBack 56.4 maxBack 564 } translation 0 -27.1887 0 scale 1 0.152 1 } Inline { url "pondInline.wrl" bboxCenter 150.062 160.882 -12.6917 bboxSize 126.917 0.867004 98.9718 } DEF upperStream Transform { children Shape { appearance Appearance { material Material { ambientIntensity 0.164765 diffuseColor 0.285 0.306 0.383 specularColor 0 0 0 emissiveColor 0 0 0 shininess 0.2 transparency 0 } texture NULL textureTransform NULL } geometry IndexedFaceSet { coord Coordinate { point [ 59.5969 146.807 79.907, 113.073 161.273 26.3747, 99.4099 161.273 7.55858, 36.6707 146.807 82.1189, 25.3372 146.242 149.649, 37.5961 146.242 148.299 ] } color NULL coordIndex [ 0, 1, 2, 3, -1, 0, 1, 2,

Page 41: CAPÍTULO  11

41

VRML 2.0 con Java CAPÍTULO 11

3, -1, 0, 3, 4, 5, -1, 0, 3, 4, 5, -1 ] colorIndex [ ] normal NULL ccw TRUE solid TRUE convex TRUE creaseAngle 0.5 } } } DEF waterFall Transform { children [ Shape { appearance Appearance { material Material { ambientIntensity 0.063 diffuseColor 0.934 0.950 1 specularColor 0 0 0 emissiveColor 0.489 0.489 0.489 shininess 0.2 transparency 0 } texture ImageTexture { url "falltex.gif" } textureTransform TextureTransform { translation 0 0 rotation 0 scale 23.1188 3.63558 center 0 0 } } geometry IndexedFaceSet { coord Coordinate { point [ 32.7671 90.6663 183.129, 37.5961 146.242 148.299, 25.3372 146.242 149.649, 19.9931 90.6663 188.953, 17.6137 23.8628 219.136, 35.1548 23.8628 215.602 ] } color NULL coordIndex [ 0, 1, 2, 3, -1, 0, 1, 2, 3, -1, 4, 5, 0, 3, -1, 4, 5, 0, 3, -1 ] colorIndex [ ] normal NULL texCoord TextureCoordinate { point [ 0.5 0.686985, 0.5 0.812528, 0.5 0.812528, 0.5 0.686985, 0.518809 0.698483, 0.52581 0.784354, 0.5 0.577903, 0.5 0.577903,

Page 42: CAPÍTULO  11

42

VRML 2.0 con Java CAPÍTULO 11

0.515802 0.583924, 0.514255 0.662021 ] } texCoordIndex [ 0, 1, 2, 3, -1, 4, 5, 2, 3, -1, 6, 7, 0, 3, -1, 6, 8, 9, 3, -1 ] ccw TRUE solid TRUE convex TRUE creaseAngle 0.5 }

} ] center 27.605 85.052 183.717 } DEF lowerStream Transform { children Shape { appearance Appearance { material Material { ambientIntensity 0.152091 diffuseColor 0.309 0.331 0.415 specularColor 0.106 0.106 0.106 shininess 0.2 } } geometry IndexedFaceSet { coord Coordinate { point [ 35.1548 23.8628 215.602, 17.6137 23.8628 219.136, 19.496 12.9992 335.064, 43.0546 13.2699 334.429, -4.54715 0 406.479, 39.654 0 402.414 ] } color NULL coordIndex [ 0, 1, 2, 3, -1, 2, 4, 5, 3, -1, 0, 1, 2, 4, 5, 3, -1 ] colorIndex [ ] normal NULL ccw TRUE solid TRUE convex TRUE creaseAngle 0.5 } } } DEF upstreamSoundGroup Transform { children DEF upperStreamSound Sound { source DEF streamClip AudioClip { url "stream.wav" loop TRUE startTime 1 } location 0 0 0 direction 0 0 1

Page 43: CAPÍTULO  11

43

VRML 2.0 con Java CAPÍTULO 11

minFront 50 maxFront 70 minBack 50 maxBack 70 } translation 55.31 147.58 76.66 rotation 0.209 -1.0 0.039 0.45 scale 0.71 0.71 1.77 } DEF loStreamSoundGroup Transform { children Transform { children DEF lowerStreamSound Sound { source USE streamClip location 0 0 0 direction 0 0 1 minFront 50 maxFront 70 minBack 50 maxBack 70 } translation 31.6566 15.2535 311.177 rotation 0 0 1 0 scale 0.73 0.73 1.87 } } DEF waterfallSoundGroup Transform { children [ DEF waterfallFar Sound { source DEF Sound1clip AudioClip { url "wfRumble.wav" loop TRUE startTime 1 } location 0 0 0 direction 0 0 1 minFront 60 maxFront 140 minBack 20 maxBack 50 } DEF waterfallNear Sound { source DEF wfnear AudioClip { url "wfSpray.wav" loop TRUE startTime 1 } location 0 0 0 direction 0 0 1 minFront 20 maxFront 70 minBack 10 maxBack 40 } ] translation 17.5772 29.0766 196.069 rotation -0.994789 0.0966599 0.0324386 0.650729 scale 1.7 2.87 1.29

Page 44: CAPÍTULO  11

44

VRML 2.0 con Java CAPÍTULO 11

} DEF flyNav NavigationInfo { avatarSize [ 1, 4, 4 ] type "FLY" } DEF walkNav NavigationInfo { avatarSize [ 1, 4, 4 ] } DEF mouthView Viewpoint { position -6.7292 7.27252 402.905 orientation 0.95 -0.273 -0.149 0.228 description "streamMouth" } DEF wfBottomVP Viewpoint { position 14.68 25.18 237.38 orientation 0.99 -0.036 -0.14 0.89 fieldOfView 1.5 description "waterfallBottom" } DEF wfTopVP Viewpoint { position 31.3286 181.273 131.992 orientation 0.197 0.853 0.483 3.391 description "waterfallTop" } DEF overviewVP Viewpoint { position 393.936 592.529 260.958 orientation 0.454 0.77 0.448 1.48 description "overview" } ]}ROUTE mouthView.isBound TO walkNav.set_bindROUTE wfBottomVP.isBound TO walkNav.set_bind

11,12 Waterfal En la Figura 11-7 a continuación, puede ver la gama más amplia de la cascada bajo retumbar el sonido y la más corta de la gama superior de la cascada siseo del aerosol.

Procesamiento de sonido es caro. La fusión de múltiples flujos de sonido implica la manipulación de un montón de bits y tiene una cantidad significativa de tiempo de CPU y la memoria. Por lo tanto, es importante entender cómo controlar el uso del sonido. Algunas de las preocupaciones que menciono en las siguientes secciones dependen de implementaciones de navegador, y las aplicaciones están cambiando rápidamente.

Page 45: CAPÍTULO  11

45

VRML 2.0 con Java CAPÍTULO 11

Compartir clip de sonido y Nodos

La parte más importante de un sonido para compartir es el archivo de sonido, ya que es la parte de su sistema de sonido que ocupa la mayor parte de los recursos-principalmente la memoria y el tiempo de descarga. Compartir los nodos de sonido y guarda AudioClips sólo una pequeña cantidad de memoria y, probablemente, no guarda el procesamiento de sonido, ya que el navegador aún tiene que hacer todos los cálculos para la colocación de sonido cada vez que el nodo de sonido, y los resultados se debe mezclar por separado en el final de salida de sonido.

¿Qué significa compartir un nodo de sonido-es decir, a nombre de un sonido DEF y USE nodo en otra parte de su escena gráfico? Se debe garantizar que el archivo de sonido es cargado una sola vez. También significa que usted juega exactamente el mismo sonido en el mismo tiempo y la intensidad de dos lugares diferentes en tu mundo. Los sonidos también tienen el mismo rango de los parámetros de dirección y, aunque puede ser diferente por la escala que se transforma por encima de ellos en la estructura de la escena. Esta técnica puede ser útil si está creando una línea de sonidos-, ya que por un mar rasgados borde si quiere cubrir la costa con una onda de sonido razonablemente constante.

Usted obtiene casi el mismo efecto si se utilizan los nodos de sonido separada, DEF y USE, pero la misma fuente-el mismo nodo AudioClip. Compartir el clip también debería velar por que el archivo de sonido es cargado una sola vez, pero los dos sonidos siguen desempeñando la misma fuente de sonido en el mismo tiempo, sin embargo, ahora puede tener diferentes tipos de dirección y valores de intensidad de sonido para los distintos lugares. Compartir el AudioClip garantiza que los sonidos desempeñado por los distintos nodos de sonido serán idénticos y sincronizados.

La creación de dos nodos de sonido, cada uno con su propio nodo AudioClip que utilice la misma URL, le permite reproducir el mismo sonido desde diferentes lugares en diferentes momentos. La mayoría de los navegadores deben compartir el archivo de audio, sino que depende de la aplicación del navegador.

Quiero hacer aquí una sugerencia sobre el rendimiento. Actualmente, la plataforma común de VRML es un ordenador Pentium-clase sin aceleración gráfica. Esta plataforma limita severamente la cantidad que puede poner en un mundo VRML, los mundos y que tratan de hacer demasiado sólo frustrar los usuarios. En nuestra tienda, nosotros decimos "el rendimiento es el rey", y prestar especial atención a la forma de un título realiza todo el camino a través del proceso de desarrollo. Al final del ciclo de desarrollo, hemos de disponer de tiempo para los ajustes de rendimiento: la hora de buscar en cada aspecto del título, y tiempo para pensar en formas más eficientes para lograr los mismos resultados.

Page 46: CAPÍTULO  11

46

VRML 2.0 con Java CAPÍTULO 11

Prioridad de sonido

Otro aspecto del navegador de VRML sonido es el número de sonidos simultáneos del navegador puede jugar. La especificación dice que los navegadores con capacidad limitada de sonido deben aplicar un sistema de prioridades que permite al autor para determinar los sonidos que deben ser seleccionados para jugar. El sonido es una prioridad número de punto flotante entre 0 y 1, pero se puede aplicar un sencillo y eficaz sistema de prioridades, utilizando sólo los valores extremos. Dar todos sus sonidos de fondo en una prioridad de 0 y todos sus sonidos relacionados con el caso en una prioridad de 1. La especificación también indica que para los sonidos con prioridad superior a 0,5, el navegador debe elegir los sonidos con las últimas horas de inicio. El efecto de estas especificaciones es que el navegador debería jugar todos los sonidos relacionados con el evento, pasando la más antigua si hay demasiados de jugar todos a la vez. De sonidos con una prioridad inferior a 0,5 (sonidos de fondo), el navegador debe seleccionar el sonido más alto en el actual punto de vista. Así, el navegador debe hacer el cálculo de la intensidad activa de todos los sonidos para cada marco. Además, se plantea la posibilidad de cambiar los sonidos que el usuario se mueve en todo el mundo, o como una secuencia de comandos o animación manipula los valores de intensidad de sonido.

Ocasionalmente, usted puede querer hacer algunos ajustes a la 0 y 1 sistema de prioridades. Por ejemplo, si tiene música de fondo que siempre debe de jugar, aunque no sea el más cercano sonido de fondo, puede darle una prioridad de 0,4.

Control de reproducción de sonido

A veces puede que desee limitar el número de sonidos de juego por debajo de lo que el navegador puede manejar. Si se activa un sonido (hacer esto por su stopTime ahora), el navegador puede ignorar un sonido en lugar de calcular los ciclos de los residuos que es demasiado lejos para oír o no lo suficientemente alto para ser significativo.

Cuando un título es casi completa, que paso mucho tiempo buscando en las partes del mundo en el que otras partes se puede apagar porque no están haciendo contribuciones significativas. Esta práctica se aplica a los sonidos, las animaciones, y la geometría. LD VisibilitySensors nodos y son útiles para el sacrificio de la geometría y las animaciones, pero son de riesgo para el sonido. LD nodos y ProximitySensors puede apagar un sonido que está fuera de alcance, pero su uso en una que es audible causas probablemente un clic. Además, si su LD especificado el mismo sonido en dos (cerca) los niveles, podría haber un pop en el sonido del límite de detección cuando se cambia entre nodo esos niveles. Cada mundo es único (de ahí el plan de pasar algún tiempo en los ajustes de rendimiento), pero he tenido éxito usando un sensor de proximidad para desactivar una sección entera de un mundo en que el usuario no está cerca de él apagando sus animaciones y

Page 47: CAPÍTULO  11

47

VRML 2.0 con Java CAPÍTULO 11

sonidos. Luego use un nodo LDD para simplificar la geometría. Mantenimiento de los dos me permite ajustar las distancias de la geometría sin preocuparse de cómo se comportan los sonidos.

Sonido por sí mismo

Porque algunos de VRML 2.0 proporciona características de sonido no es fácil volver a crear en un contexto en dos dimensiones, varios mundos ya se han producido en su conjunto, cuya finalidad es ser un instrumento musical. Dos buenos ejemplos son los Harmonium mundo, accesibles a través de http://vrml.sgi.com, y CyberGourds, un tambor de la máquina virtual creada por Sam Chen para el Silicon Graphics O2 Experiencia Fuera de Caja. Mi colega Kent Sandvik creado un mundo muy sencillo de sonido a un mezclador de sonido ambiente espacial. Una versión de este mundo, llamado ambiente, se incluye en el CD-ROM que viene con este libro.

Su depuración de las estructuras de sonido

Depuración de sonido es difícil porque hay tantos factores que pueden llevar un sonido de jugar cuando y donde le esperan, ninguno de los cuales es fácilmente visible. Aquí está una breve lista de algunas técnicas para la búsqueda de sus sonidos desaparecidos.

Si el sonido no se reproduce,

• ¿Tiene usted un AudioClip (o MovieTexture) nodo? • ¿Tiene usted una url de un archivo de sonido? • ¿Es el archivo de sonido exactamente dónde está apuntando la url? • ¿Es el archivo de sonido en un formato que su navegador puede jugar? • ¿Son sus valores de rango lo suficientemente grande? • ¿Está dentro de la gama cuando se le para comprobar el sonido? • Si es necesario, es el AudioClip startTime cable a un disparador? • Si es necesario, es el evento disparador de cocción? • En caso de que se conviertan en bucle? Si es así, ¿no? • ¿Es la intensidad se presentó?

He visto a cada uno de estos puntos causa un sonido para jugar y no han aprendido a través de la experiencia como prueba para algunos de los casos más oscuros, y la revisión de algunas de estas en las próximas secciones.

Ponga a prueba sus archivos de sonido

Tengo un archivo muy simple soundTest.wrl mano, y si tengo preguntas acerca de si un sonido

Page 48: CAPÍTULO  11

48

VRML 2.0 con Java CAPÍTULO 11

funciona en un navegador, puse la URL en el AudioClip en soundTest.wrl y probarlo. Es un rápido y fácil de prueba para asegurarse de que su archivo es aceptable.

Comprueba tu alcance

Rango de control es difícil, especialmente en situaciones en las que tanto el usuario y el sonido se mueve. Ayuda a visualizar los límites del rango máximo y mínimo elipsoide. Cosmo jugador de la plataforma SGI puede ayudar con esta tarea. Si establece el principio de la descripción de, digamos, de depuración y, a continuación, señala el jugador del cosmo elipsoides para el sonido. Ahora tengo un PROTO que puede sustituir a un nodo de sonido y de llamar la línea fija como elipsoides. Si no tiene un fácil acceso a cualquier herramienta, otra forma de poner a prueba gama es tomar un sonido muy reconocible como una onda senoidal tono y configurarlo para que se de inicio y de lazo para siempre. Luego navegar alrededor de su mundo, tener una idea de cómo encaja el sonido, y realice los ajustes de gama. Cuando te sientas a gusto con su gama de valores, que su verdadero mecanismo de activación de sonido y volver pulg

Comprueba tu disparadores

Si su archivo de sonido es aceptable, y sus rangos de trabajo cuando el sonido se reproduce continuamente, el problema probablemente sea el cableado o en su activación. Depuración de su sonido desencadenar eventos puede ser un problema porque es difícil saber cuando su disparo se desencadenan los acontecimientos. Herramientas de autor como Cosmo Mundos proporcionar mecanismos de rastrear, pero incluso si sólo tiene un navegador con la que trabajar, todavía hay trucos que pueden desempeñar. Crear un script PROTO que muestra un número o incluso simplemente un color que al enviar un startTime o un stopTime. Alambre para que el gatillo para el sonido. Si no ve el gatillo fuego, pasar algún tiempo mirando el código tratando de averiguar por qué. Buena suerte.

Echa un vistazo a la página web de recursos de VRML (http://vrml.sgi.com) de otras herramientas que pueden ayudar con la depuración y de muchos otros ejemplos de técnicas de VRML. Indicaciones para el futuro de sonido en VRML

Los diseñadores de VRML previsto un mecanismo para ampliar las capacidades de VRML 2.0. Ellos esperan que los autores y el navegador de VRML ejecutores para crear prototipos con capacidades de otros autores gustaría utilizar.

Protos, Protos, y más PROTOS (nativos y Nodos)

VRML 2.0 se ha diseñado para que sea extensible, y los prototipos son el mecanismo para las extensiones. En muchas aplicaciones, se puede aplicar directamente en VRML PROTOS y utilizarlos

Page 49: CAPÍTULO  11

49

VRML 2.0 con Java CAPÍTULO 11

como nodos. La especificación de VRML permite la ejecución del navegador nativo para crear implementaciones de prototipos que son más eficientes que los creados en VRML. Además, puede acceder a aplicaciones nativas plataforma de servicios del sistema de acogida. Prototipo de las ampliaciones de las capacidades de sonido de VRML mayoría requieren este tipo de sistema de apoyo. Navegador o los autores que los diseñadores crear aplicaciones nativas para determinados navegadores también debe crear las implementaciones no nativas que se ejecutan en navegadores que no tienen una aplicación nativa. Véase el capítulo 3 para obtener más información sobre el uso de PROTOS.

Streaming de audio

Streaming es un mecanismo para el envío de una señal de audio continuamente en la Web desde el servidor al cliente. Un flujo de audio se reproduce cuando se recibe. Por lo tanto, streaming de audio no requieren de una larga espera, mientras que el de descargas de audio antes de que el usuario puede interactuar con el mundo. Además, los flujos de audio puede apoyar la comunicación de voz entre usuarios que comparten un mundo simultáneamente. Varios navegadores ya soportan el streaming de audio, y otros están trabajando para proporcionar la misma. Esperamos que la comunidad VRML pronto decidirá sobre algunos prototipos estándar para el streaming de apoyo, no sólo para el audio, sino también de la geometría y los datos de animación.

Secuencia de sonido

Más en el futuro es específico para el control de secuencia de sonido. Los archivos MIDI se inició y se detuvo en la misma forma como archivo de sonido AudioClips. MIDI, porque es una representación estructural de un flujo de música, más controles se podrían aplicar a un flujo de MIDI si un medio para describir los cambios y los entregamos a la existencia de reproductor MIDI. Creo que este es un lugar potencialmente fructífera para crear una aplicación nativa de un SequenceClip nodo. Además de la norma startTime y stopTime, MIDI arroyos pueden proporcionar los tradicionales controles de software que ofrecen secuenciadores MIDI, como el tempo, loop, instrumento de cartografía, pista de muting, y solos.