CN109213467B - 获取音频设备声音的方法、存储介质、电子设备及系统 - Google Patents
获取音频设备声音的方法、存储介质、电子设备及系统 Download PDFInfo
- Publication number
- CN109213467B CN109213467B CN201710528359.XA CN201710528359A CN109213467B CN 109213467 B CN109213467 B CN 109213467B CN 201710528359 A CN201710528359 A CN 201710528359A CN 109213467 B CN109213467 B CN 109213467B
- Authority
- CN
- China
- Prior art keywords
- audio
- interface
- equipment
- default
- audio device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/16—Sound input; Sound output
- G06F3/162—Interface to dedicated audio devices, e.g. audio drivers, interface to CODECs
Abstract
本发明公开了一种获取音频设备声音的方法、存储介质、电子设备及系统,涉及网络直播技术领域,本发明初始化状态下捕获默认的音频设备的声音,音频设备包括输入设备和输出设备;并监控系统的音频设备是否发生改变;音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备;若是,关闭之前默认的音频设备,捕获新的有效且默认的音频设备的声音;若否,继续监控系统的音频设备是否发生改变。因此,即使用户所选定的设备并非默认设备时和系统音频设备出现变化时,均能实现正常获取音频设备声音。
Description
技术领域
本发明涉及网络直播技术领域,具体涉及一种获取音频设备声音的方法、存储介质、电子设备及系统。
背景技术
获取系统声卡和麦克风的声音是一个应用比较广泛的功能,最常见的有QQ的远程协助功能、一些监控软件以及一些直播软件、视频会议等,都会对系统声卡以及麦克风进行实时的声音采集,并利用相关的音频编码器对采集到的声卡和麦克风声音进行编码,然后利用网络进行传输。
目前在一些直播软件中,通常会首先获取系统所有的声卡输出设备和麦克风输入设备,然后在界面中展示这些设备名称,然后通过用户进行选择特定的声卡输出设备或者麦克风输入设备名称,从而对用户选定的设备进行声音的捕获,但是存在以下两点的主要缺陷:
第一点缺陷是用户可能选择的并不是默认音频设备,所谓默认音频设备就是当前正在使用并且有声音源的音频设备。音频设备包括输入设备(如麦克风)和输出设备(如声卡)。当用户选择的不是默认的声卡设备时,会导致直播出去的视频中没有系统桌面播放的声音;如果选择的不是默认的麦克风输入设备,会导致直播出去的视频中没有主播说话的声音。
第二点缺陷是即使用户所选择的设备都是默认的声卡设备和默认的麦克风设备,但是当用户在直播过程中,因为某种原因增加了一个耳机或者其它的音频设备,可能会导致系统的默认设备发生变化,使得原来的默认音频设备变成非默认音频设备,这样一来会导致在直播过程中突然没有声音。
发明内容
针对现有技术中存在的缺陷,本发明解决的技术问题为:即使用户所选定的设备并非默认音频设备时和系统音频设备出现变化时,均能实现正常获取音频设备声音。
为达到以上目的,本发明采取的技术方案是:一种获取音频设备声音的方法:
初始化状态下捕获默认的音频设备的声音,所述音频设备包括输入设备和输出设备;
监控系统的音频设备是否发生改变;
音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备;若是,关闭之前默认的音频设备,捕获新的有效且默认的音频设备的声音;若否,继续监控系统的音频设备是否发生改变。
在上述技术方案的基础上,初始化状态下捕获默认的音频设备的声音的方法包括:
获取音频设备枚举器接口;
通过音频设备枚举器接口获取当前系统的默认输入设备接口和默认输出设备接口;
通过默认输入设备接口和默认输出设备接口获取音频设备客户接口;
通过音频设备客户接口获取音频设备捕获客户接口;
通过音频设备捕获客户接口获取音频设备的声音。
在上述技术方案的基础上,通过观察者接口监听音频设备是否发生改变。
在上述技术方案的基础上,判断新的音频设备是否是有效且默认的音频设备包括:
通过观察者接口的OnDefaultDeviceChanged函数获取新的音频设备的属性参数:
若新的音频设备的属性参数的EDataFlow的值为eRender且ERole的值为eConsole,则该音频设备为新的默认的输入设备;
若新的音频设备的属性参数的EDataFlow的值为eCapture且ERole的值为eCommunications,则该音频设备为新的默认的输入设备。
在上述技术方案的基础上,若新的音频设备是有效且默认的音频设备:
通过音频设备枚举器接口获取新的默认输入设备接口或默认输出设备接口;
通过默认输入设备接口和默认输出设备接口获取音频设备客户接口;
通过音频设备客户接口获取音频设备捕获客户接口;
通过音频设备捕获客户接口获取新的音频设备的声音。
本发明还公开了一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的获取音频设备声音的方法。
本发明还公开了一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现所述的获取音频设备声音的方法。
本发明还公开了一种获取音频设备声音的系统,包括:
设备声音捕获模块,其用于初始化状态下捕获默认的音频设备的声音,所述音频设备包括输入设备和输出设备;以及判断出新的音频设备是有效且默认的音频设备时,捕获新的默认的音频设备的声音;
音频设备监控模块,其用于监控系统的音频设备是否发生改变;
音频设备判断模块,其用于音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备。
在上述技术方案的基础上,所述设备声音捕获模块还用于确认新的音频设备是有效且默认的音频设备时,调用音频设备客户接口关闭之前默认的音频设备。
在上述技术方案的基础上,所述音频设备监控模块使用观察者接口监听音频设备是否发生改变。
与现有技术相比,本发明的优点在于:
本发明初始化状态下捕获默认的音频设备的声音,并监控系统的音频设备是否发生改变;音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备;若是,关闭之前默认的音频设备,捕获新的有效且默认的音频设备的声音;若否,不做处理。因此,无论用户所选定的音频设备是否是默认音频设备,均会获取默认音频设备的声音;同时,系统音频设备出现变化时,判断新的音频设备是有效且默认的音频设备时,会获取新的默认音频设备的声音,从而实现即使用户所选定的设备并非默认音频设备时和系统音频设备出现变化时,均能实现正常获取音频设备声音。
附图说明
图1为本发明实施例中获取音频设备声音的方法的流程示意图;
图2为本发明实施例中电子设备连接框图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例提供一种获取音频设备声音的方法:
S1,初始化状态下捕获默认的音频设备的声音,音频设备包括输入设备和输出设备,即声卡和麦克风。
S2,监控系统的音频设备是否发生改变;通过观察者接口监听音频设备是否发生改变。
S3,音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备;若是,进入步骤S4;若否,返回步骤S2。
S4,关闭之前默认的音频设备,捕获新的有效且默认的音频设备的声音,返回步骤S2。
因此,无论用户所选定的音频设备是否是默认音频设备,均会获取默认音频设备的声音;同时,系统音频设备出现变化时,判断新的音频设备是有效且默认的音频设备时,会获取新的默认音频设备的声音,从而实现即使用户所选定的设备并非默认音频设备时和系统音频设备出现变化时,均能实现正常获取音频设备声音。
具体过程如下:
1、初始化状态下捕获默认的音频设备的声音的方法包括:
在声音捕获前,必须先知道当前系统默认的音频输入设备和输出设备。
(1)创建IMMDeviceEnumerator接口(音频设备枚举器接口)
获取默认设备前,必须先获取音频设备枚举器接口。利用系统API函数CoCreateInstance函数,创建一个CLSID(Class ID类标识符,用于实例化对象)为CLSID_MMDeviceEnumerator值的IMMDeviceEnumerator接口,进入下面的步骤。
(2)创建默认输入设备
创建默认的输入设备,也就是要获取一个IMMDevice接口(音频设备接口)。通过上步中获取到的设备枚举器接口,调用该接口的GetDefaultAudioEndpoint方法将eCapture值传入到该方法的第一个参数中,并将eCommunications值传入到该接口的第二个参数中,便可获取到当前系统的默认输入设备接口。
(3)创建默认输出设备
创建默认的输出设备,同样也是要获取一个IMMDevice接口(音频设备接口)。通过步骤(1)中获取到的设备枚举器接口,同样调用该接口的GetDefaultAudioEndpoint方法将eRender值传入到该方法的第一个参数中,并将eConsole值传入到该接口的第二个参数中,便可获取到当前系统的默认输出设备接口。
(4)获取IAudioClient接口(音频设备接口)
通过步骤2)中获取的系统默认出入设备接口IMMDevice,调用该接口的Activate方法获取输入设备的设备客户接口IAudioClient,同理获取输出设备的IAudioClient接口。
(5)获取IAudioCaptureClient接口(音频设备捕获客户接口)
通过上步中获取到的IAudioClient接口,调用其GetService方法获取到IAudioCaptureClient接口。之后便可以利用该接口来捕获声卡或者麦克风的声音。
(6)声音捕获
通过上步获取到的IAudioCaptureClient后,初始化捕获声卡或者麦克风的步骤已经完成,下面便是循环实时获取声音的步骤,主要是调用IAudioCaptureClient的GetNextPacketSize以检测设备中是否有数据,如果有数据则然后调用该接口的GetBuffer方法,获取设备中的声音数据。
2、判断新的音频设备是否是有效且默认的音频设备包括:
本过程中,需要知道音频设备发生切换时的消息,可以通过IMMNotificationClient接口(观察者接口)来实现,当系统发生音频设备切换时,就会触发该接口的OnDefaultDeviceChanged消息。
(1)实现IMMNotificationClient接口(观察者接口)
因为IMMNotificationClient是一个抽象类(C++中抽象类是指不能被实例化的类),所以需要被继承,并且实现其OnDefaultDeviceChanged方法,在本案中通过CDyAudioNotification类来实现该接口。
(2)注册IMMNotificationClient接口(观察者接口)
通过上步实现了IMMNotification接口后,就可以通过CDyAudioNotification类来实例化该接口,然后通过在声音捕获过程中的步骤1)中获取到的设备枚举器接口,调用该接口的RegisterEndpointNotificationCallback方法将该IMMNotificationClient接口注册到当前系统中。
(3)消息触发
当系统发生音频设备切换时,只是要设备发生了切换,都会进入到OnDefaultDeviceChanged函数中,所以必须要判断该设备是否为有效的默认设备。当进入到OnDefaultDeviceChanged函数中时,有相关的参数信息来描述该设备的属性。第一个参数是EDataFlow类型,用来标识该设备是输入设备还是输出设备,第二个参数是ERole枚举类型,用来标识该设备是否为默认设备,第三个参数是该设备的GUID(Global UniqueIDentifier)标识符。所以可以根据第一个参数的EDataFlow和第二个参数的ERole来判断该设备是否为默认设备。
a.判断是否为默认输出设备
当EDataFlow的值为eRender时,代表发生切换的是系统声卡设备,也就是输出设备,此时判断第二个参数ERole的值是否为eConsole,如果是eConsole则发生切换后的新设备就是系统默认的输出设备。
b.判断是否为默认输入设备
当EDataFlow的值为eCapture时,代表发生切换的是麦克风设备,也就是输入设备,此时判断第二个参数ERole的值是否为eCommunications,如果是eCommunications则发生切换后的新设备就是是系统默认的输入设备。
3、若新的音频设备是有效且默认的音频设备:
调用之前创建的IMMDevice、IAudioClient、IAudioCaptueClient接口的Release方法,将之前的默认音频设备关闭;
通过音频设备枚举器接口获取新的默认输入设备接口或默认输出设备接口;
通过默认输入设备接口和默认输出设备接口获取音频设备客户接口;
通过音频设备客户接口获取音频设备捕获客户接口;
通过音频设备捕获客户接口获取新的音频设备的声音。
本发明实施例还公开了一种存储介质,该存储介质上存储有计算机程序:计算机程序被处理器执行时实现获取音频设备声音的方法。需要说明的是,存储介质包括U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还公开了一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序:处理器执行计算机程序时实现获取音频设备声音的方法。
本发明实施例还公开了一种获取音频设备声音的系统,包括:
设备声音捕获模块,其用于初始化状态下捕获默认的音频设备的声音,音频设备包括输入设备和输出设备;以及判断出新的音频设备是有效且默认的音频设备时,捕获新的默认的音频设备的声音;
音频设备监控模块,其用于监控系统的音频设备是否发生改变;
音频设备判断模块,其用于音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备。
设备声音捕获模块还用于确认新的音频设备是有效且默认的音频设备时,调用音频设备客户接口关闭之前默认的音频设备。
音频设备监控模块使用观察者接口监听音频设备是否发生改变。
需要说明的是:本发明实施例提供的系统在进行模块间通信时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (6)
1.一种获取音频设备声音的方法,其特征在于:
初始化状态下捕获默认的音频设备的声音,所述音频设备包括输入设备和输出设备;其中,所述初始化状态下捕获默认的音频设备的声音的步骤,具体包括:获取音频设备枚举器接口;通过音频设备枚举器接口获取当前系统的默认输入设备接口和默认输出设备接口;通过默认输入设备接口和默认输出设备接口获取音频设备客户接口;通过音频设备客户接口获取音频设备捕获客户接口;通过音频设备捕获客户接口获取音频设备的声音;
监控系统的音频设备是否发生改变;通过观察者接口监听音频设备是否发生改变;
音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备;若是,关闭之前默认的音频设备,捕获新的有效且默认的音频设备的声音;若否,则返回所述监控系统的音频设备是否发生改变,通过观察者接口监听音频设备是否发生改变的步骤;
其中,所述判断新的音频设备是否是有效且默认的音频设备包括:
调用GetDefaultAudioEndpoint方法将音频设备的属性参数的EDataFlow的值以及ERole的值传送给设备枚举器接口;
通过观察者接口的OnDefaultDeviceChanged函数获取新的音频设备的属性参数;
若新的音频设备的属性参数的EDataFlow的值为eRender且ERole的值为eConsole,则该音频设备为新的默认的输入设备;
若新的音频设备的属性参数的EDataFlow的值为eCapture且ERole的值为eCommunications,则该音频设备为新的默认的输入设备。
2.如权利要求1所述的一种获取音频设备声音的方法,其特征在于:若新的音频设备是有效且默认的音频设备:
通过音频设备枚举器接口获取新的默认输入设备接口或默认输出设备接口;
通过默认输入设备接口和默认输出设备接口获取音频设备客户接口;
通过音频设备客户接口获取音频设备捕获客户接口;
通过音频设备捕获客户接口获取新的音频设备的声音。
3.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1或2所述的方法。
4.一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:处理器执行计算机程序时实现权利要求1或2所述的方法。
5.一种获取音频设备声音的系统,其特征在于,包括:
设备声音捕获模块,其用于初始化状态下捕获默认的音频设备的声音,所述音频设备包括输入设备和输出设备;以及判断出新的音频设备是有效且默认的音频设备时,捕获新的默认的音频设备的声音;
音频设备监控模块,其用于监控系统的音频设备是否发生改变,通过观察者接口监听音频设备是否发生改变;
音频设备判断模块,其用于音频设备发生改变时,判断新的音频设备是否是有效且默认的音频设备;
其中,所述音频设备监控模块,还用于获取音频设备枚举器接口;通过音频设备枚举器接口获取当前系统的默认输入设备接口和默认输出设备接口;通过默认输入设备接口和默认输出设备接口获取音频设备客户接口;通过音频设备客户接口获取音频设备捕获客户接口;通过音频设备捕获客户接口获取音频设备的声音;
所述音频设备监控模块还用于:调用GetDefaultAudioEndpoint方法将音频设备的属性参数的EDataFlow的值以及ERole的值传送给设备枚举器接口;通过观察者接口的OnDefaultDeviceChanged函数获取新的音频设备的属性参数;若新的音频设备的属性参数的EDataFlow的值为eRender且ERole的值为eConsole,则该音频设备为新的默认的输入设备;若新的音频设备的属性参数的EDataFlow的值为eCapture且ERole的值为eCommunications,则该音频设备为新的默认的输入设备。
6.如权利要求5所述的一种获取音频设备声音的系统,其特征在于:所述设备声音捕获模块还用于确认新的音频设备是有效且默认的音频设备时,调用音频设备客户接口关闭之前默认的音频设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710528359.XA CN109213467B (zh) | 2017-07-01 | 2017-07-01 | 获取音频设备声音的方法、存储介质、电子设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710528359.XA CN109213467B (zh) | 2017-07-01 | 2017-07-01 | 获取音频设备声音的方法、存储介质、电子设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109213467A CN109213467A (zh) | 2019-01-15 |
CN109213467B true CN109213467B (zh) | 2021-11-09 |
Family
ID=64991914
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710528359.XA Active CN109213467B (zh) | 2017-07-01 | 2017-07-01 | 获取音频设备声音的方法、存储介质、电子设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109213467B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741984A (zh) * | 2021-07-22 | 2021-12-03 | 深圳市智微智能科技股份有限公司 | Android应用层声卡指定方法、系统、终端及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101720550A (zh) * | 2007-06-28 | 2010-06-02 | 苹果公司 | 多个音频设备中音频的动态选路 |
CN103593127A (zh) * | 2013-11-25 | 2014-02-19 | 华为终端有限公司 | 音频输出设备的选择方法与终端 |
CN105407361A (zh) * | 2015-11-09 | 2016-03-16 | 广州华多网络科技有限公司 | 一种音视频直播数据的处理方法和装置 |
CN105741863A (zh) * | 2016-01-29 | 2016-07-06 | 广东欧珀移动通信有限公司 | 一种移动终端音频播放的方法和装置及移动终端 |
CN105741862A (zh) * | 2016-01-29 | 2016-07-06 | 广东欧珀移动通信有限公司 | 一种移动终端音频录入的方法和装置及移动终端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8718295B2 (en) * | 2011-04-11 | 2014-05-06 | Merry Electronics Co., Ltd. | Headset assembly with recording function for communication |
-
2017
- 2017-07-01 CN CN201710528359.XA patent/CN109213467B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101720550A (zh) * | 2007-06-28 | 2010-06-02 | 苹果公司 | 多个音频设备中音频的动态选路 |
CN103593127A (zh) * | 2013-11-25 | 2014-02-19 | 华为终端有限公司 | 音频输出设备的选择方法与终端 |
CN105407361A (zh) * | 2015-11-09 | 2016-03-16 | 广州华多网络科技有限公司 | 一种音视频直播数据的处理方法和装置 |
CN105741863A (zh) * | 2016-01-29 | 2016-07-06 | 广东欧珀移动通信有限公司 | 一种移动终端音频播放的方法和装置及移动终端 |
CN105741862A (zh) * | 2016-01-29 | 2016-07-06 | 广东欧珀移动通信有限公司 | 一种移动终端音频录入的方法和装置及移动终端 |
Also Published As
Publication number | Publication date |
---|---|
CN109213467A (zh) | 2019-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109377987B (zh) | 智能语音设备间的交互方法、装置、设备及存储介质 | |
CN108076226B (zh) | 一种通话质量调整的方法、移动终端及存储介质 | |
CN112331202B (zh) | 一种语音投屏方法及装置、电子设备和计算机可读存储介质 | |
US11200899B2 (en) | Voice processing method, apparatus and device | |
WO2013189263A1 (zh) | 在移动终端中监控api函数调用的方法和装置 | |
CN110933075A (zh) | 服务调用方法、装置、电子设备及存储介质 | |
WO2008033649A1 (en) | Adding video effects for video enabled applications | |
CN108513149A (zh) | 一种直播延迟测试方法及其装置 | |
CN108170585A (zh) | 日志处理方法、装置、终端设备及存储介质 | |
CN110881224B (zh) | 一种网络长连接方法、装置、设备及存储介质 | |
CN109213467B (zh) | 获取音频设备声音的方法、存储介质、电子设备及系统 | |
CN105183571A (zh) | 函数调用方法和装置 | |
CN111200744A (zh) | 一种多媒体播放控制方法、装置及智能设备 | |
CN108170576B (zh) | 日志处理方法、装置、终端设备及存储介质 | |
RU2641724C2 (ru) | Способ и домашний шлюз для реализации функции голосовых сообщений | |
CN107168648B (zh) | 文件存储方法、装置及终端 | |
US11418839B2 (en) | Automatic media control | |
CN114566173A (zh) | 一种音频混音方法、装置、设备及存储介质 | |
CN114760283A (zh) | 播放参数配置方法及装置 | |
CN107391128B (zh) | 监控虚拟文件对象模型vdom的方法和装置 | |
CN113163059A (zh) | 一种ippbx性能检测方法、终端设备及存储介质 | |
CN112463515A (zh) | 基于小程序的数据采集方法和装置、存储介质及电子设备 | |
CN107908802A (zh) | 日志处理方法、装置、终端设备及存储介质 | |
CN111899764B (zh) | 音频监控方法、装置、计算机设备及存储介质 | |
CN110138991B (zh) | 回音消除方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |