我真的很想看到一个独占模式的audio应用程序的一个明确的例子,它从input线(而不是麦克风)的input在一定的input电平(音量),并做到这一点绝对最低限度。 (C ++首选,但任何事情都比没有好)
这听起来应该很简单,但是要弄清楚如何一直非常困难。
例如,微软的设备拓扑结构文档使得听起来就好像你拥有简单的通用audio硬件(就像大多数桌面电脑一样),而你只想设置音量,静音或者select频道,那么你就不用担心设备拓扑,因为设备拓扑API用于更复杂的设备。
那太棒了,但是它并没有提到如何提出其他问题:有没有标准的普通台式电脑audio,似乎总是提供扬声器,线路和麦克风? 由于这样的标准,线路input和麦克风总是混合还是复用? 此设备拓扑文档中的图表示复用; 我有旧的mixerXXX()代码我试图升级,表明混合。
如何检测是否有任何声音在Windows XP机器上播放
如何使用虚拟audio设备驱动程序在RDP会话中将audio从服务器redirect到客户端?
在内部扬声器播放声音,并可能使用旧的XP APIfunction?
Windows 10audioinput设备设置存储在哪里?
此外,有关端点音量控制的进一步阅读表明,这可能是使用IAudioEndpointVolume接口可以实现的,但Win 7.1 SDK中的audio示例没有提供具有input设备的IAudioEndpointVolume示例。 有关各个IAudioEndpointVolumefunction的文档说明支持input和输出(“进入或离开audio端点设备的audiostream”),但这些function似乎都不支持多路复用,并且再次指示线路input和话筒信号的混合。
如何输出MP3到声卡
学习embedded式固件黑客
如何在Linux中使用C语言来发音?
如何在linux / c ++中控制主音量?
与旧的waveXXX()和mixerXXX() API相比,这些API复杂,混乱,有时甚至在事情发生变化时甚至无法工作,新的Core Audio API(通常称为WASAPI)仍然复杂且令人困惑,预测一个变化和网络化的世界。 所以在这个层面上,这是重大的进步。 但是在这个世界上仍然存在着一个巨大的多样化的音频世界,为所有人创造所有的例子是不切实际的。
如果您想要一个最简单的例子,请先下载Windows SDK,查看音频示例(可能是CaptureSharedEventDriven或CaptureSharedTimerDriven ),然后开始删除一些在您的上下文中无关紧要的内容。 重构仍然是一个很好的练习,以确保你了解正在发生什么,以及你有什么选择。 例如,如果你真的需要独占捕获(你呢?),你将需要相应地改变IAudioClient::Initialize()参数。
要设置输入音量级别,请查看EndpointVolume示例。 你会发现这个和其他的例子都是从选择端点设备开始的。 之后,您将激活IAudioEndpointVolume接口,并使用它设置所需的音量,这样代码将很容易识别并复制到重构的示例中。
但是,出于神秘的原因,在某些硬件(至少我的)线路输入将不被IMMDeviceEnumerator实例列为音频端点,除非有物理插入线路输入插孔…而麦克风输入将发现不管是什么或不插入它。 这强调了Windows音频的复杂性和混乱性,并导致了这样的问题 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。