Condividi tramite


Come inizializzare XAudio2

Inizializza XAudio2 per la riproduzione audio creando un'istanza del motore XAudio2 e quindi creando una voce mastering.

  1. Prima di tutto, è necessario aver inizializzato COM. Se si usa C++/WinRT, viene presa in considerazione. Se non si è certi che l'ambiente abbia già inizializzato COM, è possibile chiamare CoInitializeEx purché si verifichi il valore restituito.

    HRESULT hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    if (FAILED(hr)) return hr;
    
  2. Per creare un'istanza del motore XAudio2, chiamare la funzione XAudio2Create. In questo modo verrà visualizzato un puntatore a un'interfaccia IXAudio2 ed è consigliabile archiviarlo in un membro dati della classe. In questo frammento di codice viene usato un puntatore intelligente C++/WinRT, ma è possibile usare un puntatore non elaborato, se necessario.

    winrt::com_ptr<IXAudio2> m_xAudio2{};
    ...
    winrt::check_hresult(::XAudio2Create(m_xAudio2.put(), 0, XAUDIO2_DEFAULT_PROCESSOR));
    
  3. Successivamente, per creare ciò che è noto come voce mastering, chiamare il metodo IXAudio2::CreateMasteringVoice. Questo ti darà un puntatore a un'interfaccia IXAudio2MasteringVoice . Una voce mastering incapsula un dispositivo audio. È la destinazione finale per tutto l'audio che passa attraverso un grafico audio.

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

Puntatori intelligenti

Per motivi di sicurezza e praticità, è possibile usare un puntatore intelligente per l'interfaccia IXAudio2 . Tuttavia, le interfacce vocali (ad esempio IXAudio2MasteringVoice) non hanno un metodo Release , quindi verrà visualizzato un errore di compilazione se si tenta di usare un puntatore intelligente per quelli. In questi frammenti di codice si usa un puntatore intelligente laddove possibile e un puntatore non elaborato, se necessario.