📄 wavex.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 + -