⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twave.h

📁 AVAYA IPO 430系列交换机Wavedriver的demo程序
💻 H
字号:
// tWave.h: CtWave class definition

/*
The idea of the CtWave class is that it holds wave data. It will load,
play and save any format but is currently only set to record in
PCM, mono, 8 kHz, 16 bits/sample (see the Record() member function).

To construct a CtWave class, use the constructor:

    CtWave  wav(this);

The optional first parameter to the constructor is the implementation
of the CtWaveSink class to send input and output completion
notifications to.

To load a wave file from the file system, use the Load() member function:

  wav.Load("chime.wav");

To save the currently held data into a file, use the Save() member function:

  wav.Save("mychime.wav");

To record new wave data (deallocating any currently held data),
use the Record() member function:

  wav.Record(WAVE_MAPPER, 60);

The first parameter is a low-level wave device identifier, e.g. as
returned from calling the TAPI function lineGetID(). The second parameter
is the maximum number of seconds to record. When the recording has
completed, the sink is called via OnWaveInData().

To play loaded or recorded data, use the Play() member function:

  wav.Play(WAVE_MAPPER);

The first parameter is a low-level wave identifier. When the wave
file has completed being played, the sink is called via OnWaveOutDone().

To stop wave data currently being played or recorded, use the Stop()
member function:

  wav.Stop();

To release the data currently being held by the wave object, use the
Close() member function:

  wav.Close();

Note: The Stop() and the Close() member functions are called implicitly
      when another action on the object requires it, e.g. when loading
      new wave data into an object that is currently being played.
*/

#ifndef TWAVE_H
#define TWAVE_H

#include <mmsystem.h>
#include "InvisibleWindow.h"

class CtWaveSink
{
public:
    // WaveOut events (playing)
    virtual void OnWaveOutOpen() {}
    virtual void OnWaveOutDone() {}
    virtual void OnWaveOutClose() {}

    // WaveIn events (recording)
    virtual void OnWaveInOpen() {}
    virtual void OnWaveInData() {}
    virtual void OnWaveInClose() {}
};

class CtWave : private InvisibleWindowSink
{
public:
    CtWave(CtWaveSink* pSink = 0);
    ~CtWave();

    // Load from a resource
    bool    Load(HINSTANCE hinst, UINT nID);
    bool    Load(HINSTANCE hinst, LPCTSTR pszID);

    // Load and save to/from a file
    bool    Load(LPCSTR pszFileName);
    bool    Save(LPCSTR pszFileName);

    // Sends OnWaveOutXxx() to sink as progress
    bool    Play(UINT nWaveOut, bool bLoop = false);

    // Sends OnWaveInXxx() to sink as progress
    bool    Record(UINT nWaveIn, double nSecs);

	bool	ContinueRecord(double nSecs);

    bool    Stop();
    bool    Close();
	bool	Append();

    void    SwitchInputBuffer();

protected:
    CtWaveSink*     m_pSink;
    WAVEHDR*        m_pWaveInHdr1; // Double buffered input
    WAVEHDR*        m_pWaveInHdr2;
	bool			m_bWaveInHdr1InUse; // Indicates which buffer is in use
    WAVEHDR*        m_pWaveOutHdr1; 
    HPSTR           m_pDataIn1;
    HPSTR           m_pDataIn2;
    HPSTR           m_pDataOut1;
	DWORD			m_nOutputSize;
    DWORD           m_nRecordedSize;
    WAVEFORMATEX*   m_pFormat;
    DWORD           m_nFormatSize;
    HWAVEIN         m_hWaveIn;
    HWAVEOUT        m_hWaveOut;
    bool            m_bStopping;
    InvisibleWindow m_wnd;
    bool            m_bOwnData;

	CPtrList		m_listWaveData;
	DWORD			m_nTotalRecording;
	DWORD			m_nDataBlockSize;

    bool    Load(HMMIO hmmio);

    // InvisibleWindowSink events
    LRESULT OnWindowMessage(HWND hwnd, UINT nMsg, WPARAM wparam, LPARAM lparam);
};

#pragma comment(lib, "winmm.lib")

#endif  // TWAVE_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -