-
2021-03-26 11:03:10
windows声卡实时输出电平
参考:IMMDeviceEnumerator 如何获取音频设备的名称
https://blog.csdn.net/u011417605/article/details/48630677
#include <iostream>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <Functiondiscoverykeys_devpkey.h>//PKEY_Device_FriendlyNameint main()
{
std::cout << "Hello World!\n";
CoInitialize(NULL);
IMMDeviceEnumerator* pEnum = NULL;
IMMDevice* pDevice = NULL;
IAudioMeterInformation* pMeter = NULL;
float peak;HRESULT hr;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator),
(void**)& pEnum);hr = pEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
pDevice->Activate(__uuidof(IAudioMeterInformation),
CLSCTX_ALL,
NULL,
(void**)& pMeter);UINT count = 0;
pMeter->GetMeteringChannelCount(&count);
float* peaks = new float[count];
while (true)
{
pMeter->GetChannelsPeakValues(count, peaks); // I need this value
for (int i = 0 ; i < count;i++)
{
std::cout << i + 1 << ":" << peaks[i] << "," << 10*log(peaks[i]) << "db;";
}
std::cout << "\n";Sleep(100);
}
}
更多相关内容 -
Windows下如何对声卡音频输出进行录音
2020-02-25 21:14:19对系统播放出来的声音进行录音是一个比较常见的需求,比如各类直播工具,就会把主播的声音经过麦克风采集下来,再与电脑里播放的...先看这个https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/core-audi...对系统播放出来的声音进行录音是一个比较常见的需求,比如各类直播工具,就会把主播的声音经过麦克风采集下来,再与电脑里播放的音乐合成(也就是混音),再推送到CDN,分发给观众;再比如屏幕录制也希望能够同时录制系统的声音输出。
微软提供的Core Audio APIs中的WASAPI即是用来实现这一功能的。
先看这个https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/core-audio-apis-in-windows-vista
大意是说从windows vista开始提供的这套接口,它为更高层次的接口如DirectSound和waveXxx提供基石,开放出来满足更低层的开发。
再看这个关于WASAPI的介绍:https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/wasapi?redirectedfrom=MSDN
大意是说WASAPI使得客户端的应用能够在应用与音频端点设备之间管理音频数据流,头文件Audioclient.h和Audiopolicy.h给出了WASAPI接口的定义。
再看这个https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/capturing-a-stream
讲到了客户端调用IAudioCaptureClient接口从端点缓冲中读取捕捉的数据,可以用共享模式或独占模式。介绍了IAudioClient和IAudioCaptureClient这两个接口的一些方法的使用。并且附带了一个例子,是从默认的采集设备录制音频流的,如果要捕捉声卡输出的音频流,需要将eCapture改为eRender。
再看这个关于Loopback Recording的https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/loopback-recording
在loopback模式下,WASAPI客户端能够捕捉正在被渲染端点设备播放的音频流,如何以loopback模式打开一个流。
最后提一下用到该项技术的开源软件OBS:https://github.com/obsproject/obs-studio
具体源码参考插件win-wasapi的实现。
此外还有两处文章值得参考:
1.http://blog.sina.com.cn/s/blog_bb2d37f30102xdhf.html
2.https://blog.csdn.net/u013898698/article/details/80251150
-
windows上面捕获声卡数据
2020-12-18 21:47:20转自:http://shanewfx.github.io/blog/2013/08/14/caprure-audio-on-windows/前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音。在考虑如何实现这个需求前,我们先讨论下电脑...转自:http://shanewfx.github.io/blog/2013/08/14/caprure-audio-on-windows/
前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音。
在考虑如何实现这个需求前,我们先讨论下电脑声音的三种模式:
1) render模式
该方式实际上就是播放(output)声音,常见的API如PlaySound, WaveOutXXX, DirectSound等
2) capture模式
该方式实际上就是录入(input)声音, 也就是我们通过麦克风输入声音,常见API如WaveInXXX
3)loopback模式
该方式就是我们需要实现的方式,即把扬声器里播放的声音抓取下来。
对于上面3种方式,render和capture方式应该比较好理解, 也都是系统有API直接支持的方式, loopback方式就比较奇怪了,在XP上该方式系统实际都没有正式支持, loopback的录制方式实际上也涉及到CD的版权问题。
之前一直没有研究过音频的相关技术,这次就顺便抽出一点时间去了解了一下Windows上采集音频的相关技术。
对于音频处理的技术,主要有如下几种:
采集麦克风输入
采集声卡输出
将音频数据送入声卡进行播放
对多路音频输入进行混音处理
1.Windows上音频处理的API
在Windows操作系统上,常用的音频处理技术主要包括:
Wave系列API函数、
DirectSound、
Core Audio。
其中,Core Audio只可以在Vista以上(包括Vista)的操作系统中才能使用,主要用来取代Wave系列API函数和DirectSound。
Core Audio实现的功能也比较强大,能实现对麦克风的采集、声卡输出的采集、控制声音的播放。
而Wave系列的API函数主要是用来实现对麦克风输入的采集(使用WaveIn系列API函数)和控制声音的播放(使用后WaveOut系列函数)。
DirectSound能够实现的功能估计和Wave系列API差不多,可能会更强一些(由于没有使用过DirectSound,不太肯定!)。
为了实现采集模块对操作系统的兼容性更好,基本上对麦克风输入的采集使用WaveIn系列API函数比较多;
在Windows XP系统中,没有直接提供对声卡输出进行采集的API,因此,在Windows XP要实现对声卡输出的采集会比较麻烦。
通常可选用支持混音的声卡,然后通过使用声卡的混音模块来实现采集,但并不是所有的声卡都支持混音的功能,这样的方案不具备通用性。
要实现通用性,可以采用虚拟声卡的方式来实现,从驱动层获取声卡的输出数据,但这种方案实现难度会比较大。
而在Vista以上的系统中,如Win7,则可以使用Core Audio中的API函数来实现采集声卡输出的功能。
对于混音模块的实现,目前基本是使用自定义的混音算法来完成功能,系统没有直接的API函数可供调用。
2.使用WaveIn系列API函数实现麦克风输入采集
涉及的API函数:
waveInOpen
开启音频采集设备,成功后会返回设备句柄,后续的API都需要使用该句柄
调用模块需要提供一个回调函数(waveInProc),以接收采集的音频数据
waveInClose
关闭音频采集模块
成功后,由waveInOpen返回的设备句柄将不再有效
waveInPrepareHeader
准备音频采集数据缓存的空间
waveInUnprepareHeader
清空音频采集的数据缓存
waveInAddBuffer
将准备好的音频数据缓存提供给音频采集设备
在调用该API之前需要先调用waveInPrepareHeader
waveInStart
控制音频采集设备开始对音频数据的采集
waveInStop
控制音频采集设备停止对音频数据的采集
音频采集设备采集到音频数据后,会调用在waveInOpen中设置的回调函数。
其中参数包括一个消息类型,根据其消息类型就可以进行相应的操作。
如接收到WIM_DATA消息,则说明有新的音频数据被采集到,这样就可以根据需要来对这些音频数据进行处理。
(示例以后补上)
3.使用Core Audio实现对声卡输出的捕捉
涉及的接口有:
IMMDeviceEnumerator
IMMDevice
IAudioClient
IAudioCaptureClient
主要过程:
创建多媒体设备枚举器(IMMDeviceEnumerator)
通过多媒体设备枚举器获取声卡接口(IMMDevice)
通过声卡接口获取声卡客户端接口(IAudioClient)
通过声卡客户端接口(IAudioClient)可获取声卡输出的音频参数、初始化声卡、获取声卡输出缓冲区的大小、开启/停止对声卡输出的采集
通过声卡采集客户端接口(IAudioCaptureClient)可获取采集的声卡输出数据,并对内部缓冲区进行控制
(示例以后补上)
4.常用的混音算法
混音算法就是将多路音频输入信号根据某种规则进行运算(多路音频信号相加后做限幅处理),得到一路混合后的音频,并以此作为输出的过程。
我目前还做过这一块,搜索了一下基本有如下几种混音算法:
将多路音频输入信号直接相加取和作为输出
将多路音频输入信号直接相加取和后,再除以混音通道数,防止溢出
将多路音频输入信号直接相加取和后,做Clip操作(将数据限定在最大值和最小值之间),如有溢出就设最大值
将多路音频输入信号直接相加取和后,做饱和处理,接近最大值时进行扭曲
将多路音频输入信号直接相加取和后,做归一化处理,全部乘个系数,使幅值归一化
将多路音频输入信号直接相加取和后,使用衰减因子限制幅值
下面是XP时代的Audio架构图, 该架构下audio的合成和压缩都是在系统内核里进行的:
在XP这种方式下,我们要抓去声卡播放的声音没有正规的方式, 一般来说只有2中:
一种是虚拟声卡,还有一种就是Hook audio 播放相关的API (很多时候我们会发现API hook是没有办法时的全能办法 ^_^)
但是在Vista之后,微软修改了原来的媒体架构, 以COM的方式重新封装了core audio API:
可
以看到原来Auido的API (waveXXX, mixerXXX和DirectSound)都依赖下层的新封装的Core Audio
APIs,而且这些APi都工作在用户模式, 也就是说声音的合成是在用户模式下通过软件实现的。在Vista之后,
可以看到我们可以单独控制每个应用程序的声音了, 因为每路Audio都可以工作在不同的Audio session了。通过新的Core Audio
API, 我们可以很容易的实现声卡声音的抓取
-
scream:适用于Microsoft Windows的虚拟网络声卡
2021-04-06 10:09:31Scream-适用于Microsoft Windows的虚拟网络声卡 Scream是Windows的虚拟设备驱动程序,可提供独立的声音设备。 通过此设备播放的音频以PCM多播流的形式发布在您的本地网络上。 网络上的接收器可以选择流并通过自己的... -
声卡采集 core audio api
2016-09-01 21:00:03windows 声卡采集实现 -
解决Windows 10环境下 Realtek声卡 台式机前面板插孔没有声音输出问题
2022-03-09 11:33:48华硕H410M-K主板,Windows 10下前面板耳机没有声音输出问题的解决办法问题
华硕H410M-K主板,Windows 10 ,用的是Windows 10默认自带的驱动,耳机插到前面板上没有声音,插到后面板上声音正常,Windows 10自带的检测工具提示插孔没有插入设备。
解决过程
华硕官网下载驱动:https://www.asus.com.cn/Motherboards-Components/Motherboards/PRIME/PRIME-H410M-K/HelpDesk_Download/
芯片组和声卡都需要下载
下载完成后,解压缩并安装驱动。
重新启动电脑
启动ASUS Realtek Audio Control,在“设备高级设置界面”,将“禁用前面板插孔弹出对话”设置为TRUE。
搞定。按理说,这个开关和前面板声音没什么关系,只是设置是否在前面板插入设备时弹出提示对话框用的。但既然好用了,也就不追究到底为什么了。
-
使用Voicemeeter同时输出音频到多个声卡
2020-09-24 17:47:16同时将Windows10系统的声音输出到多个声音播放设备(声卡) 实现过程 下载安装Voicemeeter这款工具(接收自愿捐助形式的免费软件,挺良心了) https://vb-audio.com/Voicemeeter/ 安装完成后需要重启一下系统 ... -
C++修改默认音频输出设备
2018-08-03 13:34:44C++修改默认音频输出设备,主要用到PolicyConfig.h这个库文件,方法网上能收到的,放到这里,只为方便自己后续使用,也方便需要的人 -
最实用的虚拟声卡-Windows安装虚拟声卡(有效解决PR音频输入,AU录音,obs多音频原控制等问题)
2021-07-14 15:57:31Windows安装虚拟声卡Voicemeeter(混音+控制面板)功能安装VBCABLE(只提供虚拟线路)功能安装效果图 Voicemeeter(混音+控制面板) 功能 一个高级音频混合器应用程序,具有用作虚拟 I/O 的虚拟音频设备,以混合和管理来自... -
怎么用ffmpeg采集声卡输出的声音呢?
2017-03-08 08:42:21windows环境,要做一个录制屏幕和声音的功能 通过gdigrap抓屏。通过dshow获取声音输入,但是声卡的声音我该怎么采集呢? -
C# Naudio 从麦克风输入到声卡输出 录音 放音功能
2020-04-23 11:04:14从麦克风输入到声卡输出,并操作数据 //创建输出对象 WaveOut waveOut = new WaveOut(); //创建输入对象 WaveIn waveIn = new WaveIn(); //创建缓冲区 BufferedWaveProvider bufferedWaveProvid... -
c# windows修改音频默认设备源码
2020-04-16 09:12:22自动获取音频输入输出设备,选择特定设备后设置成默认自动获取音频输入输出设备,选择特定设备后设置成默认自动获取音频输入输出设备,选择特定设备后设置成默认 -
修复了 DAQHWINFO:返回输入和输出声卡板的单独正确列表的功能。-matlab开发
2021-06-01 21:52:21如果您在控制面板中的 windows 多媒体设置中有多个播放/录制设备可用,并且您更改了顺序,则如果两个列表不匹配,则会出现问题。 数据采集工具箱假定输出与输入相同。 尝试在多媒体设置中选择不同的首选设备... -
windowsAPI对电脑声卡信息的采集和播放(c++)实例程序(vs2017)
2019-01-07 15:07:27这是一个采用windowsAPI对声卡信息的采集和播放的c++程序,可以直接复制使用 有任何疑问,欢迎留言讨论 #readSoundCard.cpp #include "readSoundCard.h" static unsigned char buffer[BUFFER_SIZE] =... -
虚拟声卡安装使用 虚拟声卡注意事项
2021-08-13 01:59:36虚拟声卡驱动Virtual Audio Cable这个软件可以虚拟出很多音频设备,对于没有内录功能的笔记本电脑是有用的。Virtual Audio Cable虚拟声卡驱动软件可以虚拟音频线路,用来架设虚拟线路以实现混音功能的设备,它只是起... -
windows(cmd)和linux(bash)查看显卡(系统、声卡)信息
2020-08-01 15:08:53windows 通过打开DirectX诊断工具来实现 方法一:同时按下键盘的win+r键,然后在弹出的输入框键入dxdiag然后回车 方法二:在cmd中键入dxdiag然后回车 你的系统、显卡、声卡以及其他输入设备的信息都在这里了。... -
基于CoreAudio获取声卡输出电平
2016-01-15 14:52:23我使用CoreAudio获取声卡输出电平主要是为了做类似于windows的声音指示器控件,以实现功能为准,未做深入研究。 功能使用C++实现,需要包含两个头文件 #include "Mmdeviceapi.h " #include "endpointvolume.h... -
Windows服务器怎么装虚拟声卡驱动呢
2021-01-14 14:38:34小秋哟大佬:搞了个腾讯云的Windows学生鸡小秋哟大佬:搞了个腾讯云的Windows学生鸡小秋哟大佬:想挂着刷刷酷狗听歌时长,发现断开连接以后服务器上的远程音频也会跟着断开求助大佬有没有那种虚拟声卡驱动之类的能让... -
多声卡同时发声的技术方案
2021-04-02 09:46:20在Windows操作系统下,一般只能选择一个扬声器发声音。如在Windows10中的扬声器列表如下: ...虚拟声卡的开发Windows提供了参考DEMO驱动,主要使用的是portclass进行虚拟开发。 portclass的开发相关技术资 -
指定声卡的方法
2019-08-19 11:47:44入手一块OrangePi,写了个App程序通过USB声卡来输出声音,运行alsamixer 但是选中后,关闭AlsaMixer后仍然为audiocodec 。 解决方法: vim .asoundrc defaults.ctl.card 0 defaults.pcm.card 0 其中0... -
用步进正弦激励法测量计算机声卡输出输入幅值频响函数
2019-12-04 16:23:29用步进正弦激励法测量计算机声卡输出输入幅值频响函数实验目的实验内容实验步骤实验过程实验对象分析设置代码分析实验结果改变实验条件实验结果结论 实验目的 通过对计算机声卡系统的实测加深对频响函数的理解;对... -
win 2008虚拟声卡的配置
2021-08-01 00:14:23最近在做个项目,需要有语音合成的功能,自然就想到用Windows的TTS(TextToSpeech)语音引擎。一切都是那么顺利,在本机上也测试正常,但当程序部署到服务器的时候,就报错了“oleerror ....”,正当着急万分的时候... -
Linux如何设置声卡
2021-05-08 21:38:23Linux设置声卡方法:用root登录系统,运行/usr/sbin/sndconfig,出现选择声卡类型的画面,一般声卡可以选取Sound Blaster 。选完声卡后再设置有关的资源,用TAB键结合方向键作出选择后,按OK,如果听到Linus(Linux的创始人... -
pyaudio_portaudio:一个用python记录演讲者输出的叉子。 Windows带有PortAudio的PyAudio | 扩展| 回送| ...
2021-05-10 15:10:18扩充功能: ·支持Windows声音环回:记录声卡的输出 该项目是两个开源项目的分支。 如果您愿意,请给他们一些爱: 用法 参见。 就像官方的PyAudio一样,但是带有额外的选项“ as_loopback”,该选项需要一个布尔... -
C#控制音频输出设备
2013-01-17 12:41:05C#控制 指定系统音频输出设备播放音乐,C#控制音量大小,C# 调用 winmm.dll -
Esxi虚拟机添加声卡
2021-08-07 12:37:56软件平台:VMwaer ESXI 6.0 + VMware Workstation 12 (at Windows 10 Pro)硬件平台:Intel NUC5i3RYH(服务器) + 标准Intel Z97台式机ESXI下使用音频有两种方式,其一是使用映射的方式将PCI或USB声卡映射到... -
搞定unraid直通核显给WIN10后黑屏、声卡无输出问题
2021-01-17 15:52:06搞定unraid直通核显给WIN10后黑屏、声卡无输出问题2020-12-28 18:45:019点赞67收藏18评论你是AMD Yes党?还是intel和NVIDIA的忠实簇拥呢?最新一届#装机大师赛#开始啦!本次装机阵营赛分为3A红组、intel NVIDIA蓝绿... -
Win10声卡驱动升级
2022-02-09 16:53:57每次Win10声卡驱动升级之后,就没有电脑声音,再次记录配置方法。 1.检查,驱动安装Realted High Definition Audio没问题,扬声器(Realted High Definition Audio)显示未插入。 2. 打开“声音管理器” 的 “设备... -
声卡是什么,详细教您怎么查看自己电脑的声卡
2021-06-18 12:06:24声卡也叫音频卡,实现声波/数字信号之间的相互转换,有时候电脑会出现没有声音输出,很多是因为声卡出现了问题,那么如何查看电脑的声卡呢?下面,小编给大家讲解查看自己电脑的声卡的方法了。刚买来的电脑总要对其... -
带USB接口的PCM2702声卡制作
2020-10-21 16:47:00声卡不再是一个复杂的问题。如果您使用Burr Brown的/德州仪器的芯片PCM2702...此声卡可以从USB端口供电,并有一个立体声输出。你不需要安装任何Windows XP和Vista的驱动程序,因为他们已经在里面。这是真正的即插即用。