XAudio2 para cargar y reproducir un archivo .wav en XBOX One.
En las secciones siguientes se describe cómo usar XAudio2 para cargar y reproducir un sonido en el Development Kit de XBOX One.
- Tipos de datos importantes de XAudio2
- Inicialización de XAudio2
- Carga de un archivo .wav
- Establecimiento de una ruta de acceso a un archivo .wav
- Reproducción de un archivo .wav
- Finalización de un archivo .wav
XAudio2, descargue el ejemplo SimplePlaySound de los ejemplos del Microsoft Game Development Kit (GDK).
Tipos de datos importantes de XAudio2
XAudio2 proporciona varios tipos de datos para ayudarle a reproducir efectos de sonido en XBOX One. Para reproducir un archivo .wav, necesita al menos los siguientes tipos de datos.
-
IXAudio2: esta es la interfaz del objetoXAudio2que administra todos los estados del motor de audio, el subproceso de procesamiento de audio, el grafo de voces y mucho más. -
IXAudio2SourceVoice: use una voz de origen para enviar datos de audio a la canalización de procesamiento deXAudio2. Para que se oigan, los datos de voz deben enviarse a una voz de masterización. -
IXAudio2MasteringVoice: use este tipo de datos para representar el dispositivo de salida de audio. Los búferes de datos no se pueden enviar directamente a las voces de masterización. Sin embargo, para que se oigan, los datos enviados a otros tipos de voces deben dirigirse a una voz de masterización.
-
PlaySoundVoiceContext: use este tipo de datos para liberar el búfer de audio después del procesamiento. -
IXAudio2VoiceCallback: este tipo de datos contiene métodos que notifican al cliente cuando se producen determinados eventos en unaIXAudio2SourceVoiceespecífica.
Inicialización de XAudio2
CoInitializeEx() inicializa el modelo de objetos componentes (COM) para su uso por parte del subproceso actual. Establezca el primer parámetro en NULL. Establezca el segundo parámetro en COINIT_MULTITHREADED.
XAudio2Create() crea un nuevo objeto XAudio2 y devuelve un puntero a su interfaz IXAudio2. Asegúrese de que XAUDIO2_PROCESSOR esté establecido en un valor válido. Se recomienda el valor XAUDIO2_USE_DEFAULT_PROCESSOR para permitir que el sistema operativo elija el procesador ideal según la plataforma de hardware.
IXAudio2::CreateMasteringVoice() crea y configura una voz de masterización y apunta a ella con el puntero proporcionado por el usuario.
C++
Carga de un archivo .wav
Para acceder al archivo de audio, use una instancia de la claseWaveFile.
* Para abrir un archivo .wav y recuperar información almacenada en el encabezado del archivo, llame a WaveFile::Open(LPCWSTR strFileName).
- Para determinar el formato del archivo .wav, llame a
WaveFile::GetFormat(). - Para determinar el número de bytes y muestras del archivo .wav, llame a
WaveFile::GetDuration(). - Para leer los datos de muestra en memoria, llame a
WaveFile::ReadSample().
C++
Establecimiento de una ruta de acceso a un archivo .wav
Para cargar y usar archivos de audio, use el código siguiente para encontrar la ubicación de instalación de su proyecto en el dispositivo local. Almacene la ubicación de instalación en una cadena. Anexe la ubicación del archivo de audio al final de la cadena de la ubicación de instalación.C++
Reproducción de un archivo .wav
Cree una claseIXAudio2::CreateSourceVoice() y, a continuación, úsela para enviar datos de audio a la canalización de procesamiento de XAudio2. Para que los datos de voz se oigan, debe enviarlos a una voz de masterización directamente o a través de voces de submezcla intermedias. Para almacenar los detalles del archivo de audio, cree un XAUDIO2_BUFFER.
Después de crear e inicializar el búfer de XAudio2 y la voz de origen, llame a IXAudio2SourceVoice::SubmitSourceBuffer() para agregar el búfer de audio a la cola de entrada de la voz. Tenga en cuenta que los datos de audio a los que apunta XAUDIO2_BUFFER::pAudioData deben seguir siendo válidos hasta que XAudio2 haya terminado de reproducir el contenido del búfer.
Una vez rellenada la cola de entrada de la voz, llame a IXAudio2SourceVoice::Start() para reproducir el siguiente sonido de la cola.
C++
Finalización de un archivo .wav
Para determinar si un archivo .wav se ha reproducido por completo, necesitará el estado actual de la voz de origen. Cree una estructuraXAUDIO2_VOICE_STATE y, a continuación, llame a IXAudio2SourceVoice::GetState(). Si el audio se ha reproducido por completo, llame a IXAudio2SourceVoice::DestroyVoice().
