waveAPI的笔记

  最近在写录音的程序,网上找了些代码,不能响应MM_WIM_DATA消息(写错了消息处理函数的位置了(晕死)),只能在msdn上找找一些接口的使用了,顺便做下笔记:

 

(1)UINT waveInGetNumDevs(VOID);  是用来获取当前的录音设备的数目,只要简单调用就好,返回值为录音设备的数目

 

(2)

MMRESULT waveInGetDevCaps(
  UINT_PTR     uDeviceID,
  LPWAVEINCAPS pwic,     
  UINT         cbwic     
);                                                      这个是用来获取录音设备的一些详细信息,包括录音设备的名称,出厂标识(MMREG.h 文件中有很多定义好的),暂且这样理解,(对于uDeviceID,参数 可以调用

 

MMRESULT waveInGetID(
  HWAVEIN hwi,      
  LPUINT puDeviceID 
);

 

这个函数来获取 ,  HWAVEIN hwi, 是通过OPen一个录音设备然后返回的  )好像不对  看waveinopen的解释是感觉有些矛盾

暂时用WAVE_mapper, The function selects a waveform-audio input device capable of recording in the specified format.

 

 

(3)

waveinopen()

 

MMRESULT waveInOpen(
  LPHWAVEIN       phwi,         OUT 返回打开的录音设备的句柄
  UINT_PTR       uDeviceID,     WAVE_MAPPER
  LPWAVEFORMATEX pwfx,      
  DWORD_PTR      dwCallback,
  DWORD_PTR      dwCallbackInstance,
  DWORD          fdwOpen    
);

 

//

Use the waveInGetNumDevs function to determine the number of waveform-audio input devices present on the system. The device identifier specified by uDeviceID varies from zero to one less than the number of devices present. The WAVE_MAPPER constant can also be used as a device identifier.

If you choose to have a window or thread receive callback information, the following messages are sent to the window procedure or thread to indicate the progress of waveform-audio input: MM_WIM_OPEN, MM_WIM_CLOSE, and MM_WIM_DATA.

If you choose to have a function receive callback information, the following messages are sent to the function to indicate the progress of waveform-audio input: WIM_OPEN, WIM_CLOSE, and WIM_DATA.

 

录音开始后会发送: MM_WIM_OPEN, MM_WIM_CLOSE, and MM_WIM_DATA 到你定义的处理过程,可以是窗口,线程或者是自定义的处理函数 。

 

 

typedef struct {
    WORD  wFormatTag;        WAVE_FORMAT_PCM

    WORD  nChannels;       //声道 1单声道,2立体声 需要去准备两个缓存分别录制 
    DWORD nSamplesPerSec;   //采样频率 一般为8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz.
    DWORD nAvgBytesPerSec;   //每秒采样数据量 :为采样频率×nBlockAlign;
    WORD  nBlockAlign;       //最小的数据块 在录音时处理的数据量是最小块的倍数  声道×wBitsPerSample/8;
    WORD  wBitsPerSample;    //采样大小,8位,16位,32位
    WORD  cbSize;         额外的数据信息 可以忽略 
} WAVEFORMATEX;

 


(4) 准备一个缓存区 ,我的理解是说应该是开辟一个缓存区,还有标记下缓存的状态,主要任务是修改dwFlags的状态为:那个...

The waveInPrepareHeader function prepares a buffer for waveform-audio input.准备一个缓存,为波形设备的输入

MMRESULT waveInPrepareHeader(
  HWAVEIN hwi,   
  LPWAVEHDR pwh,  The WAVEHDR structure defines the header used to identify a waveform-audio buffer。
  UINT cbwh      
);
typedef struct {
    LPSTR      lpData;                   
    DWORD      dwBufferLength;
    DWORD      dwBytesRecorded;            //录音时,记录当前缓冲区的数据量
    DWORD_PTR  dwUser;
    DWORD      dwFlags;    
    DWORD      dwLoops;      //Number of times to play the loop. This member is used only with output buffers              
    struct wavehdr_tag * lpNext;           //保留
    DWORD_PTR reserved;
} WAVEHDR;

 

 

(5)  将准备好的HDR结构与录音设备绑定 。 

                   

WaveInaddBuffer()

MMRESULT waveInAddBuffer(
  HWAVEIN
hwi,   
  LPWAVEHDR pwh
  UINT cbwh      
);

传递的WAVEHDR必须是waveInPrepareHeader 准备好的HDR 。

 

 

(6) 准备好之后就可以调用

 

waveinStart  录音了 。

 

 

(7)

MM_WIM_DATA 

这是在缓存区被写满后或者停止录音时 就会响应的消息,这时候可以读出缓存中的录音数据,将数据保存到多媒体文件,然后重新准备一块缓存 。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值