Partager via


Guide pratique : initialiser XAudio2

Vous initialisez XAudio2 pour la lecture audio en créant une instance du moteur XAudio2, puis en créant une voix de mastering.

  1. Tout d’abord, vous devez avoir initialisé COM. Si vous utilisez C++/WinRT, il est pris en charge. Si vous n’êtes pas certain que votre environnement a déjà initialisé COM, vous pouvez appeler CoInitializeEx (sous réserve de vérifier la valeur de retour).

    HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    if (FAILED(hr)) return hr;
    
  2. Pour créer une instance du moteur XAudio2, appelez la fonction XAudio2Create. Cela vous donnera un pointeur vers une interface IXAudio2. Il est judicieux de stocker cela dans un membre de données de classe. Dans cet extrait de code, nous utilisons un pointeur intelligent C++/WinRT, mais vous pouvez utiliser un pointeur brut si nécessaire.

    winrt::com_ptr<IXAudio2> m_xAudio2{};
    ...
    winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
    
  3. Ensuite, pour créer ce qu’on appelle une voix de mastering, appelez la méthode IXAudio2 ::CreateMasteringVoice. Cela vous donnera un pointeur vers une interface IXAudio2MasteringVoice. Une voix de mastering encapsule un périphérique audio. Il s’agit de la destination ultime pour tout l’audio qui passe par un graphique audio.

    IXAudio2MasteringVoice* m_pXAudio2MasteringVoice{};
    ...
    winrt::check_hresult(xAudio2->CreateMasteringVoice(&m_pXAudio2MasteringVoice));
    

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.