在学习波形音频的使用的时候,我封装了一些API,封装类如下:
#include <mmsystem.h>
const int MAX_BUFFER_SIZE=2048;
class CWaveDlg;
class CSound
{
public:
CSound(void);
virtual ~CSound(void);
public:
void Init(CWaveDlg* dlg);   //sound对象初始化
void Record();              //开始录音
void StopRecord();          //停止录音
void Closein();         //关闭输入设备
void Play();                //开始播放
void PausePlay();           //暂停播放
void StopPlay();            //停止播放
void SlowDown();            //减速播放
void SpeedUp();             //加速播放
void CloseOut();            //关闭输出设备
void FreeRecordBuffer();    //释放录音的BUFFER
void FreePlayBuffer();      //释放播放的BUFFER
void InBufferZero();        //让Buffer值都为0,未使用
void OutBufferZero();       //让Buffer值都为0,未使用
public:
CWaveDlg* m_dlg;       //与之相关联的对话框
WAVEFORMATEX  m_soundFormat; //指定录音和播放的格式
HWAVEIN   m_hWaveIn;       //标示波形音频输入设备缓冲区的句柄
HWAVEOUT  m_hWaveOut;      //标示波形音频输出设备缓冲区的句柄
WAVEHDR   m_pWaveHdrIn[3];  //主要是定义了波形音频的Buffer,为其它API使用
WAVEHDR   m_pWaveHdrOut[3];
CHAR  m_cBufferIn[MAX_BUFFER_SIZE];  //为输入准备的内存
CHAR  m_cBufferOut[MAX_BUFFER_SIZE]; //为输出准备的内存};
在.Cpp文件中有这样一个函数:#include "stdafx.h"
#include "Wave.h"
#include "Sound.h"
#include "WaveDlg.h"void CSound::Init(CWaveDlg* dlg)
{
int result;
m_dlg=dlg;
if(waveInGetNumDevs()==0)
{
AfxMessageBox("There is no Sound input deviec");
} if(waveOutGetNumDevs()==0)
{
      AfxMessageBox("There is no Sound output deviec");
} m_soundFormat.wFormatTag =WAVE_FORMAT_PCM;
m_soundFormat.nChannels =1;
m_soundFormat.nSamplesPerSec =8000;
m_soundFormat.nAvgBytesPerSec =16000;
m_soundFormat.nBlockAlign =2;
m_soundFormat.cbSize =0;
m_soundFormat.wBitsPerSample =16;//指定录音格式 int res=waveInOpen(&m_hWaveIn,WAVE_MAPPER,&m_soundFormat,(DWORD)m_dlg->m_hWnd ,0L
               ,CALLBACK_WINDOW);//打开录音设备。 if(res!=MMSYSERR_NOERROR)
{
AfxMessageBox("Error in waveInOpen function");
return;
} res=waveOutOpen(&m_hWaveOut,WAVE_MAPPER,&m_soundFormat,(DWORD)m_dlg->m_hWnd ,0L
            ,CALLBACK_WINDOW);//打开播放设备。
if(res!=MMSYSERR_NOERROR)
{
     AfxMessageBox("Error in waveOutOpen function");
 return ;
} //为输入设备准备内存
         m_pWaveHdrIn[0].lpData =m_cBufferIn;
m_pWaveHdrIn[0].dwBufferLength =MAX_BUFFER_SIZE;
m_pWaveHdrIn[0].dwBytesRecorded =0;
m_pWaveHdrIn[0].dwFlags =0; result=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR));//准备内存块录音
    if(result!=MMSYSERR_NOERROR)
{
AfxMessageBox("Can't InPrepareHeader");
return;
}
    
result=waveInAddBuffer(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR));//增加内存块
    if(result!=MMSYSERR_NOERROR)
{
AfxMessageBox("Can't InAddBuffer");
return;
}// waveOutPrepareHeader(
////为输出设备准备内存
    m_pWaveHdrOut[0].lpData =m_cBufferOut;
m_pWaveHdrOut[0].dwBufferLength =MAX_BUFFER_SIZE;
m_pWaveHdrOut[0].dwBytesRecorded =0;
m_pWaveHdrOut[0].dwFlags =0; result=waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR));//准备内存块录音
    if(result!=MMSYSERR_NOERROR)
{
AfxMessageBox("Can't OutPrepareHeader");
return;
}
    
result=waveOutWrite(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR));//增加内存块
    if(result!=MMSYSERR_NOERROR)
{
AfxMessageBox("Can't OutAddBuffer");
return;
}
}
在cpp文件中,凡是用到关于Wave的函数,全是出现:无法解析的外部符号的错误,这是怎么回事啊?