Guide pratique : Jouer un son avec XAudio2
Cette rubrique décrit les étapes minimales requises pour lire les données audio précédemment chargées dans XAudio2.
Après avoir initialisé XAudio2 (voir Guide pratique : initialiser XAudio2) et chargé les données audio (voir Guide pratique : charger des fichiers de données audio dans XAudio2), vous pouvez lire un son en créant une voix source et en lui transmettant des données audio.
Lire un son
Commencez par initialiser XAudio2 pour la lecture audio en suivant les étapes décrites dans Guide pratique : initialiser XAudio2.
Remplissez ensuite une structure WAVEFORMATEX et une structure XAUDIO2_BUFFER en suivant les étapes décrites dans Guide pratique : Charger des fichiers de données audio dans XAudio2
Remarque
Selon le format des données audio, vous devrez peut-être utiliser une structure de données plus grande (une structure WAVEFORMATEX) à la place d’un WAVEFORMATEX. Pour plus d’informations, consultez la rubrique WAVEFORMATEX.
Ensuite, pour créer ce qu’on appelle une voix source, appelez la méthode IXAudio2::CreateSourceVoice. Cela vous donnera un pointeur vers une interface IXAudio2SourceVoice. Le format de la voix est spécifié par les valeurs définies dans la structure WAVEFORMATEX.
IXAudio2SourceVoice* m_pXAudio2SourceVoice{}; ... winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));
Envoyez XAUDIO2_BUFFER à la voix source en appelant la méthode IXAudio2SourceVoice::SubmitSourceBuffer
winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
Remarque
Les exemples de données audio pointés par le paramètre pBuffer de SubmitSourceBuffer appartiennent toujours à l’application et doivent rester alloués et accessibles jusqu’à la fin de la lecture de l'audio.
Pour démarrer la voix source, appelez la méthode IXAudio2SourceVoice::Start. Comme toutes les voix XAudio2 envoient par défaut leur sortie à la voix de mastering, l'audio de la voix source se dirige automatiquement vers le périphérique audio qui a été créé/sélectionné lors de l'initialisation. Dans un graphique audio plus compliqué, la voix source doit spécifier la voix à laquelle sa sortie doit être envoyée.
winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
Pointeurs intelligents
Pour des raisons de sécurité et de commodité, vous pouvez utiliser un pointeur intelligent pour l’interface IXAudio2. Toutefois, les interfaces vocales (telles que IXAudio2MasteringVoice) n’ont pas de méthode Release. Une erreur de génération se produira donc si vous essayez d’utiliser un pointeur intelligent pour ceux-ci. Dans ces extraits de code, nous utilisons un pointeur intelligent, le cas échéant, et un pointeur brut si nécessaire.