VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Windows环境下的麦克风录音系统(4)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

               




相关文章

相关软件