Condividi tramite


Procedura: Riprodurre un suono con XAudio2

Questo argomento descrive i passaggi minimi necessari per riprodurre dati audio caricati in precedenza in XAudio2.

Dopo aver inizializzato XAudio2 (vedere Procedura: Inizializzare XAudio2) e caricare i dati audio (vedere Procedura: Caricare file di dati audio in XAudio2), è possibile riprodurre un suono creando una voce di origine e passando dati audio.

Per riprodurre un suono

  1. Inizializzare prima XAudio2 per la riproduzione audio seguendo i passaggi descritti in Procedura: Inizializzare XAudio2.

  2. Popolare quindi una struttura WAVEFORMATEX e una struttura XAUDIO2_BUFFER seguendo i passaggi descritti in Procedura: Caricare file di dati audio in XAudio2.

    Nota

    A seconda del formato dei dati audio, potrebbe essere necessario usare una struttura di dati più grande (una che contiene una struttura WAVEFORMATEX ) al posto di un WAVEFORMATEX. Per altre info, vedi l'argomento WAVEFORMATEX .

  3. Successivamente, per creare ciò che è noto come voce di origine, chiamare il metodo IXAudio2::CreateSourceVoice. Questo ti darà un puntatore a un'interfaccia IXAudio2SourceVoice . Il formato della voce viene specificato dai valori impostati nella struttura WAVEFORMATEX.

    IXAudio2SourceVoice* m_pXAudio2SourceVoice{};
    ...
    winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));    
    
  4. Inviare un XAUDIO2_BUFFER alla voce di origine chiamando il metodo IXAudio2SourceVoice::SubmitSourceBuffer.

    winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
    

    Nota

    I dati di esempio audio a cui punta il parametro pBuffer di SubmitSourceBuffer sono ancora di proprietà dell'app e devono rimanere allocati e accessibili fino a quando il suono non smette di riprodurre.

  5. Per avviare la voce di origine, chiamare il metodo IXAudio2SourceVoice::Start . Poiché tutte le voci XAudio2 inviano l'output alla voce mastering per impostazione predefinita, l'audio dalla voce di origine passa automaticamente al dispositivo audio creato/selezionato durante l'inizializzazione. In un grafico audio più complesso, la voce di origine dovrà specificare a quale voce deve essere inviata l'output.

    winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
    

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.