3,880
社区成员




// TODO: 在此添加控件通知处理程序代码
pBuffer1=(PBYTE)malloc(INP_BUFFER_SIZE);
pBuffer2=(PBYTE)malloc(INP_BUFFER_SIZE);
if (!pBuffer1 || !pBuffer2) {
if (pBuffer1) free(pBuffer1);
if (pBuffer2) free(pBuffer2);
MessageBeep(MB_ICONEXCLAMATION); //播放由SystemExclamation定义的声音
MessageBox(_T("Memory erro!"));
return ;
}
//open waveform audo for input
waveform.wFormatTag=WAVE_FORMAT_PCM; //设置波形的格式 PCM格式
waveform.nChannels=1; //设置音频文件的通道数量
waveform.nSamplesPerSec=11025; //设置每个声道播放和记录时的样本频率
waveform.nAvgBytesPerSec=11025; //设置请求的平均数据传输率
waveform.nBlockAlign=1; //以字节为单位设置块对齐
waveform.wBitsPerSample=8; //根据wFormatTag的类型设置每个样本的位深 如果wFormatTag= WAVE_FORMAT_PCM,此值应该设为8或16
waveform.cbSize=0; //额外信息的大小,以字节为单位
if (waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,(DWORD)this->m_hWnd,NULL,CALLBACK_WINDOW)) { //waveInOpen是动态连接库winmm.dll之函数,用以开启波形输入设备
free(pBuffer1);
free(pBuffer2);
MessageBeep(MB_ICONEXCLAMATION);
MessageBox(_T("Audio can not be open!"));
}
pWaveHdr1->lpData=(LPTSTR)pBuffer1; //指向波形数据缓冲区
pWaveHdr1->dwBufferLength=INP_BUFFER_SIZE; //波形数据缓冲区的长度
pWaveHdr1->dwBytesRecorded=0; //若首部用于输入, 指出缓冲区中的数据量
pWaveHdr1->dwUser=0; //指定用户的32位数据
pWaveHdr1->dwFlags=0; //缓冲区标志
pWaveHdr1->dwLoops=1; //循环播放次数, 仅用于输出缓冲区
pWaveHdr1->lpNext=NULL; //保留
pWaveHdr1->reserved=0; //保留
waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR)); //为波形输入准备一个缓冲区
pWaveHdr2->lpData=(LPTSTR)pBuffer2;
pWaveHdr2->dwBufferLength=INP_BUFFER_SIZE;
pWaveHdr2->dwBytesRecorded=0;
pWaveHdr2->dwUser=0;
pWaveHdr2->dwFlags=0;
pWaveHdr2->dwLoops=1;
pWaveHdr2->lpNext=NULL;
pWaveHdr2->reserved=0;
waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
//////////////////////////////////////////////////////////////////////////
pSaveBuffer = (PBYTE)realloc (pSaveBuffer, 1) ; //改变pSaveBuff内存所指大小 为 1
// Add the buffers
waveInAddBuffer (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ; //向波形输入设备发送一个输入缓冲区
waveInAddBuffer (hWaveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
bEnding = FALSE ;
dwDataLength = 0 ;
waveInStart (hWaveIn) ; //启动输入 的waveInStart功能开始在给定的波形音频输入设备的输入。
pWaveHdr1、pWaveHdr1
没有初始化分配内存吧?要分配内存才能使用,原工程在InitDialog初始化了……