使用WaveX API编写录音程序

    通过计算机系统内置的声卡进行声音的采集,将麦克风等输入设备产生的模拟信号转换成计算机系统能够识别的数字信号,这个过程就是录音。而将计算机中的数字信号经由声卡转换为模拟信号向音箱等输出设备进行声音播放的过程就是回放。
        Windows 中,系统分别给我们提供了三种接口,用以根据不同的需求来实现对音频硬件设备的访问:
        1 、多媒体设备控制接口 ( 高级音频 API/MCI API)
        2 、波形音频接口 ( 低级音频 API/WaveX API)
        3 DirectSound( 基于 COM 的对象组件, Windows 中将硬件能力发挥极致的接口 )
        DirectSound 具备优秀的硬件加速能力,能充分发挥硬件设备的数据处理功能,但其实现相对困难,要求编程人员具备使用 COM 组件对象的知识,所以对于一般应用的需求, WaveX API 是一种比较折衷的选择,它比 DirectSound 实现相对比较简单,比 MCI 则运用更加灵活, WaveX API 提供了更低层的功能,能直接对设备的音频数据进行操作。
        下面我们使用 WaveX API 来编写一个录音程序,用以演示 WaveX API 对音频设备进行访问的一般过程。
        我们的程序包括最基本的两个功能:录音与回放。
        首先是使用 WaveX API 进行录音的调用步骤:
   
waveInOpen
        |_________________WM_WIM_OPEN
waveInPrepareHeader
        |
waveInAddBuffer
|
waveInStart
|
录音缓冲区满__________WM_WIM_DATA
|
waveInReset
|
waveInClose
|_________________WM_WIM_CLOSE
 
        Private Declare Function waveInOpen Lib "winmm" ( _
            phwi As Long, _
            ByVal uDeviceID As Long, _
            pwfx As Any, _
            ByVal dwCallback As Long, _
            ByVal dwCallbackInstance As Long, _
            ByVal fdwOpen As Long _
        ) As Long
        Phwi 为该函数调用成功后返回的音频输入设备句柄,uDeviceID设置为要打开的音频输入设备的ID,当系统中存在不止一个音频输入设备时,系统用1,2,3..这样的ID来标识设备。你也可以直接设置为WAVE_MAPPER让系统自动选择一个默认的音频输入设备。Pwfx为一个WAVEHDR波形音频头结构,WAVEHDR结构里包含一些波形音频格式信息。dwCallback的意义由fdwOpen的值决定。WaveX API提供了几种通知应用程序消息的方法。fdwOpen的值有CALLBACK_FUNCTION、CALL_BACKTHREAD、CALLBACK_WINDOW,分别为回调函数方式,线程方式,窗口消息方式。dwCallback的值也分别可以设置为回调函数地址,线程函数地址和窗口句柄。当dwCallbackInstance为传递给相应的回调函数或线程函数的参数,其值的意义由用户自己指定,窗口消息下该值不可用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值