XAudio2 para carregar e reproduzir um arquivo .wav no XBOX One.
As seções a seguir descrevem como usar o XAudio2 para carregar e reproduzir um som no XBOX One Development Kit.
- Tipos de dados importantes do XAudio2
- Inicializando o XAudio2
- Carregando um arquivo .wav
- Definindo um caminho de arquivo para um arquivo .wav
- Reproduzindo um arquivo .wav
- Encerrando um arquivo .wav
XAudio2, baixe o exemplo SimplePlaySound dos exemplos do Microsoft Game Development Kit (GDK).
Tipos de dados importantes do XAudio2
OXAudio2 fornece vários tipos de dados para ajudar você a reproduzir efeitos sonoros no XBOX One. Para reproduzir um arquivo .wav, você precisa no mínimo dos tipos de dados a seguir.
-
IXAudio2: esta é a interface do objetoXAudio2que gerencia todos os estados do Audio Engine, o thread de processamento de áudio, o grafo de vozes e muito mais. -
IXAudio2SourceVoice: use uma voz de origem para enviar dados de áudio ao pipeline de processamento doXAudio2. Para serem ouvidos, os dados de voz devem ser enviados a uma voz de masterização. -
IXAudio2MasteringVoice: use este tipo de dados para representar o dispositivo de saída de áudio. Buffers de dados não podem ser enviados diretamente às vozes de masterização. No entanto, para serem ouvidos, os dados enviados a outros tipos de vozes devem ser direcionados a uma voz de masterização.
-
PlaySoundVoiceContext: use este tipo de dados para liberar o buffer de áudio após o processamento. -
IXAudio2VoiceCallback: este tipo de dados contém métodos que notificam o cliente quando determinados eventos ocorrem em umIXAudio2SourceVoiceespecífico.
Inicializando o XAudio2
CoInitializeEx() inicializa o Component Object Model (COM) para uso pelo thread atual. Defina o primeiro parâmetro como NULL. Defina o segundo parâmetro como COINIT_MULTITHREADED.
XAudio2Create() cria um novo objeto XAudio2 e retorna um ponteiro para sua interface IXAudio2. Verifique se XAUDIO2_PROCESSOR está definido com um valor válido. O valor XAUDIO2_USE_DEFAULT_PROCESSOR é recomendado para permitir que o sistema operacional escolha o processador ideal com base na plataforma de hardware.
IXAudio2::CreateMasteringVoice() cria e configura uma voz de masterização e aponta para ela com o ponteiro fornecido pelo usuário.
C++
Carregando um arquivo .wav
Para acessar o arquivo de áudio, use uma instância da classeWaveFile.
- Para abrir um arquivo .wav e recuperar algumas informações armazenadas no cabeçalho do arquivo, chame
WaveFile::Open(LPCWSTR strFileName). - Para determinar o formato do arquivo .wav, chame
WaveFile::GetFormat(). - Para determinar o número de bytes e amostras no arquivo .wav, chame
WaveFile::GetDuration(). - Para ler os dados de amostra na memória, chame
WaveFile::ReadSample().
C++
Definindo um caminho de arquivo para um arquivo .wav
Para carregar e usar arquivos de áudio, use o código a seguir para encontrar o local de instalação do seu projeto no dispositivo local. Armazene o local de instalação em uma cadeia de caracteres. Acrescente o local do arquivo de áudio ao final da cadeia de caracteres do local de instalação.C++
Reproduzindo um arquivo .wav
Crie uma classeIXAudio2::CreateSourceVoice() e use-a para enviar dados de áudio ao pipeline de processamento do XAudio2. Para que os dados de voz sejam ouvidos, você deve enviá-los a uma voz de masterização diretamente ou por meio de vozes de submix intermediárias. Para armazenar os detalhes do arquivo de áudio, crie um XAUDIO2_BUFFER.
Depois de criar e inicializar o buffer do XAudio2 e a voz de origem, chame IXAudio2SourceVoice::SubmitSourceBuffer() para adicionar o buffer de áudio à fila de entrada da voz. Observe que os dados de áudio apontados por XAUDIO2_BUFFER::pAudioData devem permanecer válidos até que o XAudio2 termine de reproduzir o conteúdo do buffer.
Depois que a fila de entrada da voz for preenchida, chame IXAudio2SourceVoice::Start() para reproduzir o próximo som da fila.
C++
Encerrando um arquivo .wav
Para determinar se um arquivo .wav foi reproduzido até o fim, você precisará do estado atual da voz de origem. Crie um structXAUDIO2_VOICE_STATE e chame IXAudio2SourceVoice::GetState(). Se o áudio tiver sido reproduzido até o fim, chame IXAudio2SourceVoice::DestroyVoice().
