604
社区成员
发帖
与我相关
我的任务
分享
用MediaPlay录音
//---------------------------------------------------------------------------
void __fastcall CreateWav(WORD wChannels, WORD wResolution, long lRate, String strFileName)
{
typedef struct _TWavHeader
{
long rId;
long rLen;
long wId;
long fId;
long fLen;
WORD wFormatTag;
WORD nChannels;
long nSamplesPerSec;
long nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
long dId;
long wSampleLength;
}TWavHeader;
TWavHeader wh;
wh.rId = 0x46464952;
wh.rLen = 36;
wh.wId = 0x45564157;
wh.fId = 0x20746d66;
wh.fLen = 16;
wh.wFormatTag = 1;
wh.nChannels = wChannels;
wh.nSamplesPerSec = lRate;
wh.nAvgBytesPerSec = wChannels * lRate * (wResolution / 8);
wh.nBlockAlign = wChannels * (wResolution / 8);
wh.wBitsPerSample = wResolution;
wh.dId = 0x61746164;
wh.wSampleLength = 0;
int nHandle = FileCreate(strFileName);
FileSeek(nHandle, 0, 0);
FileWrite(nHandle, &wh, sizeof(wh));
FileClose(nHandle);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStartClick(TObject *Sender)
{
// 开始录音
MediaPlayer1->DeviceType = dtAutoSelect;
CreateWav(2, 16, 44100, "C:\\Test.wav");
MediaPlayer1->FileName = "C:\\Test.wav";
MediaPlayer1->Open();
MediaPlayer1->StartRecording();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnEndClick(TObject *Sender)
{
// 结束录音
MediaPlayer1->Stop();
MediaPlayer1->Save();
MediaPlayer1->Close();
}
//---------------------------------------------------------------------------
创建一个Application,然后在包含多媒体系统头文件:
#include <mmsystem.h>
在表单上添加两个按钮,然后在OnClick事件的响应函数中添加如下代码:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
//自动开始录制Wave格式的数据
{
mciSendString("close p1",0,0,0);
mciSendStringA("open new type WAVEAudio alias p1",0,0,0);
mciSendString("record p1",0,0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
//停止录音,并将Wave数据存储到当前目录下的001.wav中
{
mciSendString("stop p1",0,0,0);
mciSendString("save p1 001.wav",0,0,0);
mciSendString("close p1",0,0,0);
}
//---------------------------------------------------------------------------
然后就是编译执行了! ^_^