音频系统底层API

IAudioEndpointVolume
IAudioEndpointVolume接口表示进出音频端点设备的音频流的音量控制。 客户端通过调用参数iid设置为REFIID IID_IAudioEndpointVolume的IMMDevice :: Activate方法获取对端点设备的IAudioEndpointVolume接口的引用。

IAudioEndpointVolume编程调节Win7/Win8系统音量的一种方法
https://blog.csdn.net/greless/article/details/70143586

IMMDeviceEnumerator
IMMDeviceEnumerator接口提供枚举多媒体设备资源的方法。 在MMDevice API的当前实现中,此接口可以枚举的唯一设备资源是音频端点设备。 客户端通过调用CoCreateInstance函数获取对IMMDeviceEnumerator接口的引用,如前所述(请参阅MMDevice API)。
https://docs.microsoft.com/en-us/windows/desktop/api/mmdeviceapi/nn-mmdeviceapi-immdeviceenumerator

IMMDeviceEnumerator 如何获取音频设备的名称
https://blog.csdn.net/u011417605/article/details/48630677
IMediaSeeking
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ee493361(v=winembedded.80)
IMediaControl Interface
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ee494426(v%3Dwinembedded.80)

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

https://www.cnblogs.com/huaping-audio/archive/2010/12/15/1907151.html

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在系统中的位置:

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 代表一个音频终端设备的集合

  1. EndpointVolume API 使客户端程序能够操作音频终端设备。
    主要接口:

IAudioEndpointVolume 用于控制音频终端设备的音量、静音。

  1. Windows Audio Session API (WASAPI) 使客户端程序能够管理介于程序和音频终端设备之间的音频数据。
    如应用程序本身的音量。
    主要接口:

ISimpleAudioVolume 代表控制来往音频终端设备的音频流的音量。

  1. DeviceTopology API 客户端程序使用这个API可直接沿着音频适配器(audio adapters)的硬件设备里的数据通道进入布局特征。是最底层的音频API,可以通过适配器设备(adapter devices)的布局来查看和管理设备中的音频控制。下图为DeviceTopology API的作用范围

音频适配器设备(audio adapter device)内部是由很多Part组成。主要包括亚单位(Subunit)和连接头(Connector)。亚单位主要分为:音量控制(Vol)、静音控制(Mute)、多路器(MUX)等。连接头(Con)是一个连接的两端。

Core Audio APIs的使用:
<1> 音频终端设备(Audio Endpoint Device)音量、静音控制
比如控制“声音”对话框下“播放”选项卡中的“扬声器”等,“录制”选项卡中的“麦克风”、“立体声混音”等。

步骤:

  1.    得到IMMDeviceEnumerator接口。
    
  2.    遍历音频终端设备得到IMMDeviceCollection接口。
    
  3.    根据IMMDeviceCollection得到每个设备的IPropertyStore接口,从而分辨并搜索到指定的设备IMMDevice接口。
    
  4.    用IMMDevice接口激活音量、静音控制接口IAudioEndpointVolume。 
    

<2> 音频适配器设备亚单位(Subunit)的音量、静音控制
比如控制“声音”对话框下“播放”选项卡中的“扬声器”下的“CD 音频”、“麦克风”、“Fornt Pink In”等的控制。

步骤:

  1.    得到IMMDeviceEnumerator接口。
    
  2.    遍历音频终端设备得到IMMDeviceCollection接口。
    
  3.    根据IMMDeviceCollection得到每个设备的IPropertyStore接口,从而分辨并搜索到指定的设备IMMDevice接口。
    
  4.    根据IMMDevice接口和连接器接口IConnector得到音频终端设备所对应的设备适配器(adapter device)的布局接口IDeviceTopology。
    
  5.    根据IDeviceTopology接口得到指定的部分(Part)。
    
  6.    最后用得到的部分(Part)接口IPart激活音量控制接口IAudioVolumeLevel和静音控制接口IAudioMute。
    

<3> 会话(Session)音量、静音控制
比如“音量合成器”中应用程序的音量。

步骤:

  1.    得到IMMDeviceEnumerator接口。
    
  2.    根据IMMDeviceEnumerator得到默认设备的IMMDevice接口。
    
  3.    得到音频会话接口IAudioSessionManager。
    
  4.    由IAudioSessionManager接口得到IAudioSessionControl接口,该接口用来设置会话(Session)参数。
    
  5.    设置好了参数之后,在由IAudioSessionManager接口得到音频会话的音量、静音控制接口ISimpleAudioVolume,从而可以控制程序的音量、静音。
    

转自:http://kanglovepei.spaces.live.com/blog/cns!861E0583566CFC59!266.entry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

早睡早起

这两天考虑着以前工作的一些问题。有一点非常需要改正。就是作息时间不规律。经常睡的很晚。把前两年锻炼身体的老本吃的差不多了。该是“存钱”的时候了。新的工作依旧很繁忙&#xff0c;事情很多&#xff0c;但是身体调整绝对不能放松的。所以还是决定从明天开始早起&#xf…

树莓派Pico的一些有趣的基本实验

▲ 实验电路板Raspberry PI Pico小型MCU模块&#xff0c;以其价格低廉&#xff0c;功能丰富&#xff0c;开发方便为很多非电子类专业的同学进行创意项目原型设计提供了方便的平台。下面的一些实验给CDIE课程设计同学们制作的一些基本演示实验。▌01 PI Pico实验板在 RASPBERRY …

Gabor变换

