> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Utiliser XAudio2 pour lire un son

> Utiliser XAudio2 pour lire un son

Utilisez `XAudio2` pour charger et lire un fichier .wav sur XBOX One.

Les sections suivantes décrivent comment utiliser `XAudio2` pour charger et lire un son sur le kit de développement XBOX One.

* [Types de données XAudio2 importants](#ID4ELB)
* [Initialisation de XAudio2](#ID4EXC)
* [Chargement d'un fichier .wav](#ID4E1D)
* [Définition du chemin d'accès à un fichier .wav](#ID4E2H)
* [Lecture d'un fichier .wav](#ID4EAF)
* [Arrêt d'un fichier .wav](#ID4E2F)

Pour obtenir un exemple `XAudio2` fonctionnel, téléchargez l'exemple SimplePlaySound parmi les exemples du Microsoft Game Development Kit (GDK).

<a id="ID4ELB" />

## Types de données XAudio2 importants

`XAudio2` fournit plusieurs types de données pour vous aider à lire des effets sonores sur XBOX One. Pour lire un fichier .wav, vous avez besoin au minimum des types de données suivants.

* `IXAudio2` : il s'agit de l'interface de l'objet `XAudio2` qui gère tous les états du moteur audio, le thread de traitement audio, le graphe de voix, et plus encore.

* `IXAudio2SourceVoice` : utilisez une voix source pour soumettre des données audio au pipeline de traitement `XAudio2`. Pour être entendues, les données de voix doivent être envoyées à une voix de mastering.

* `IXAudio2MasteringVoice` : utilisez ce type de données pour représenter le périphérique de sortie audio. Les mémoires tampons de données ne peuvent pas être soumises directement aux voix de mastering. Cependant, pour être entendues, les données soumises à d'autres types de voix doivent être dirigées vers une voix de mastering.

En outre, les types de données suivants peuvent vous être utiles.

* `PlaySoundVoiceContext` : utilisez ce type de données pour libérer la mémoire tampon audio après le traitement.

* `IXAudio2VoiceCallback` : ce type de données contient des méthodes qui avertissent le client lorsque certains événements se produisent dans un `IXAudio2SourceVoice` spécifique.

<a id="ID4EXC" />

## Initialisation de XAudio2

`CoInitializeEx()` initialise le modèle COM (Component Object Model) pour une utilisation par le thread actuel. Définissez le premier paramètre sur `NULL`. Définissez le second paramètre sur `COINIT_MULTITHREADED`.

`XAudio2Create()` crée un nouvel objet `XAudio2` et retourne un pointeur vers son interface `IXAudio2`. Assurez-vous que `XAUDIO2_PROCESSOR` est défini sur une valeur valide. La valeur `XAUDIO2_USE_DEFAULT_PROCESSOR` est recommandée pour laisser le système d'exploitation choisir le processeur idéal en fonction de la plateforme matérielle.

`IXAudio2::CreateMasteringVoice()` crée et configure une voix de mastering, et la désigne à l'aide du pointeur fourni par l'utilisateur.

#### C++

```cpp theme={null}
CoInitializeEx( NULL, COINIT_MULTITHREADED );

// Create an XAudio2 device.
DX::ThrowIfFailed( XAudio2Create( &m_pXAudio2, 0, XAUDIO2_USE_DEFAULT_PROCESSOR, NULL ) );

// Create an XAudio2 mastering voice, and store the result.
DX::ThrowIfFailed( m_pXAudio2->CreateMasteringVoice( &m_pMasteringVoice ) );  
```

<a id="ID4E1D" />

## Chargement d'un fichier .wav

Pour accéder au fichier audio, utilisez une instance de la classe `WaveFile`.

* Pour ouvrir un fichier .wav et récupérer certaines informations stockées dans l'en-tête du fichier, appelez `WaveFile::Open(LPCWSTR strFileName)`.
* Pour déterminer le format du fichier .wav, appelez `WaveFile::GetFormat()`.
* Pour déterminer le nombre d'octets et d'échantillons dans le fichier .wav, appelez `WaveFile::GetDuration()`.
* Pour lire les données d'échantillon en mémoire, appelez `WaveFile::ReadSample()`.

#### C++

```cpp theme={null}
// Read the .wav file.
WaveFile WaveFile;

// Append the file name and location to the end of the installation location.
WCHAR FilenameAndLocation[ 1024 ];
_snwprintf_s( FilenameAndLocation, _countof( FilenameAndLocation ), _TRUNCATE, L"%s%s", g_strCommonFileRoot, szFilename );

DX::ThrowIfFailed( WaveFile.Open( FilenameAndLocation ) );

// Read the format header.
BYTE header[64];
WAVEFORMATEX* pbWfx = reinterpret_cast<WAVEFORMATEX*>(header);

DX::ThrowIfFailed( WaveFile.GetFormat( pbWfx, sizeof(header) ) );

// Calculate the number of bytes and samples in the .wav file. 
DWORD cbWaveSize = WaveFile.GetDuration();

// Read the sample data into memory.
BYTE* pbWaveData = new BYTE[ cbWaveSize ];
DX::ThrowIfFailed( WaveFile.ReadSample( 0, pbWaveData, cbWaveSize, &cbWaveSize ) );  
```

<a id="ID4E2H" />

## Définition du chemin d'accès à un fichier .wav

Pour charger et utiliser des fichiers audio, utilisez le code suivant afin de trouver l'emplacement d'installation de votre projet sur l'appareil local. Stockez l'emplacement d'installation dans une chaîne. Ajoutez l'emplacement du fichier audio à la fin de la chaîne d'emplacement d'installation.

#### C++

```cpp theme={null}
std::wstring installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data();  
```

<a id="ID4EAF" />

## Lecture d'un fichier .wav

Créez une classe `IXAudio2::CreateSourceVoice()`, puis utilisez-la pour soumettre des données audio au pipeline de traitement `XAudio2`. Pour que les données de voix soient entendues, vous devez les envoyer à une voix de mastering, directement ou par l'intermédiaire de voix de sous-mixage intermédiaires. Pour stocker les détails du fichier audio, créez un `XAUDIO2_BUFFER`.

Après avoir créé et initialisé la mémoire tampon `XAudio2` et la voix source, appelez `IXAudio2SourceVoice::SubmitSourceBuffer()` pour ajouter la mémoire tampon audio à la file d'attente d'entrée de la voix. Notez que les données audio désignées par `XAUDIO2_BUFFER::pAudioData` doivent rester valides jusqu'à ce que `XAudio2` ait fini de lire le contenu de la mémoire tampon.

Une fois la file d'attente d'entrée de la voix remplie, appelez `IXAudio2SourceVoice::Start()` pour lire le son suivant dans la file d'attente.

#### C++

```cpp theme={null}
// Play the .wav file by using a new XAudio2SourceVoice.
// Create the source voice.
DX::ThrowIfFailed( pXaudio2->CreateSourceVoice( &m_pSourceVoice, pbWfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO, &m_VoiceContext ) );

// Submit the .wav sample data by using an XAUDIO2_BUFFER structure.
XAUDIO2_BUFFER buffer = {0};
buffer.pAudioData     = pbWaveData;
buffer.Flags          = XAUDIO2_END_OF_STREAM;
buffer.AudioBytes     = cbWaveSize;
buffer.pContext       = pbWaveData;

// Add the audio buffer to the voice input queue.
DX::ThrowIfFailed( m_pSourceVoice->SubmitSourceBuffer( &buffer ) );

// Play the next audio buffer in the queue.
DX::ThrowIfFailed( m_pSourceVoice->Start( 0 ) );  
```

<a id="ID4E2F" />

## Arrêt d'un fichier .wav

Pour déterminer si un fichier .wav a été lu jusqu'au bout, vous avez besoin de l'état actuel de la voix source. Créez une structure `XAUDIO2_VOICE_STATE`, puis appelez `IXAudio2SourceVoice::GetState()`. Si l'audio a été lu jusqu'au bout, appelez `IXAudio2SourceVoice::DestroyVoice()`.

#### C++

```cpp theme={null}
// Determine whether the sound effect has been played to completion, and handle an appropriate termination.
XAUDIO2_VOICE_STATE state;
m_pSourceVoice->GetState( &state, XAUDIO2_VOICE_NOSAMPLESPLAYED );
if( state.BuffersQueued == 0 )
{
  // Destroy the current sound effect.
  m_pSourceVoice->DestroyVoice();
}  
```

## Voir aussi

[Vue d'ensemble de XAudio2](/fr/build/console-features/audio/overviews/xaudio2-overview)
[Vue d'ensemble d'ADPCM](/fr/build/console-features/audio/overviews/adpcm-overview)
[Encodeur ADPCM en ligne de commande](/fr/build/console-features/audio/tools/adpcmencoder-tools)


## Related topics

- [Uso de XAudio2 para reproducir un sonido](/es/build/console-features/audio/overviews/xaudio2-play-sound.md)
- [XAudio2CreateWithSharedContexts](/es/reference/audio/xaudio2xbox/functions/xaudio2createwithsharedcontexts.md)
- [XAudio2XMAEncoder](/es/build/console-features/audio/tools/xma2encoder/methods/xaudio2xmaencoder-xmaencoder-xbox-microsoft-m.md)
- [XAudio2 Helper APIs](/reference/audio/atoc-xaudio2helperapis-reference.md)
- [Exigences XBOX testées lors de la certification pour les jeux sur console XBOX](/fr/publishing/certification/console-cert-tested-requirements.md)
