Aplicación de un efecto de posicionamiento 3D a un sonido

XNA Game Studio 4.0

En este tema, se muestra cómo aplicar efectos de posicionamiento 3D a un SoundEffect. El sistema de audio de XNA Framework admite efectos de posicionamiento de audio 3D. Utiliza las clases AudioEmitter y AudioListener, y el método SoundEffectInstance.Apply3D. Los efectos simulan el posicionamiento 3D del sonido ajustando la mezcla de altavoces para las colas que usan los valores 3D. La mezcla de altavoces es el único efecto que se aplica automáticamente con este método.

Muestra completa

En el ejemplo siguiente se usa una rotación circular alrededor de un AudioListener inmóvil para dar énfasis al efecto 3D.

El código de este tema muestra la técnica para aplicar efectos de posicionamiento 3D. Puede descargar una muestra de código completa de este tema, incluidos el código fuente completo y todos los archivos auxiliares que requiere la muestra.

Aplicación de efectos de posicionamiento 3D básicos a un SoundEffect

Para recuperar y reproducir un SoundEffect en 3D

  1. Agregue un archivo de ondas (.wmv) a un nuevo proyecto XNA Game Studio según se describe en Reproducción de un sonido.

    Bb447687.note(es-ES,XNAGameStudio.40).gifNota

    El proyecto debe contener al menos un SoundEffect.

  2. Declare SoundEffect y Stream con el método que se muestra en Reproducción de un sonido. Aparte de ese método, declare SoundEffectInstance.

    SoundEffectInstance soundEffectInstance;
    
  3. Cree un AudioEmitter, un AudioListener y un Vector3 para almacenar la posición 3D de la entidad de sonido.

    AudioEmitter emitter = new AudioEmitter();
    AudioListener listener = new AudioListener();
    Vector3 objectPos;
    
  4. En el método LoadContent, establezca el objeto SoundEffectInstance en el valor que devuelva SoundEffect.CreateInstance.

    soundfile = TitleContainer.OpenStream(@"Content\buzz.wav");
    soundEffect = SoundEffect.FromStream(soundfile);
    soundEffectInstance = soundEffect.CreateInstance();
    
  5. Llame a Apply3D en la SoundEffectInstance, y pase el emisor y el agente de escucha.

    soundEffectInstance.Apply3D(listener, emitter);
    

    Establezca la propiedad IsLooped en true antes de llamar a Play si quiere que se repita el sonido.

  6. Llame a SoundEffectInstance.Play para reproducir el sonido.

    soundEffectInstance.Play();
    

Procedimiento para procesar datos de audio

  1. Establezca la estructura Vector3 en la posición desde la que desea que provenga el sonido.

    // Move the object around in a circle.
    objectPos = new Vector3(
        (float)Math.Cos(gameTime.TotalGameTime.TotalSeconds) / 2,
        0,
        (float)Math.Sin(gameTime.TotalGameTime.TotalSeconds));
    
  2. Establezca la propiedad AudioEmitter.Position en este vector.

    emitter.Position = objectPos;
    

    También tiene la opción de establecer la estructura Vector3 en la posición en que quiera que esté el agente de escucha del sonido 3D y, a continuación, establecer la propiedad AudioListener.Position en este vector.

  3. Llame a SoundEffectInstance.Apply3D en el objeto de cola que recuperó anteriormente y pase el AudioEmitter, que es un AudioListener.

    soundEffectInstance.Apply3D(listener, emitter);
    
Bb447687.note(es-ES,XNAGameStudio.40).gifNota
Al llamar al método SoundEffectInstance.Apply3D, se establece automáticamente la mezcla de altavoces para cualquier sonido que este efecto de sonido reproduzca para un valor calculado hallando la diferencia de los valores de Position entre listener y emitter. Al preparar la mezcla, el sonido se convierte en monoaural. La información de estéreo del sonido se descarta.

Conceptos

Aplicación de un efecto de posicionamiento 3D a una indicación (XACT)
Muestra cómo aplicar un efecto de posicionamiento 3D a una indicación.
Reproducción de un sonido
Muestra cómo reproducir un sonido sencillo con SoundEffect.
Creación de un bucle de sonido
Muestra cómo crear un bucle de sonido.
Creación y reproducción de sonidos
Proporciona varias introducciones sobre la tecnología de audio y presenta los escenarios predefinidos para mostrar cómo se usa el audio.

Referencia

SoundEffect Clase
Proporciona un recurso de sonido cargado.
SoundEffectInstance Clase
Proporciona una única versión en reproducción, en pausa o detenida de un sonido de SoundEffect.
AudioListener Clase
Representa a un agente de escucha de audio 3D.
AudioEmitter Clase
Representa a un emisor de audio 3D.
Mostrar: