首页 API层实现语音录制

API层实现语音录制

举报
开通vip

API层实现语音录制API层实现语音录制 API?ãʵÏÖÓïÒôÂ?ÖÆ ÎÒ?ÓÇ??öÓÚÐèÒª??ÉÏÍøÑ?ÕÒÁË?ØÓÚÂ?Òô???ÖµÄÔ??úÂë??ÊÕ?ñ???ó??ÏÖÔÚ?Ñ×Ô?ºÃþË?µÄ???ÖÔ??úÂë???ª?öÀ??É??Ï?Íû?Ô???ÖÈËÓÐÓÃ?? ÆäʵҪʵÏÖÉùÒôµÄÂ?ÖÆ???ÉÒÔÓÃ?àÖÖµÄ??Ê?(ÀýÈç mci )??ÎÒÕâÀï?éÉܵÄÊÇÔÚ API µÄ?ãÃæÀ?ʵÏÖ??Äã?ÉÒÔ?ÔÆäÖÐ?øÐÐ?ü?àµÄ?ØÖ...

API层实现语音录制
API层实现语音录制 API?ãʵÏÖÓïÒôÂ?ÖÆ ÎÒ?ÓÇ??öÓÚÐèÒª??ÉÏÍøÑ?ÕÒÁË?ØÓÚÂ?Òô???ÖµÄÔ??úÂë??ÊÕ?ñ???ó??ÏÖÔÚ?Ñ×Ô?ºÃþË?µÄ???ÖÔ??úÂë???ª?öÀ??É??Ï?Íû?Ô???ÖÈËÓÐÓÃ?? ÆäʵҪʵÏÖÉùÒôµÄÂ?ÖÆ???ÉÒÔÓÃ?àÖÖµÄ??Ê?(ÀýÈç mci )??ÎÒÕâÀï?éÉܵÄÊÇÔÚ API µÄ?ãÃæÀ?ʵÏÖ??Äã?ÉÒÔ?ÔÆäÖÐ?øÐÐ?ü?àµÄ?ØÖÆ???È??˵??ÒªÒôƵÂãÊý?Ý?æµ?ÄãÖ???µÄÄÚ?æÖÐÈ??? ÏÈ˵Ò?ÏÂÒªÓõ?µÄ API ?? Â?ÒôÍ?????ÊÇÊ?Óà waveInXXX Ò?Àà API µÄ??×îÖ?ÒªµÄÊÇ waveInStart (?ËÃûË?Òå?ÍÊÇ?ªÊ?Â?Òô)??È?ºóÊÇ waveInStop(ËüÄÜ??ÔÚÄãÖ???µÄ?º?åÂúµÄÊ?ºò?µ?Ø) ?? Èç?û??Óà waveInStop ?ÉÒÔÊ?Óà waveInReset(??Í?ÓÚStopµÄÊÇ?ú?Êý??µÈ?º?åÂú?ÍÂíÉÏ?µ?ØÄÇÑùÄã?Å?ÉÒÔÖÕÖ?Â?Òô)?????ý×îºÃ?ú waveInGetPosition ÅäºÏÊ?ÓÃ?? ˵ÍêÕâÐ?º?Êý????µÃ??ÌáµÄÊÇΪÒÔÉÏ???öº?Êý×ö×?????×?µÄº?Êý(×?ÒâÅä?ÔÊ?ÓÃ)?? waveInOpen ºÍ waveInClose Åä?Ô( waveInOpen ÀïÃæÖ???ÒôƵµÄ?ñÊ????È??˵Á?ÌåÉù ºÍ16Î?ÒôÖʵÈ)?? waveInPrepareHeader ºÍ waveInUnprepareHeader Åä?Ô( waveInPrepareHeader ÀïÃæÖ???ÓÃÀ?Â?Òô?º?åµÄ?óÐ?ºÍÊ×µØÖ?)???ô?ú×Å waveInPrepareHeaderÒªÀýÐÐ??ʵ?Óà waveInAddBuffer( ×?ÓÃÎ?Ïê?????à˵ÁË)?? ÏêÏ?µ?ÓÃ?ý?Ì?ÉÒÔ??ÏÂÃæ (Ö?Ç?×îºÃµ?Óà waveInGetNumDevs ????ÓÐÃ?ÓÐ?ÉÓõÄÉè??) waveInOpen (?Ã??Óà WAVEFORMATEX ?á??Ö???ÒôƵ?ñÊ?) waveInPrepareHeader (?Ã??Óà WAVEHDR ?á??µÄ lpData ?ÉÔ?Ö????º?åÊ×µØÖ?) waveInAddBuffer waveInStart (Â?ÖÆÖÐ....) waveInStop (warning:Ò???Òª?º?åÂúÁË?Å?µ?Ø) waveInUnprepareHeader waveInClose ÐèÒªÖ??öµÄÊÇ??ÉÏÃæµÄ?úÂëÄã??ÄÜËæÐÄËùÓûµÄÍ?Ö?Â?Òô?ý?Ì(Èç?ûÄãÖ???µÄ? º?å?Ç???ó???È??˵×ã??Â?ÒôÒ??öÐ?Ê???ÄÇÃ?Äã?ÍÒª?Ô?ԵĵÈÉÏÒ??öÐ?Ê?)??Èç?ûÏ?ÍûÂíÉÏÍ?Ö???ÇëÊ?ÓÃÏÂÃæµÄ?????? waveInStart (Â?ÖÆÖÐ....) (n Ê??äºó??ÓÃ??Ìá?öÍ?Ö?ÇëÇó) waveInGetPosition (??Áô?ÃÖµ??ÓÃÀ?ÉèÖà WAVEHDR ?á??µÄ dwBytesRecorded ?ÉÔ?) waveInReset (ÖØÐÂÉèÖà WAVEHDR ?á??µÄ dwBytesRecorded ?ÉÔ?) Õû?ö?ý?Ì?ÍÊÇÈç?˵Ä???ä??ÏÂÃæ???ø?öÔ??ÌÐòÒÔÑéÖ??? ÐèҪ˵Ã?Ò?ÏÂ??Õý??Çé?öÏÂÂ?ÒôÒÔºó??×Ü??ºÄ?ѵÄÄÚ?æ(ÒÔ×Ö?ÚËã) ?á???æÔÚWAVEHDR ?á??µÄ dwBytesRecorded ?ÉÔ?ÖÐ???ÉÓõÄÒôƵÂãÊý?ݵ?È??Í?Å?øÄãÖ???µÄÄÚ?æ?º?åÖÐÈ?ÁË??Äã?ó?É???ØµÈ waveInUnprepareHeader ?Í?ÉÒÔÂíÉÏÄÃÀ?ÓÃÁË?? ( ???äÒ??öÄÚÈÝ???ÖÂÔ???âÒ?Ï .wav ÎÄ?þµÄÎÄ?þÍ??ñÊ? ) ??ÏÂÃæµÄ?á????Ò??ªÊ?µÄ?Ë?ö×Ö?ÚÊÇÒ??ö?á???? µÚÒ??ö ËÄ×Ö?Ú ÊÇ?êÖ????պõÈÓÚ ascii µÄ "RIFF" ??µÚ?þ?öËÄ×Ö?ÚÊÇ×ܵÄÎÄ?þ???È?õÈ?8??Äã?ÉÒÔÑéÖ?Ò?ÏÂ??(?ÎÕÕ16?øÖÆÔÄ?ÁÊý×ÖµÄ????) ?ú×ÅÊǵÚ?þ?öÊý?Ý?á????Õ?12?ö×Ö?Ú??Èç?ûÄãÊÇ?ê×?µÄ wave ?ñÊ?µÄÎÄ?þ??ÄÇÃ??ÍÊÇ?ô?Ó×ÅÁ??ö?êÖ???µÚÒ??öËÄ×Ö?ÚµÄ?êÖ?ÊÇ ascii µÄ "WAVE" ??µÚ?þ?ö ËÄ×Ö?ÚµÄ?êÖ??ÍÊÇ ascii µÄ "fmt "(×?Òâ??ÓÐÒ??ö?Õ?ñ)??È?ºóÊ?ϵÄËÄ×Ö?ÚÀïÃæ?صÄÊÇ WAVEFORMATEX ?á??µÄ?óÐ?(?ÎÕÕMSDN)??Ó??ÃÊÇ18?ö×Ö?Ú?? È?ºó??µ?È??ÍÊÇ 18?ö×Ö?ÚµÄ WAVEFORMATEX ?á??ÀïÃæµÄÖµ??ÏêÏ?µÄ?Í??˵ÁË??×Ô?º?éÒ?Ï MSDN?? (ÐèÒª×?ÒâµÄÊÇ??Õâ?ö WAVEFORMATEXEX µÄÄ?Ò??ö?ÉÔ?????ÁË?ÉÄܵÄ???ÈÀ??ä) ÔÚÕâ 18 ?ö×Ö?ÚºóÃæ (??ÕÕ?ÉÊ?ºòµÄ????)??Ó??ÃÊÇ?ú×ÅÒ??ö8×Ö?ÚµÄ?á??µÄ??È?ºó?ÍÊÇ "ÂãÊý?Ý" µÄ?ªÊ?µØÖ?ÁË??Õâ?Ë×Ö?Ú?á??µÄ?ªÊ?ËÄ×Ö?ÚÊÇ?êÖ???Ó??õÈÓÚ ascii µÄ "data"??È?ºó?ô?ú×ŵÄËÄ×Ö?Ú?ÍÊÇÂãÊý?ݵÄ?óÐ?ÁË??Ò??ÍÊÇ×îÖØÒªµÄ???Ö?? ºÃÁË??Èç?ËÒ?À???Äã?Í?ÉÒԵõ?ÒôƵÂãÊý?ݵÄÆðÊ?Î?ÖÃ(?ô?ô?úÔÚº?"data"?êÖ?µÄÊý?Ý?á??µÄºóÃæ)????ÓÐ?ÍÊÇÒôƵÊý?ݵÄ???ÈÁË??Ó??ÃÊÇËùÓеÄÎÊÌâ??ºÜÈÝÒ×?â?öµÄ?? ???ý????Òª×?Òâ???ÍÊÇÏÖÔڵĺÜ?à .wav ÎÄ?þ???áÍâ?ÓÒ??öÊý?Ý?á??(12×Ö?Ú)???Í?åÔÚ WAVEFORMATEX µÄºóÃæºÍ º? "data" µÄÊý?Ý?á??Ç?Ãæ?? Õâ?öÍâ?ÓµÄ?á?? µÚÒ??öËÄ×Ö?ÚÊÇ?êÖ???µÈÓÚ ascii ÂëµÄ "fact"??È?ºóµÚ?þ?öËÄ×Ö?ÚµÄÖµÔÚ?ó???ÖÇé?öÏÂ??µÈÓÚ 4?? µÚÈý?öËÄ×Ö?ÚµÄÖµÒ?ÊǵÈÓÚ ÒôƵÂãÊý?ݵÄ???È?? ?ù??ÉÏ?ÍÊÇÕâÑùÁË?? ÏÂÃæ?ø?öµÄÔ??ÌÐòÎÄ?þÖ?Òª?Ó?øÐÂ??µÄ VC win32???ÌÖÐ???àÒë???É??Ö?ÐÐÐ??ûÊÇÂ?ÒôÈýÃëºó×Ô??Éú?É mytest.wav ÎÄ?þ?????Å?âÊÔ(?ǵÃÑ?ºÃÄ?ÈÏÂ?ÒôÍ?µÀ)?? ?Ï?????à˵???ø?öÔ??ÌÐò(?ÃÔ??ÌÐòÖÐÒª?üº? RunTimeLog.cpp???û) Ï?Íû?Ô?ó?ÒÓÐÓÃ??(È?ÎÄÍê) (È?ÎÄÍê - 2003Äê03ÔÂ27ÈÕ_am: 11Ê?27?Ö) // ******************* FileName: WinMain.cpp ***************************** // ?ÃÔ??ÌÐòÐèÒª?ÓÈëµ? VC6 µÄ Win32 Application µÄ empty Project ÖÐ // Çë?üº?ÎÒ×Ô??ÒåµÄµ?ÊÔÀà???û #include "RunTimeLog.cpp" // ?ÔÓÚ???ÌµÄ Link Ñ?Ïî??ÖÁÉÙÒª?üº?ÒÔÏÂ?â: msvcrt.lib kernel32.lib user32.lib Winmm.lib #define WIN32_LEAN_AND_MEAN // Say No to MFC !! #include #include #include "RunTimeLog.cpp" RunTimeLog log; char lpTemp[256]=""; DWORD FCC(LPSTR lpStr) { DWORD Number = lpStr[0] + lpStr[1] *0x100 + lpStr[2] *0x10000 + lpStr[3] *0x1000000 ; return Number; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { CreateMutex( NULL, false, "MyMutex"); if ( GetLastError() == ERROR_ALREADY_EXISTS ) { log.write("Exists and Exit"); log.last(); ExitProcess( NULL); } log.write("Program Start."); log.nobuff = true; DWORD datasize = 48000; // ×î??ÓÃ?? WAVEFORMATEX waveformat; waveformat.wFormatTag=WAVE_FORMAT_PCM; waveformat.nChannels=1; waveformat.nSamplesPerSec=8000; waveformat.nAvgBytesPerSec=8000; waveformat.nBlockAlign=1; waveformat.wBitsPerSample=8; //Ö???Â?Òô?ñÊ? waveformat.cbSize=0; wsprintf( lpTemp, "WAVEFORMATEX size = %lu", sizeof(WAVEFORMATEX) ); log.write(lpTemp); HWAVEIN m_hWaveIn; if ( waveInGetNumDevs() ) log.write("ÓÐ?ÉÒÔÊ?ÓÃµÄ WaveIn Í?µÀ"); else log.write("Ã?ÓÐ?ÉÒÔÊ?ÓÃµÄ waveIn Í?µÀ"); int res=waveInOpen(&m_hWaveIn,WAVE_MAPPER, &waveformat, (DWORD)NULL,0L,CALLBACK_WINDOW); //?ò?ªÂ?ÒôÉè?? if ( res == MMSYSERR_NOERROR ) log.write("?ò?ª waveIn ?É??"); // ÑéÖ?????ÊÇ?ñ?É?? else { wsprintf(lpTemp, "?ò?ª waveIn Í?µÀÊ??Ü??Error_Code = 0x%x", res ); log.write(lpTemp); } // End of ÑéÖ?????ÊÇ?ñ?É?? WAVEHDR m_pWaveHdr; m_pWaveHdr.lpData = (char *)GlobalLock( GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE, datasize) ); memset(m_pWaveHdr.lpData, 0, datasize ); m_pWaveHdr.dwBufferLength = datasize; m_pWaveHdr.dwBytesRecorded = 0; m_pWaveHdr.dwUser = 0; m_pWaveHdr.dwFlags = 0; m_pWaveHdr.dwLoops = 0; wsprintf( lpTemp, "WAVEHDR size = %lu", sizeof(WAVEHDR) ); log.write(lpTemp); int resPrepare = waveInPrepareHeader( m_hWaveIn, &m_pWaveHdr, sizeof(WAVEHDR) ); //×???ÄÚ?æ?éÂ?Òô if ( resPrepare == MMSYSERR_NOERROR) log.write("×???Â?ÒôÓÃÍ?ÎÄ?þ?É??"); else { wsprintf(lpTemp, "??ÄÜ?ª?ÙÂ?ÒôÍ?ÎÄ?þ??Error_Code = 0x%03X", resPrepare ); log.write(lpTemp); } // End of ÑéÖ??ª?Ù?º?å resPrepare = waveInAddBuffer( m_hWaveIn, &m_pWaveHdr, sizeof(WAVEHDR) ); if ( resPrepare == MMSYSERR_NOERROR) log.write("×???Â?ÒôÓÃÄÚ?æ?É??"); else { wsprintf(lpTemp, "??ÄÜ?ª?ÙÂ?ÒôÓÃ?º?å??Error_Code = 0x%03X", resPrepare ); log.write(lpTemp); } // End of ÑéÖ??ª?Ù?º?å log.write(""); // Ð?Èë?Õ×Ö?û???ÉÒÔ?ÖÐÐ if (! waveInStart(m_hWaveIn) ) log.write("?ªÊ?Â?Òô"); else log.write("?ªÊ?Â?ÒôÊ??Ü"); Sleep(3200); MMTIME mmt; mmt.wType = TIME_BYTES; log.numberwrite( "sizeof(MMTIME) =", sizeof(MMTIME) ); log.numberwrite( "sizeof(UINT) =", sizeof(UINT) ); if ( waveInGetPosition(m_hWaveIn, &mmt, sizeof(MMTIME)) ) log.write("??ÄÜÈ?µÃÒôƵ???È"); else log.numberwrite( "È?µÃÏÖÔÚÒôƵÎ?Öà =", mmt.u.cb ); if (mmt.wType == TIME_BYTES) { log.write("µÃµ?µÄ TIME_BYTES ?ñÊ?µÄÒôƵ???È"); } else log.write("Ö???µÄ TIME_BYTES ?ñÊ?ÒôƵ???È??Ö??Ö"); // if (! waveInStop(m_hWaveIn) ) log.write("Í?Ö?Â?Òô"); else log.write("Í?Ö?Â?ÒôÊ??Ü"); if (! waveInReset(m_hWaveIn) ) log.write("ÖØÖÃÄÚ?æÇø?É??"); else log.write("ÖØÖÃÄÚ?æÇøÊ??Ü"); m_pWaveHdr.dwBytesRecorded = mmt.u.cb; DWORD NumToWrite=0; DWORD dwNumber = 0; HANDLE FileHandle = CreateFile( "myTest.wav", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // memset(m_pWaveHdr.lpData, 0, datasize); dwNumber = FCC("RIFF"); WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); dwNumber = m_pWaveHdr.dwBytesRecorded + 18 + 20; WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); dwNumber = FCC("WAVE"); WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); dwNumber = FCC("fmt "); WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); dwNumber = 18L; WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); WriteFile(FileHandle, &waveformat, sizeof(WAVEFORMATEX), &NumToWrite, NULL); dwNumber = FCC("data"); WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); dwNumber = m_pWaveHdr.dwBytesRecorded; WriteFile(FileHandle, &dwNumber, 4, &NumToWrite, NULL); WriteFile(FileHandle, m_pWaveHdr.lpData, m_pWaveHdr.dwBytesRecorded, &NumToWrite, NULL); SetEndOfFile(FileHandle); CloseHandle( FileHandle ); FileHandle = INVALID_HANDLE_VALUE; // ÊÕÎ??Ø?Õ?ä?ú log.write("Ó??ÃÒÑÉú?É myTest.wav ÎÄ?þ"); if ( waveInUnprepareHeader(m_hWaveIn, &m_pWaveHdr, sizeof(WAVEHDR)) ) log.write("Un_Prepare Header Ê??Ü"); else log.write("Un_Prepare Header ?É??"); if ( GlobalFree(GlobalHandle( m_pWaveHdr.lpData )) ) log.write("Global Free Ê??Ü"); else log.write("Global Free ?É??"); if (res == MMSYSERR_NOERROR ) //?Ø?ÕÂ?ÒôÉè?? if (waveInClose(m_hWaveIn)==MMSYSERR_NOERROR)log.write("Õý???Ø?ÕÂ?ÒôÉè??"); else log.write("?ÇÕý???Ø?ÕÂ?ÒôÉè??"); log.last(true); // ExitProcess(0); return 0; } // ******************* End of File ***************************** [À?Ô?:programfan.com(?à?Ì??ºÃÕß)][Ñ?È?:kjkimberly]
本文档为【API层实现语音录制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_511210
暂无简介~
格式:doc
大小:32KB
软件:Word
页数:0
分类:互联网
上传时间:2018-02-20
浏览量:6