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
- Initialisation de XAudio2
- Chargement d’un fichier .wav
- Définition du chemin d’accès à un fichier .wav
- Lecture d’un fichier .wav
- Arrêt d’un fichier .wav
XAudio2 fonctionnel, téléchargez l’exemple SimplePlaySound parmi les exemples du Microsoft Game Development Kit (GDK).
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’objetXAudio2qui 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 traitementXAudio2. 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.
-
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 unIXAudio2SourceVoicespécifique.
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++
Chargement d’un fichier .wav
Pour accéder au fichier audio, utilisez une instance de la classeWaveFile.
- 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++
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++
Lecture d’un fichier .wav
Créez une classeIXAudio2::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++
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 structureXAUDIO2_VOICE_STATE, puis appelez IXAudio2SourceVoice::GetState(). Si l’audio a été lu jusqu’au bout, appelez IXAudio2SourceVoice::DestroyVoice().
