📄 api 层实现语音录制 - 技术文档 - vc文档 - 平台sdk - 立华软件园.htm
字号:
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">}
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">int
WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> LPSTR
lpCmdLine, int nCmdShow )
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">{
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> CreateMutex(
NULL, false, "MyMutex");
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
if ( GetLastError() == ERROR_ALREADY_EXISTS )
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
{ log.write("Exists and Exit"); log.last(); ExitProcess( NULL); }
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> log.write("Program
Start.");
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> log.nobuff
= true;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">DWORD
datasize = 48000;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> //
最常用法
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">WAVEFORMATEX
waveformat;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.wFormatTag=WAVE_FORMAT_PCM;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.nChannels=1;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.nSamplesPerSec=8000;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.nAvgBytesPerSec=8000;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.nBlockAlign=1;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.wBitsPerSample=8;
//指定录音格式
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">waveformat.cbSize=0;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> wsprintf(
lpTemp, "WAVEFORMATEX size = %lu", sizeof(WAVEFORMATEX) );
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> log.write(lpTemp);
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">HWAVEIN m_hWaveIn;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">if (
waveInGetNumDevs() ) log.write("有可以使用的 WaveIn 通道"); else
log.write("没有可以使用的 waveIn 通道");
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">int
res=waveInOpen(&m_hWaveIn,WAVE_MAPPER, &waveformat,
(DWORD)NULL,0L,CALLBACK_WINDOW); //打开录音设备
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">if (
res == MMSYSERR_NOERROR ) log.write("打开 waveIn 成功"); //
验证创建是否成功
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">else {
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
wsprintf(lpTemp, "打开 waveIn 通道失败,Error_Code = 0x%x", res );
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
log.write(lpTemp);
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">} //
End of 验证创建是否成功
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">WAVEHDR
m_pWaveHdr;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> m_pWaveHdr.lpData
= (char *)GlobalLock( GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,
datasize) );
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> memset(m_pWaveHdr.lpData,
0, datasize );
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> m_pWaveHdr.dwBufferLength
= datasize;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> m_pWaveHdr.dwBytesRecorded
= 0;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> m_pWaveHdr.dwUser
= 0;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> m_pWaveHdr.dwFlags
= 0;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> m_pWaveHdr.dwLoops
= 0;
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> wsprintf(
lpTemp, "WAVEHDR size = %lu", sizeof(WAVEHDR) );
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> log.write(lpTemp);
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">int
resPrepare = waveInPrepareHeader( m_hWaveIn, &m_pWaveHdr,
sizeof(WAVEHDR) ); //准备内存块录音
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">if (
resPrepare == MMSYSERR_NOERROR) log.write("准备录音用头文件成功");
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%"> else {
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
wsprintf(lpTemp, "不能开辟录音头文件,Error_Code = 0x%03X", resPrepare );
<P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
<P
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
log.write(lpTemp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -