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

📄 wavex.cpp

📁 TAPI编程应用
💻 CPP
字号:
// Source for wave functions for the talker32 app
// (c) Dialogic corp 1995, 1996

#include "stdafx.h"
#include <mmsystem.h>
#include <mmreg.h>                   
                   
#include "wavstate.h"
#include "wavex.h" 


IMPLEMENT_DYNAMIC(CTapiWave, CObject)
// Do initialization as needed
WAVEFORMATEX CTapiWave::wfDialogicFormats[] = {{WAVE_FORMAT_DIALOGIC_OKI_ADPCM, 1, 6000, 3000, 1,4},
								{WAVE_FORMAT_DIALOGIC_OKI_ADPCM, 1, 8000, 4000, 1,4},
								{WAVE_FORMAT_MULAW, 1, 6000, 6000, 1,8},
								{WAVE_FORMAT_MULAW, 1, 8000, 8000, 1,8},
								{WAVE_FORMAT_MULAW, 1, 11025, 11025, 1,8},
								{WAVE_FORMAT_ALAW, 1, 6000, 6000, 1,8},
								{WAVE_FORMAT_ALAW, 1, 8000, 8000, 1,8},
								{WAVE_FORMAT_ALAW, 1, 11025, 11025, 1,8},
								{WAVE_FORMAT_PCM, 1, 6000, 6000, 1,8},
								{WAVE_FORMAT_PCM, 1, 8000, 8000, 1,8},
								{WAVE_FORMAT_PCM, 1, 11025, 11025, 1,8},
								{0,0,0,0,0,0}};

CTapiWave::CTapiWave()
{
	m_hWaveIn = NULL;
	m_hWaveOut = NULL;
	m_lpvLine = NULL;
	m_lpvCall = NULL;
	ctwSetState(WAVE_IDLE);
}

// Constructor
CTapiWave::CTapiWave(LPVOID lpvLine, LPVOID lpvCall, DWORD dwLineID)
{
	// Note that there is no direct reference to any of the TAPI-related classes
	m_lpvLine = lpvLine;
	m_lpvCall = lpvCall;
	m_dwLineID = dwLineID;
	if(m_lpvLine != NULL) 	   		// one file name per line ONLY
		sprintf(m_szRecFileName, "record%.2d.wav", m_dwLineID);
	else 
		sprintf(m_szRecFileName, "%8.8x.wav", (LPVOID) this);
	m_hWaveIn = NULL;
	m_hWaveOut = NULL;
	m_lpvLine = NULL;
	m_lpvCall = NULL;
	m_dwVolume = MAX_ABS_VOLUME;	//default=full volume
	ctwSetState(WAVE_IDLE);
}

// Public wrapper around the real play
BOOL CTapiWave::ctwPlay(HWND hWnd, UINT nID, LPSTR lpFileName)
{ 
	if(WAVE_IDLE != ctwGetState()) return FALSE;
 	ctwSetState(PREPARING_TO_PLAY);
	m_hWaveOut = WavexPlay(hWnd, nID, lpFileName);
	if(m_hWaveOut != NULL) ctwSetState(PLAYING);
	else ctwSetState(WAVE_IDLE);
	return (m_hWaveOut != NULL);
}
                      
// Play the WAVE file specified on input                      
HWAVEOUT CTapiWave::WavexPlay(HWND hWnd, UINT nID, LPSTR lpFileName)
{ 
	WAVEFORMATEX *lpwfWaveFormat = NULL;
	WAVEHDR *lpwhWaveHdr = NULL;
	HMMIO hmmH;      
	HWAVEOUT hWave = NULL;
	MMCKINFO mmParent, mmSubchunk;
	DWORD dwFmtSize, dwDataSize, dwFlags;
	HPSTR lpWaveData = NULL;
	char szErr[128];
	MMRESULT mmrc;
	
	TRACE("*** TALKER32 ***: enter Play\n");
    // Open wave file 
    hmmH = mmioOpen(lpFileName, NULL, MMIO_READ); //| MMIO_ALLOCBUF);
    if(!hmmH)
    {   
    	MessageBox(NULL, "Input WAVE file open failed", NULL, MB_ICONSTOP);
        return FALSE;
    }                 
    
    // Locate a 慠IFF

⌨️ 快捷键说明

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