中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 综合文章
Windows环境下的麦克风录音系统(4)
作者:未知 时间:2004-03-03 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

Windows环境下的麦克风录音系统

5.Waveform Audio

     Waveform Audio APIsMicrosoft提供给广大Win32程序员用来给自己的应用程序添加声音支持的一套强大的API,它提供的功能如下:

        1.打开/关闭/查询声音设备;

        2.播放波形文件;

        3.设置播放速度;

        4.播放进度控制;

        5.录音;

        6.得到当前的播放位置;

        7.调节音量.

 

下面简单介绍一下这套API提供的主要函数:

  • 打开录音设备函数

            MMRESULT waveInOpen(

            LPHWAVEIN phwi,                 // 输入设备句柄

            UINT uDeviceID,                   // 输入设备ID

            LPWAVEFORMATEX pwfx,       // 录音格式指针

            DWORD dwCallback,              // 处理MM_WIM_***消息的回调函数或窗 

                                                       // 口句柄,线程ID

            DWORD dwCallbackInstance, 

            DWORD fdwOpen                  //处理消息方式的符号位

          );

 

  • 为录音设备准备缓存函数

              MMRESULT waveInPrepareHeader(  HWAVEIN hwi, 

                                                                  LPWAVEHDR pwh,

                                                                  UINT bwh ); 

 

  • 给输入设备增加一个缓存

              MMRESULT waveInAddBuffer(  HWAVEIN hwi,

                                                           LPWAVEHDR pwh,

                                                           UINT cbwh ); 

 

  • 开始录音

              MMRESULT waveInStart(  HWAVEIN hwi  ); 

 

  • 清除缓存

              MMRESULT waveInUnprepareHeader( HWAVEIN hwi,

                                                                     LPWAVEHDR pwh,

                                                                     UINT cbwh); 

 

  • 停止录音

              MMRESULT waveInReset( HWAVEIN hwi ); 

 

  • 关闭录音设备

              MMRESULT waveInClose( HWAVEIN hwi ); 

 

  • Wave_audio数据格式

              typedef struct {

                   WORD  wFormatTag; // 数据格式,一般为WAVE_FORMAT_PCM

                                                   // 脉冲编码

                   WORD  nChannels;     // 声道

                   DWORD nSamplesPerSec;   // 采样频率

                   DWORD nAvgBytesPerSec;  // 每秒数据量

                   WORD  nBlockAlign;

                   WORD  wBitsPerSample;     // 样本大小

                   WORD  cbSize;

            } WAVEFORMATEX; 

  • waveform-audio 缓存格式 

             typedef struct {

                   LPSTR  lpData;                    // 内存指针

                   DWORD  dwBufferLength;    // 长度

                   DWORD  dwBytesRecorded; // 已录音的字节长度

                   DWORD  dwUser;

                   DWORD  dwFlags;

                   DWORD  dwLoops;              // 循环次数

                   struct wavehdr_tag * lpNext;

                   DWORD  reserved;

             } WAVEHDR; 

 

  • 相关消息 

             MM_WIM_OPEN:打开设备时消息,在此期间我们可以进行一些初始化工作

             MM_WIM_DATA:当缓存已满或者停止录音时的消息,处理这个消息可以对

                                     缓存进行重新分配,实现不限长度录音

             MM_WIM_CLOSE:关闭录音设备时的消息。

 

 

5. Multimedia File I/O

       Multimedia File I/O APIsMicrosoft提供的另外一套强大的针对媒体文件I/OAPI,我们知道许多像MediaPlay,RealOne这样的多媒体程序对媒体文件的读写性能要求很高,它们几乎要求实时的将磁盘上的媒体文件以流的形式读入,但是对于一般的文件I/O形式如图1:

                        7

 

    1.文件从磁盘上被读入操作系统的File I/Obuffer;

    2.然后拷贝到应用程序自己的buffer;

    3.应用程序这时候才能读取文件内容.

       上述的过程对于多媒体应用程序来说是低效的而且浪费宝贵的内存资源,如果文件和大的话势必还要采取分段读取等机制,Multimedia File I/O采取了一种直接存取机制(如图2),使得应用程序可以直接读取操作系统的File I/O buffer,大大提高了效率.后面我们会利用此套API实现录音文件的存储.

 

                         图2

               

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有