网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
API层实现语音录制
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
志,第一个四字节的标志是 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,见http://www.csdn.net/develop/Read_Article.asp?Id=17477) 希望对大家有用。(全文完)

      (全文完 - 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 <windows.h>

#include <Mmsystem.h>



#include "RunTimeLog.cpp"



RunTimeLog log;





char lpTemp[256]="";





DWORD FCC(LPSTR lpStr)

{

   DWORD Number = lpStr[0] + lpStr *0x100 + lpStr *0x10000 + lpStr *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_FO
  • 下一篇资讯: 用VC++实现版本在线升级
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号