Implementieren von DoProcessOutput

Zum Verarbeiten von Audiodaten müssen Sie mehrere Schritte in DoProcessOutput ausführen. In den folgenden Schritten wird der Beispielcode des Plug-In-Assistenten als Beispiele verwendet. Wenn Sie ein Audio-DSP-Plug-In erstellen möchten, das Medieninhalte desselben Typs verarbeitet wie der Beispielcode des Plug-In-Assistenten, müssen Sie nur den tatsächlichen Verarbeitungscode ändern, auf den in Schritt 6 verwiesen wird. Im Folgenden finden Sie alle Schritte, die in DoProcessOutput implementiert sind:

  • Wenn das Plug-In derzeit nicht aktiviert ist, kopieren Sie die Daten einfach unverändert in den Ausgabepuffer. Wenn Ihr Plug-In die Daten in ein anderes Format konvertiert, müssen Sie auch die Konvertierungsverarbeitung hier tun.

    // Test whether the plug-in is disabled by the user.
    if (!m_bEnabled)
    {
        // Just copy the data without changing it.
        memcpy(pbOutputData, m_pbInputData, *cbBytesProcessed);
    
        return S_OK;
    }
    
    
    • Ruft einen Zeiger auf die Eingabeformatstruktur ab. Sie müssen Memberdaten aus dieser Struktur abrufen. Kopieren Sie daher den Zeiger aus m _ mtInput.pbformat zu einer lokalen Zeigervariablen eines Typs, der dem Formatstrukturtyp entspricht. Im folgenden Beispiel wird ein Zeiger auf eine WAVEFORMATEX-Eingabeformatstruktur gespeichert:
    WAVEFORMATEX *pWave = (WAVEFORMATEX*) m_mtInput.pbFormat;
    
    
    • Berechnen Sie die Anzahl der zu verarbeitenden Stichproben. Der Beispielcode, den der Plug-In-Assistent generiert, führt diesen Schritt aus, indem die Anzahl der zu verarbeitenden Bytes durch das nBlockAlign-Member der WAVEFORMATEX-Eingabeformatstruktur dividiert und dann das Ergebnis mit der Anzahl der Kanäle multipliziert wird, die im nChannels-Member gespeichert wurden. Das folgende Beispiel ist aus dem Beispielcode des Plug-In-Assistenten:
    DWORD dwSamplesToProcess = (cbBytesProcessed / pWave->nBlockAlign) * pWave->nChannels;
    
    
    1. Bestimmen Sie die Bittiefe des Audios. Der Beispielcode des Plug-In-Assistenten bestimmt 8- oder 16-Bit-Audiodaten, indem der wBitsPerSample-Member der WAVEFORMATEX-Struktur untersucht wird. Anschließend wird dieser Wert in einer switch-Anweisung verwendet, um separate Verarbeitungsroutinen für jede Bittiefe zur Verfügung zu stellen. Möglicherweise müssen Sie eine andere Technik verwenden, wenn Sie mit anderen Formattypen und Bittiefen zu tun haben.
    2. Erstellen Sie eine Schleife, um die Audiobeispiele im Eingabepuffer schrittweise zu durchlaufen.
    3. Rufen Sie ein Beispiel aus dem Eingabepuffer ab. Hierzu deferieren Sie den Eingabedatenzeiger und speichern das Ergebnis in einer Variablen vom Typ int. Für 16-Bit-Audio müssen Sie den BYTE-Zeiger auf einen kurzen Zeiger umcasten, um die höhere Genauigkeit der Audiostichproben zu verarbeiten. Sobald Sie über den Wert verfügen, können Sie den pbInputData-Zeiger sofort erhöhen, sodass er auf das nächste Beispiel zeigt. Die folgenden Beispiele veranschaulichen dies:
    // For 8-bit audio.
    int i = *pbInputData++;  
    
    

    Oder

    // For 16-bit audio.
    // Recast the pointer.
    short *pwInputData = (short *) pbInputData; 
    
    // Enter the loop and then get the input sample.
    int i = *pwInputData++;
    
    
    1. Führen Sie die Verarbeitung aus. Hier wenden Sie die Algorithmen an, die das Beispiel in irgendeiner Weise ändern. Was Sie hier tun, liegt bei Ihnen.
    2. Schreiben Sie die verarbeiteten Daten in den Ausgabepuffer. Erhöhen Sie den Zeiger sofort auf den Ausgabepuffer, wie im folgenden Beispiel:
    *pwOutputData++ = i;
    
    
    1. Wiederholen Sie die Schleife, bis alle Beispiele verarbeitet wurden.
    2. Gibt ein entsprechendes HRESULT zurück.

Implementieren eines Audio-DSP-Plug-Ins