1 头文件
class TVoiceRecord
{
public:
TVoiceRecord(AnsiString path);
~TVoiceRecord();
int RecordOpen();//打开录音设备
int RecordStart();//开始录音
void RecordStop();//停止录音
bool RecordPlay();//播放声音
bool RecordSave(DWORD dwParam2);//保存
void STopPlay();
BOOL bEnding;
HANDLE Handle;
private:
HWAVEIN hWaveIn;
HWAVEOUT hWaveOut;
PBYTE pBuffer1,pBuffer2,pSaveBuffer,pNewBuffer;
PWAVEHDR pWaveHdr1,pWaveHdr2; //音频数据块缓存结构体
WAVEFORMATEX waveform;
DWORD dwDataLength;
AnsiString FilePath;//文件保存路径
};
cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include<stdlib.h>
#include <Classes.hpp>
#include "uVoiceRecord.h"
//---------------------------------------------------------------------------
short g_RecordvoiceVal;
#pragma package(smart_init)
#define INP_BUFFER_SIZE 2048
//MM_WIM_OPEN:打开设备时消息,在此期间我们可以进行一些初始化工作
//MM_WIM_DATA:当缓存已满或者停止录音时的消息,处理这个消息可以对缓存进行重新分配,实现不限长度录音
//MM_WIM_CLOSE:关闭录音设备时的消息
//MM_WIM_DONE 一个缓冲区播放完毕后调用
//(MM_WIM_OPEN,MM_WIM_DATA,MM_WIM_CLOSE,MM_WIM_DONE) 对应窗体事件,若选择CALLBACk_FUNCTION,则消息为wim_
bool CALLBACK VoiceWaveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
TVoiceRecord::TVoiceRecord(AnsiString path)
{
dwDataLength=0;
pWaveHdr1=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
pWaveHdr2=rei