> ## 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 la trousse de développement XBOX One.

* [Types de données XAudio2 importants](#ID4ELB)
* [Initialisation de XAudio2](#ID4EXC)
* [Chargement d'un fichier .wav](#ID4E1D)
* [Définition d'un chemin d'accès vers un fichier .wav](#ID4E2H)
* [Lecture d'un fichier .wav](#ID4EAF)
* [Fin de la lecture d'un fichier .wav](#ID4E2F)

Pour obtenir un exemple fonctionnel de `XAudio2`, téléchargez l'exemple SimplePlaySound à partir des 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 de `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.

De plus, les types de données suivants pourraient 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 une `IXAudio2SourceVoice` précise.

<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 à `NULL`. Définissez le deuxième paramètre à `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 à 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 pointe vers celle-ci au moyen 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 d'un chemin d'accès vers 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 de l'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 de `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 pointées par `XAUDIO2_BUFFER::pAudioData` doivent demeurer valides jusqu'à ce que `XAudio2` ait terminé 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 prochain son de 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" />

## Fin de la lecture d'un fichier .wav

Pour déterminer si un fichier .wav a été lu jusqu'à la fin, vous aurez 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'à la fin, 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-CA/build/console-features/audio/overviews/xaudio2-overview)
[Vue d'ensemble d'ADPCM](/fr-CA/build/console-features/audio/overviews/adpcm-overview)
[Encodeur ADPCM en ligne de commande](/fr-CA/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)
