WINCE声音驱动模型概述(2)--WINCE WAVE接口模型详解

简介: WINCE WAVE接口模型详解 1、标准的WAVE流式驱动程序接口 WAVE的驱动程序提供标准的流式接口给高层,但真正产生关键作用的是 WAV_IOControl这个函数。

WINCE WAVE接口模型详解


1、标准的WAVE流式驱动程序接口

WAVE的驱动程序提供标准的流式接口给高层,但真正产生关键作用的是

WAV_IOControl这个函数。该函数的以下两个参数最重要:

dwCode

具体的IO控制命令,包括:

IOCTL_WAV_MESSAGE  (处理放音和录音相关的所有操作)

IOCTL_DSDVR_MESSAGE (DirectSound 动作处理)

IOCTL_MIX_MESSAGE.   (MIXER的操作)

pBufIn

指向了MMDRV_MESSAGE_PARAMS结构,该结构如下:

      Struct {

             UINT uDeviceId;

       UINT uMsg;

       DWORD dwUser;

       DWORD dwParam1;

       DWORD dwParam2;

}MMDRV_MESSAGE_PARAMS;

                    

                     uDeviceId: 0,1,2 。。。 如果是0代表全局或者缺省的设备

                     uMsg :用作(WIDM_*),(WODM_*), (MXDM_*)三种消息

                     dwUser:实例的具体标识

  

       通过这个函数传递的高层命令,最终导致驱动的具体动作,放音、录音或者混音。

 

2、关键的数据结构

        WAVE OPEN时候使用的数据结构:

              WAVEFORMATEX{

                     WORD  wFormatTag;

                     WORD  wChannels;

                     DWORD       nSamplesPerSec;

                     DWORD  nAvgBytesPerSec;

                     WORD  nBlockAlign;

                     WORD  nBitsPerSample;

                     WORD  cbSize;

}

该数据结构定义了一个Audio Stream所需要的大部分信息,当做WAVE OPEN的时候可能应用可能会首先尝试打开,这个时候WAVE_IO_CONTROL 就会传递一个WAVE_FORMAT_QUERY 给驱动,而驱动只是简单的检查是否真正的支持请求的格式,而不真正打开设备。

 

每次应用添加声音数据的时候会使用如下数据结构:

Struct {

LPSTR lpData;

DWORD dwBufferLength;

DWORD dwBytesRecorded;

DWORD dwUser;

DWORD dwFlags;

DWORD dwLoops;

Struct wavehdr_tag *lpNext;

DWORD Reserved;
}

其中dwFlags定义了几个标志:

              WHDR_BEGINLOOP :指明这个BUFFER是否要求被自动重放 (APP设)

              WHDR_DONE          :指明这个BUFFER已经处理完毕(驱动设)

              WHDR_ENDLOOP :指明这个BUFFER是否结束重放(APP设)

              WHDR_INQUEUE :指明这个BUFFER入队列(驱动设)

              WHDR_PREPARED:指明这个BUFFER的确准备好(APP或驱动设)

这几个标志是应用和驱动通信的关键,也是对队列操作的关键。应用和驱动通过设定这些标志位,让数据不断在驱动和应用之间流动,从而完成录放的各种操作。当然,这个过程还要配合一些WAVE 消息。

目录
相关文章
|
4月前
|
Linux 程序员 编译器
将驱动程序移植到新的驱动模型 【ChatGPT】
将驱动程序移植到新的驱动模型 【ChatGPT】
|
编解码 物联网 Linux
透过ALSA这层迷雾剖析AliOS Things音频框架设计
ALSA是Advanced Linux Sound Architecture的缩写,即高级Linux音频架构,在Linux上提供了对音频和MIDI(较少使用)的支持。在Linux 2.6的内核版本后,AlSA目前已经成为了linux的主流音频体系结构。
透过ALSA这层迷雾剖析AliOS Things音频框架设计
|
编解码 人工智能 Linux
OpenHarmony 标准系统 HDF 框架音视频驱动开发
OpenHarmony 标准系统 HDF 框架音视频驱动开发
705 0
OpenHarmony 标准系统 HDF 框架音视频驱动开发
|
Linux
嵌入式 V4L2 应用编程(1):抓取 uvc camrea 图像
嵌入式 V4L2 应用编程(1):抓取 uvc camrea 图像
394 0
|
Ubuntu Linux 测试技术
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程
374 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程(下)
|
Ubuntu Linux API
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程
304 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程(上)
|
Linux 芯片
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程(中)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程
256 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程(中)
|
编译器 开发工具 C语言
QT应用编程:基于VLC开发音视频播放器(句柄方式)
QT应用编程:基于VLC开发音视频播放器(句柄方式)
465 0
QT应用编程:基于VLC开发音视频播放器(句柄方式)
|
存储 编解码 Linux
嵌入式Linux下LCD应用编程: 调用giflib库解码显示GIF动态图
嵌入式Linux下LCD应用编程: 调用giflib库解码显示GIF动态图
791 0
嵌入式Linux下LCD应用编程: 调用giflib库解码显示GIF动态图
|
Ubuntu Linux Windows
Linux驱动开发: 编写USB接口光谱仪驱动
Linux驱动开发: 编写USB接口光谱仪驱动
206 0