Sample Code

Windows Driver Samples/ AVStream filter-centric simulated capture sample driver (Avssamp)/ C++/ wave.h/

/**************************************************************************

    AVStream Filter-Centric Sample

    Copyright (c) 1999 - 2001, Microsoft Corporation

    File:

        wave.h

    Abstract:

        Wave object header.

    History:

        Created 6/28/01

**************************************************************************/

//
// The CWaveObject is a class which will parse PCM wave files, read the
// data, and expose the data in a loop.  This allows the sample to "synthesize"
// audio data by using any PCM wave file the user wishes.
//
class CWaveObject {

private:

    //
    // The wave format.
    //
    WAVEFORMATEX m_WaveFormat;

    //
    // The wave data.
    //
    PUCHAR m_WaveData;

    //
    // The size of the wave data.
    //
    ULONG m_WaveSize;

    //
    // The filename for the wave file.  This string must be constant and 
    // static over the lifetime of the wave object.
    //
    PWCHAR m_FileName;

    //
    // The time we have synthesized to.
    //
    LONGLONG m_SynthesisTime;

    //
    // The pointer into the wave data that we have synthesized to.
    //
    ULONG m_WavePointer;

    //
    // ParseBlock():
    //
    // Parse the wave file, starting at the specified location, until the
    // specified block has been found.  The pointer will be updated to
    // point to the block data and the amount of data in the block will
    // be returned in a variable. 
    //
    NTSTATUS
    ParseForBlock (
        IN HANDLE FileHandle,
        IN ULONG BlockHeader,
        IN OUT PLARGE_INTEGER BlockPointer,
        OUT PULONG BlockSize
        );

public:

    //
    // CWaveObject():
    //
    // Construct a new wave object using the specified file name.
    //
    CWaveObject (
        _In_ LPWSTR FileName
        ) :
        m_FileName (FileName)
    {
        m_WaveData = NULL;
    }

    //
    // ~CWaveObject():
    //
    // Destroy a wave object.
    //
    ~CWaveObject (
        );

    //
    // ParseAndRead():
    //
    // Parse the wave file and read it into an internally allocated buffer
    // inside the wave object.  This is preparation to synthesize looped
    // audio based on the wave.
    //
    NTSTATUS
    ParseAndRead (
        );

    //
    // WriteRange():
    //
    // Given the address of a KSDATARANGE_AUDIO, write out a range which
    // matches exactly the specifications of the wave we're using to
    // synthesize audio data.
    //
    // The GUIDs must be filled out already.  This only fills out the 
    // channel, bps, and freq fields.
    //
    void
    WriteRange (
        PKSDATARANGE_AUDIO AudioRange
        );

    //
    // SynthesizeTo():
    //
    // Given a specific stream time, synthesize from the current stream time
    // (assume 0) to the supplied stream time.
    //
    ULONG
    SynthesizeTo (
        IN LONGLONG StreamTime,
        IN PVOID Data,
        IN ULONG BufferSize
        );

    //
    // SynthesizeFixed():
    //
    // Given a specific amount of time, synthesize forward in time that
    // particular amount.  Units expressed in 100nS increments.
    //
    ULONG
    SynthesizeFixed (
        IN LONGLONG TimeDelta,
        IN PVOID Data,
        IN ULONG BufferSize
        );

    //
    // SkipFixed():
    //
    // Given a specific amount of time, skip forward in time that
    // particular amount.  Units expressed in 100nS increments.
    //
    void
    SkipFixed (
        IN LONGLONG TimeDelta
        );

    //
    // Reset():
    //
    // Reset the synthesis time and block pointers.  This will cause the
    // clock with respect to this wave object to go to zero.
    //
    void
    Reset (
        )
    {
        m_WavePointer = 0;
        m_SynthesisTime = 0;
    }

    //
    // Cleanup():
    //
    // This is a bag cleanup callback.  It merely deletes the wave object
    // instead of letting the default of ExFreePool free it.
    //
    static
    void
    Cleanup (
        IN CWaveObject *This
        )
    {
        delete This;
    }

};

Our Services

  • What our customers say about us?

© 2011-2024 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS