⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api 层实现语音录制 - 技术文档 - vc文档 - 平台sdk - 立华软件园.htm

📁 语音与识别技术包含很多C语言处理模块系统
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            (录制中....)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;waveInStop 
            (warning:一定要缓冲满了才返回)
            <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%">&nbsp;&nbsp; 
            waveInUnprepareHeader
            <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%">waveInClose
            <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%">&nbsp;&nbsp;需要指出的是,上面的代码你不能随心所欲的停止录音过程(如果你指定的缓冲非常大,比方说足够录音一个小时,那么你就要乖乖的等上一个小时),如果希望马上停止,请使用下面的方法。
            <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%">&nbsp;&nbsp;&nbsp;&nbsp;waveInStart
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;(录制中....)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;(n 
            时间后,用户提出停止请求)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;waveInGetPosition 
            (保留该值,用来设置 WAVEHDR 结构的 dwBytesRecorded 成员)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;waveInReset
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;(重新设置 
            WAVEHDR 结构的 dwBytesRecorded 成员)
            <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%">&nbsp;&nbsp;整个过程就是如此的几句,下面将给出源程序以验证。
            <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%">&nbsp;&nbsp;需要说明一下,正常情况下录音以后,总共耗费的内存(以字节算) 
            会保存在WAVEHDR 结构的 dwBytesRecorded 成员中,可用的音频裸数据当然就放进你指定的内存缓冲中去了,你大可不必等 
            waveInUnprepareHeader 就可以马上拿来用了。
            <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%">&nbsp; 
            ( 补充一个内容,粗略讲解一下 .wav 文件的文件头格式 )
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;看下面的结构,一开始的八个字节是一个结构, 
            第一个 四字节 是标志,刚好等于 ascii 的 "RIFF" 
            ,第二个四字节是总的文件长度减去8。你可以验证一下。(参照16进制阅读数字的方法)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;跟着是第二个数据结构,占12个字节。如果你是标准的 
            wave 格式的文件,那么就是紧接着两个标志,第一个四字节的标志是 ascii 的 "WAVE" ,第二个 四字节的标志就是 ascii 
            的 "fmt "(注意,有一个空格),然后剩下的四字节里面藏的是 WAVEFORMATEX 
结构的大小(参照MSDN),应该是18个字节。
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;然后,当然就是 
            18个字节的 WAVEFORMATEX 结构里面的值。详细的就不说了,自己查一下 MSDN。 (需要注意的是,这个 
            WAVEFORMATEXEX 的末一个成员,讲了可能的长度扩充)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;在这 
            18 个字节后面 (按照旧时候的方法),应该是跟着一个8字节的结构的,然后就是 "裸数据" 
            的开始地址了,这八字节结构的开始四字节是标志,应该等于 ascii 的 
            "data",然后紧跟着的四字节就是裸数据的大小了,也就是最重要的部分。
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;好了,如此一来,你就可以得到音频裸数据的起始位置(紧紧跟在含"data"标志的数据结构的后面),还有就是音频数据的长度了。应该是所有的问题都很容易解决的。
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;不过,还要注意,就是现在的很多 
            .wav 文件都会外加一个数据结构(12字节),就插在 WAVEFORMATEX 的后面和 含 "data" 
            的数据结构前面。&nbsp;这个外加的结构 第一个四字节是标志,等于 ascii 码的 
            "fact",然后第二个四字节的值在大部分情况下都等于 4, 第三个四字节的值也是等于 音频裸数据的长度。&nbsp;基本上就是这样了。
            <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%">&nbsp;&nbsp;&nbsp;下面给出的源程序文件只要加进新建的 
            VC win32工程中,编译即可,执行效果是录音三秒后自动生成 mytest.wav 文件供播放测试(记得选好默认录音通道)。
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;废话不多说,给出源程序(该源程序中要包含 
            RunTimeLog.cpp,见http://www.csdn.net/develop/Read_Article.asp?Id=17477) 
            希望对大家有用。(全文完)
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;(全文完 
            - 2003年03月27日_am: 11时27分)
            <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%">// 
            *******************&nbsp;FileName: 
            WinMain.cpp&nbsp;*****************************
            <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%">// 
            该源程序需要加入到 VC6 的 Win32 Application 的 empty Project 中
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">// 
            请包含我自定义的调试类,见 #include "RunTimeLog.cpp"
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">// 
            对于工程的 Link 选项,至少要包含以下库:&nbsp;msvcrt.lib kernel32.lib user32.lib 
            Winmm.lib
            <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%">#define 
            WIN32_LEAN_AND_MEAN&nbsp;&nbsp;&nbsp;// Say No to MFC !!
            <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%">#include 
            &lt;windows.h&gt;
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P 
            style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">#include 
            &lt;Mmsystem.h&gt;
            <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%">#include 
            "RunTimeLog.cpp"
            <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%">RunTimeLog 
            log;
            <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%">char 
            lpTemp[256]="";
            <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%">DWORD 
            FCC(LPSTR lpStr)
            <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%">&nbsp; 
            DWORD Number = lpStr[0] + lpStr[1] *0x100 + lpStr[2] *0x10000 + 
            lpStr[3] *0x1000000 ;
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">&nbsp; 
            return Number;
            <P style="MARGIN: 5px; TEXT-INDENT: 26px; LINE-HEIGHT: 150%">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -