You are on page 1of 50

1

VRML 2.0 con Java CAPÍTULO 11

CAPÍTULO 11
Trabajo con sonidos en 3-D
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

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
3

VRML 2.0 con Java CAPÍTULO 11

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 AudioClip, y el nodo MovieTexture) son
4

VRML 2.0 con Java CAPÍTULO 11

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
5

VRML 2.0 con Java CAPÍTULO 11

• ¿Qué forma toma el sonido


• ¿Hasta que llegue
• ¿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.
6

VRML 2.0 con Java CAPÍTULO 11

Figura 11.1 Esquema del nodo de sonido


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
7

VRML 2.0 con Java CAPÍTULO 11

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 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.
8

VRML 2.0 con Java CAPÍTULO 11

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 {
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]
)
9

VRML 2.0 con Java CAPÍTULO 11

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
}
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.
10

VRML 2.0 con Java CAPÍTULO 11

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
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).
11

VRML 2.0 con Java CAPÍTULO 11

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
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
12

VRML 2.0 con Java CAPÍTULO 11

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
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


13

VRML 2.0 con Java CAPÍTULO 11


Group {
children [
DEF terrainInline Transform {
children Inline {
url "islandTerrain.wrl"
}
}
DEF pondGroup Transform {
children [
DEF pondInline Transform {
children Inline {
url "pondInline.wrl"
}
}
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
14

VRML 2.0 con Java CAPÍTULO 11


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
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.
15

VRML 2.0 con Java CAPÍTULO 11

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.

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
}
16

VRML 2.0 con Java CAPÍTULO 11


}
translation 0 0 25
}
]
}
DEF VP1 Viewpoint {
position -600 20 250
orientation 0 -1 0 1.54264
fieldOfView 0.785398
description "entry"
}
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
17

VRML 2.0 con Java CAPÍTULO 11

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.
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.
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.
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
20

VRML 2.0 con Java CAPÍTULO 11

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
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 utf8


Group {
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
21

VRML 2.0 con Java CAPÍTULO 11

escena. Cuando se combina con un ProximitySensor, puede 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 utf8


Group {
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
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.touch
ROUTE toggleScript.start TO noiseClip.startTime
ROUTE 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 utf8


Group {
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.enter
23

VRML 2.0 con Java CAPÍTULO 11


ROUTE timeOffsetScript.start to entryClip.startTime
ROUTE timeOffsetScript.stop to entryClip.stopTime

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.
24

VRML 2.0 con Java CAPÍTULO 11

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 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
25

VRML 2.0 con Java CAPÍTULO 11

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 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.
26

VRML 2.0 con Java CAPÍTULO 11

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.

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.
27

VRML 2.0 con Java CAPÍTULO 11

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.

#VRML V2.0 utf8


Group {
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 {}
}
28

VRML 2.0 con Java CAPÍTULO 11


DEF CLICKOFF TouchSensor {}
]
}
]
}
ROUTE CLICK.touchTime TO MOVIE.startTime
ROUTE 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.

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.
29

VRML 2.0 con Java CAPÍTULO 11

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
}
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
}
30

VRML 2.0 con Java CAPÍTULO 11


]
}
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 {
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
31

VRML 2.0 con Java CAPÍTULO 11


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 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
32

VRML 2.0 con Java CAPÍTULO 11

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"
}
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 {
33

VRML 2.0 con Java CAPÍTULO 11


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,
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 {
34

VRML 2.0 con Java CAPÍTULO 11


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;
}

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
35

VRML 2.0 con Java CAPÍTULO 11


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
}
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
36

VRML 2.0 con Java CAPÍTULO 11


}

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_startTime
ROUTE trainSoundFXScript.fadeStart TO fadeTimer.set_startTime
ROUTE touchTrain.touchTime TO trainTimer.set_startTime
ROUTE cabView.bindTime TO trainTimer.set_startTime
ROUTE trainTimer.fraction_changed TO trainGroupTransInterp.set_fraction
ROUTE trainTimer.fraction_changed TO trainGroupRotInterp.set_fraction
ROUTE echoTimer.fraction_changed TO trainSoundFXScript.echoFract
ROUTE fadeTimer.fraction_changed TO trainSoundFXScript.fadeFract
ROUTE trainTimer.startTime_changed TO trainSoundFXScript.startTrain
ROUTE trainTimer.cycleTime TO trainSoundFXScript.cycleTrain
ROUTE trainSoundFXScript.startTrainOut TO trainclip.set_startTime
ROUTE trainSoundFXScript.stopTrainOut TO trainclip.set_stopTime
ROUTE trainSoundFXScript.mainintensity TO trainSound.set_intensity
ROUTE trainSoundFXScript.startEffects TO trainEchoClip.set_startTime
ROUTE trainSoundFXScript.stopEffects TO trainEchoClip.set_stopTime
ROUTE trainSoundFXScript.echointensity TO trainEcho.set_intensity
ROUTE trainGroupTransInterp.value_changed TO trainGroup.set_translation
ROUTE 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
37

VRML 2.0 con Java CAPÍTULO 11

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
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
38

VRML 2.0 con Java CAPÍTULO 11

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
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
39

VRML 2.0 con Java CAPÍTULO 11

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.

#VRML V2.0 utf8


Group {
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 ]
}
40

VRML 2.0 con Java CAPÍTULO 11


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
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
}
41

VRML 2.0 con Java CAPÍTULO 11


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,
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
}
42

VRML 2.0 con Java CAPÍTULO 11


}
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,
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,
43

VRML 2.0 con Java CAPÍTULO 11


-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
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
44

VRML 2.0 con Java CAPÍTULO 11


}
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
}
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_bind
45

VRML 2.0 con Java CAPÍTULO 11


ROUTE 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.

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.
46

VRML 2.0 con Java CAPÍTULO 11

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.

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
47

VRML 2.0 con Java CAPÍTULO 11

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 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
48

VRML 2.0 con Java CAPÍTULO 11

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 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,
49

VRML 2.0 con Java CAPÍTULO 11

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 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
50

VRML 2.0 con Java CAPÍTULO 11

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.

You might also like