设为首页 收藏本站
查看: 1391|回复: 0

VISTA、Win Server 2008、Win7 等系统音频系统底层API

[复制链接]

尚未签到

发表于 2015-5-17 12:48:05 | 显示全部楼层 |阅读模式
VISTA、Win Server 2008、Win7 等系统音频系统底层API

  Core Audio APIs的优势:
  Windows Vista、Windows 7、Windows server 2008等系统音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API( 如Media Foundation(将要取代DirectShow等高层API)等 )提供服务。相比之前版本的API有如下优势:
  1. 具有低延时、故障恢复能力的音频流。
  2. 提高可靠性 ( 将很多音频函数从核心态移到了用户态 )
  3. 提高了安全性 (在安全的,低优先级别的线程处理被保护的音频内容)
  4. 为单独的音频设备分配了特定的系统级别的规则 (console, multimedia, communications) 。
  5. 用户可以直接操作相应音频终端设备(Audio Endpoint Devices 如:扬声器、耳机、麦克风、CD播放器)的软件抽象。
  
  Core Audio APIs在系统中的位置:
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://pp4csa.blu.livefilestore.com/y1mRGe2ls9Wp8GOBLOY9yy2BIQOHNcNruZiveEpU8HvFkVqRMEfv_j-86reMLq3QjpjNoiAQU1qwYV16wc3BJ8rnB-ioAyA0XG-sc8BU4ETA64g5GIlgj_KUclk9U0V-0CNyVMGqGp47svorQrEm6Crgw/1.jpg
  Core Audio APIs的组成:
  1. Multimedia Device (MMDevice) API    该API用于枚举系统中的音频终端设备(Audio Endpoint Devices)。告诉音频客户端程序有哪些音频终端设备以及它们的性能,并且为这些设备创建驱动实例(driver instances)。是最基本的Core Audio API,为其他三个API提供服务。
  主要接口:
  IMMDeviceEnumerator 用来列举音频终端设备。
  IMMDevice                  代表一个音频设备(audio device)。
  IMMEndpoint               代表一个音频终端设备(audio endpoint device),只有一个方法GetDataFlow,用来识别一个音频终端设备是一个输出设备(rendering device)还是一个输入设备(capture device)。
  IMMDeviceCollection           代表一个音频终端设备的集合  
  2. EndpointVolume API      使客户端程序能够操作音频终端设备。
  主要接口:
  IAudioEndpointVolume 用于控制音频终端设备的音量、静音。
  3. Windows Audio Session API (WASAPI)      使客户端程序能够管理介于程序和音频终端设备之间的音频数据。
  如应用程序本身的音量。
  主要接口:
  ISimpleAudioVolume           代表控制来往音频终端设备的音频流的音量。
  4. DeviceTopology API 客户端程序使用这个API可直接沿着音频适配器(audio adapters)的硬件设备里的数据通道进入布局特征。是最底层的音频API,可以通过适配器设备(adapter devices)的布局来查看和管理设备中的音频控制。下图为DeviceTopology API的作用范围
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://pp4csa.blu.livefilestore.com/y1m24fIRJBrSLnrFhjXVwjsyZznZiLgvjCeQazv90lXn-WgWrRGBE5CIFfOn2T__XDQkACHEZtmZwifQwYMor_7en1AecjkthwFOmwwgtVpMentZ0DCoM6WUkyxMXENJe8s8pyVDyRLwg2ZUuJmgedjhg/2.jpg
  音频适配器设备(audio adapter device)内部是由很多Part组成。主要包括亚单位(Subunit)和连接头(Connector)。亚单位主要分为:音量控制(Vol)、静音控制(Mute)、多路器(MUX)等。连接头(Con)是一个连接的两端。
  
  Core Audio APIs的使用:
   音频终端设备(Audio Endpoint Device)音量、静音控制
  比如控制“声音”对话框下“播放”选项卡中的“扬声器”等,“录制”选项卡中的“麦克风”、“立体声混音”等。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://pp4csa.blu.livefilestore.com/y1mJz_wDNKMXOTuGj9mmvqhozl7DYQ3LdkYI9hAnQZNtq-ZAjd-jlN6cdRxkkKiYTHKLq54YkR1-Y1rXzJZKZEJsAhMs26X5bIVbdyzutBYBlb_erlnhuhHMBSGcVVPtpYZW6EGNENKFxFQgP53HmFJNQ/3.jpg
  步骤:
  1.        得到IMMDeviceEnumerator接口。
  2.        遍历音频终端设备得到IMMDeviceCollection接口。
  3.        根据IMMDeviceCollection得到每个设备的IPropertyStore接口,从而分辨并搜索到指定的设备IMMDevice接口。
  4.        用IMMDevice接口激活音量、静音控制接口IAudioEndpointVolume。
  
   音频适配器设备亚单位(Subunit)的音量、静音控制
  比如控制“声音”对话框下“播放”选项卡中的“扬声器”下的“CD 音频”、“麦克风”、“Fornt Pink In”等的控制。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://pp4csa.blu.livefilestore.com/y1mlo1ww6e23O7BB8omCBDlQOJWKXlYOqxi958yq2il0K44FpZQkSEnU8WoxsN5HOFk2lqhqGFUBUNvqxEMog2_nESuN5ieK22Ma9Ln9YuUqbLcUTaoPHxDrBi0qYBUGbIsjJ_VJg2fqpUzjeK2LW4IRQ/4.jpg
  步骤:
  1.        得到IMMDeviceEnumerator接口。
  2.        遍历音频终端设备得到IMMDeviceCollection接口。
  3.        根据IMMDeviceCollection得到每个设备的IPropertyStore接口,从而分辨并搜索到指定的设备IMMDevice接口。
  4.        根据IMMDevice接口和连接器接口IConnector得到音频终端设备所对应的设备适配器(adapter device)的布局接口IDeviceTopology。
  5.        根据IDeviceTopology接口得到指定的部分(Part)。
  6.        最后用得到的部分(Part)接口IPart激活音量控制接口IAudioVolumeLevel和静音控制接口IAudioMute。
  
   会话(Session)音量、静音控制
  比如“音量合成器”中应用程序的音量。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://pp4csa.blu.livefilestore.com/y1ml2y3X8PXZe8xeFXVPqCpy7B2rs-x0gSMX5e4pncex6zqCvq8e1HbM--RWbhvgoLoNXepcWN-f5D4W2Vvqr30Kas6RGOqrnxDhNFuYM5faOvdYNoiqbHTHWXdmjx-BSs6fiKJIm8sPcIUzs8gaQIQtQ/5.jpg
  步骤:
  1.        得到IMMDeviceEnumerator接口。
  2.        根据IMMDeviceEnumerator得到默认设备的IMMDevice接口。
  3.        得到音频会话接口IAudioSessionManager。
  4.        由IAudioSessionManager接口得到IAudioSessionControl接口,该接口用来设置会话(Session)参数。
  5.        设置好了参数之后,在由IAudioSessionManager接口得到音频会话的音量、静音控制接口ISimpleAudioVolume,从而可以控制程序的音量、静音。
  
  
  转自:http://kanglovepei.spaces.live.com/blog/cns!861E0583566CFC59!266.entry
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-67781-1-1.html 上篇帖子: 软件之Notepad++已停止工作(win7,unicode版本,插件问题) 下篇帖子: Win7 64位安装Python PIL库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表