gabor变换分析非平稳信号有弊端主要是时频窗宽度固定 小波wavelet a小窗窄a大窗宽 窗口或短时傅氏变换在时域上和频域上的局部化程度主要由窗函数g(x)的有效时宽Δt 和有效带宽Δf 决定。Δt 和Δf 越小, 表明局部性越好。但Heisenberg 测不准原理指出[ 6] :Δt 和Δf 不可能任…

30块钱的树莓派跑unix系统,源码全部开源,香

▌ 1、前言之前做活动抽奖送的几个树莓派&#xff0c;但是因为好几个人都没有填写地址&#xff0c;所以就只能把东西寄回来给我&#xff0c;然后手痒自己玩了下&#xff0c;觉得这个东西确实很香&#xff0c;比一般的Linux开发板都好。PICO这个开发板可以玩很多东西1 、运行pic…

CoInitialize\CoCreateGuid\CoCreateInstance

CoInitialize是Windows提供的API函数&#xff0c;用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数&#xff08;除CoGetMalloc和内存分配函数&#xff09;之前必须初始化com库。 https://baike.baidu.com/item/CoInitialize/4114580?fraladdin CoCreateGui…

产品设计体会(8001)产品经理工作手册

产品经理的工作是最具挑战性的工作之一。产品经理职责描述产品经理的全部责任在于通过了解不断变化的市场需求和优化产品推向目标市场的全过程&#xff0c;将企业的不同组成部分凝聚成一个战略上一致集中的整体&#xff0c;同时将一项产品的价值最大化。产品经理的全部职责在于…

Oracle11gR2_ADG管理之恢复主库的truncate表实战

备库开启flashback database #关闭备库的同步 SQL> alter database recover managed standby database cancel;Database altered.SQL> select flashback_on from v$database;FLASHBACK_ON ------------------ NOSQL> alter database flashback on;Database altered.SQ…

为什么大家都只谈薪资,却不谈梦想?

说个薪资的问题&#xff0c;最近在帮一个朋友物色工作&#xff0c;当然&#xff0c;除了我那个朋友以外&#xff0c;也有挺多同学向我咨询offer薪资的问题。先说我那个朋友。高中毕业后去当兵&#xff0c;服兵役结束后去4s店修车&#xff0c;我车子的很多问题也会向他咨询&…

获取指定地址的值

C语言 —— 获取指定地址的值 int b *((volatile unsigned int *)0x0028FF1C);// 0x0028FF1C就是内存中的地址&#xff0c;根据自己需要指定 #include <stdio.h> #include <stdlib.h>int main() {int b *((volatile unsigned int *)0x0028FF1C);printf("b…

IAudioEndpointVolume

IAudioEndpointVolume https://docs.microsoft.com/en-us/windows/desktop/api/endpointvolume/nf-endpointvolume-iaudioendpointvolume-setmute

DataTable.Compute功能

DataTable.Compute具有这么多的功能 1&#xff1a;聚合函数”Sum()” 2&#xff1a;自由计算表达式“20*301” 3&#xff1a;bool表达式“12” 4&#xff1a;IFF逻辑表达式” IIF(20>1000, 0, 1)” //还支持IsNull&#xff0c;Trim&#xff0c;SubString等 一个小应用&#…

Linux下查看内存使用情况方法总结

Linux下查看内存使用情况方法总结转载于:https://www.cnblogs.com/cdyboke/p/8689270.html

差生的 8 年程序员总结

今年终于从大菊花厂离职了&#xff0c;离职前收入大概60w不到吧&#xff0c;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了&#xff0c;也有更多事情做错了&#xff0c;在这里记…

关闭windows垃圾服务

Windows集成了许多功能和服务&#xff0c;所以在很多领域得以应用&#xff1b;但是有很多服务是我们个人用户所用不到的&#xff0c;开启只会浪费内存和资源&#xff0c;并且成为***和病毒***的靶子&#xff0c;而且&#xff0c;还影响启动速度和运行速度。关掉大部分没用的服务…

Python简单的抓取静态网页内容

import requests from bs4 import BeautifulSoup res requests.get(http://news.sina.com.cn/china/)#获取目标网页 res.encoding utf-8#抓取网页出现乱码 #print(res.text) soup BeautifulSoup(res.text,html.parser)#爬取网页 for news in soup.select(.news-item): if le…

SystemTray.cpp

SystemTray.cpp _tcscpy _tcscpy 把参2复制到参1并返回参1 _tcscpy是一个拷贝字符串&#xff0c;源字符串指针是strSource&#xff0c;有strcpy、wcscpy、_mbscpy三种类型&#xff0c;这三种形式都返回目标字符串。 函数原型 char *strcpy( char *strDestination, const cha…

直观感受电路信号波形:半波整流电路

前言电子电路的理论很抽象&#xff0c;所以多看电子电路的信号波形&#xff0c;对掌握理论知识非常有帮助。让我们通过形象的电路信号波形&#xff0c;直观地了解电路的世界&#xff01;半波整流电路半波整流电路&#xff0c;电路图很简单&#xff0c;通过一个二极管实现半波整…

【nodejs】安装browser-sync 遇到错误提示

首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题&#xff1a; 因为不被允许所以我只能不安装全局了&#xff1a; 但是又出现了如下的新问题 纠结了半个小时&#xff0c;终于知道为什么会出现这个问题了&#xff0c; node只有--global or -g才是全局安装的包&#x…

本机获取Intel AMT IP地址的例子

转自&#xff1a;http://software.intel.com/zh-cn/blogs/2009/02/10/intel-amt-ip/?cidsw:51cto Intel AMT的IP地址设置有两种模式&#xff1a;静态IP和动态IP。 在动态IP&#xff0c;也就是DHCP自动分配的情况下&#xff0c;本机的操作系统起来后&#xff0c;Intel AMT的I…