如何在 Windows Vista 中模拟/替换/重新启用经典混音器控件(或命令)?
我有一个问题(并且已经有一段时间了)——Vista 中的新混音器堆栈具有新的很酷的功能,但也重新发明了轮子。 许多过去在 Windows 系统上使用音量混合器将不同的语音输出混合到一个输入中的应用程序(例如 Wave-out + Line-in --> Stereo Mix)现已停止工作。 此行为的主要示例是 Shoutcast DSP 插件(可能对解决方案测试有用)。
如何重新启用 XP 混音器控件,或者以某种方式模拟此行为,以便程序 (SC DSP) 可以正确管理麦克风/线路输入播放音量以及波形输出播放音量?
我的想法是模拟一个连接到 Vista 混音器的程序,用于波形输出和线路输出(或麦克风扬声器音量 - 所有播放,显示为单独的可调节“程序”,以便 Vista 混音器可以参考它)并将其“挂钩”到系统中的某种模拟下,将其自身表示为程序的旧音量混合器控制接口,但坦率地说,我不知道该怎么做。
澄清一下:这不是我的电脑(它是 HP Pavilion 笔记本电脑)。 该问题的存在似乎主要是由于 Vista 混音器控制单独的程序,而不是单独的输入/输出。 该硬件完全能够满足使用 Windows XP 时的需要。 我很清楚这是一个驱动程序问题,但驱动程序只是为 Vista 通过接口呈现给程序员的内容而准备的。 混音器设备(如在操作系统中看到的,但在软件中可能看起来一样)基于用于 Windows 音频控制的混音器 API。
在 Vista 上使用 Google 和线路输入播放音量控制进行搜索,以获取有关该问题的更多信息(以及受该问题影响的用户数量)。 当然,为 WinAMP 重写 Shoutcast Source DSP 插件就可以解决问题,但这不太可能发生......
I have a problem (and have been having it for some time now) -- the new sound mixer stack in Vista features new cool things, but also re-invents the wheel. Many applications that used to use Volume Mixer on a Windows system to mix different voiced outputs into one input (for example Wave-out + Line-in --> Stereo Mix) have since stopped working. The prime example of this behavior is the Shoutcast DSP plugin (could be useful for solution testing).
How Can I re-enable XP-mixer controls, or maybe emulate this behavior somehow, so that the program (SC DSP) can properly manage Microphone/Line-In playback volume along with Wave-out playback volume?
My thinking would be to emulate a program hooked-in into the Vista Mixer for Wave-Out and Line-out (or Mic speaker volume -- all playback, shown as separate adjustable "programs" so that the Vista Mixer could refer to it) and 'hook' it into the system under some emulation representing itself as the old volume mixer control interface for the program, but I frankly have no idea how to do that.
To clarify: this is not my PC (it is a HP Pavilion laptop). The problem seems to exist mostly due to the fact that Vista mixer controls separate programs, not separate inputs/outputs. The hardware is fully capable of doing what is needed when using Windows XP. I am well aware of the fact that this is a driver issue, but the driver is simply prepared for what Vista presents to the programmer through interfaces. The mixer device - as seen in the operating system, however it might look in software - is based on the mixer APIs for Windows Audio control.
Search using Google on Vista and line-in playback volume control for more info on the problem (and the sheer amount of users affected by it). Of course, a re-write of the Shoutcast Source DSP plug-in for WinAMP would do the trick, but that is not likely to happen...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
确实如此,但从 SP2 中包含的 Vista SP1 补丁 KB957388 开始,对于某些声卡驱动程序,当应用程序处于 XP 兼容模式时,旧的混音器 API (winmm.dll) 函数可能会挂起。 特别是,mixerGetNumDevs 和不太常见的 MixerOpen 在某些计算机上不会返回。
我收到了大约 200 名 Vista 用户中的 5 名 Vista 用户的报告,其中我的应用程序在启动时挂起,并且我已追踪到这些功能挂起。
我想向 Microsoft 报告此问题,但找不到任何地方可以这样做。
我现在所能做的就是在不启用兼容模式的情况下发布我的软件,但这会失去我的应用程序中的功能,并且该软件无法控制线路输入或麦克风混音器。
我没有时间直接使用低级 API 函数。 我依赖于高级组件,但我无法为我的开发系统(Delphi)找到任何新的音频 API。
我有兴趣花钱请人为我编写一个 DLL!
电子邮件 ross att stationplaylist dot com
This is true, but as of Vista SP1 patch KB957388, included in SP2, and with some soundcard drivers, the old mixer API (winmm.dll) functions can hang when the app is in XP compatibility mode. In particular, mixerGetNumDevs and less often mixerOpen will not return on some computers.
I've got reports from 5 Vista users out of around 200 Vista users in total where my app hangs when starting up, and I have tracked it down to these functions hanging.
I would like to report this to Microsoft but cannot find anywhere to do so.
All I can do now is release my software without compatibility mode enabled, but this loses functionality in my app, and the software cannot control the line-in or microphone mixers.
I don't have time to work with low level API functions directly. I rely on high level components, and I cannot find any for the new audio API's for my development system (Delphi).
I would be interested in paying someone to write a DLL for me!!!
e mail ross att stationplaylist dott com
如果您将应用程序标记为在 Windows XP 兼容性中运行,那么所有旧的控件和行为都将恢复。
If you mark your app as running in Windows XP compatibility, then all the old controls and behaviors will come back.
音频驱动程序控制哪些混音器控件可用,这在很大程度上取决于硬件的功能。
如果 Vista 驱动程序没有某些控件,那么这很可能是该驱动程序的缺陷,而不是 Vista 的缺陷。
(请告诉我们您正在使用哪个声卡/设备。)
可以编写一个程序来创建您自己的混音器控件(这将是虚拟声卡的纯软件驱动程序),但该程序不会如果实际驱动程序没有对此进行混音器控制,则能够影响设备内部的音频路由。
The audio driver controls which mixer controls are available, and this will depend largely on the capabilities of the hardware.
If the Vista driver doesn't have certain controls, then it's likely to be a shortcoming of that driver and not of Vista.
(Please tell us which sound card/device you are using.)
It would be possible to write a program to create your own mixer controls (this would be a software-only driver for a virtual sound card), but this program wouldn't be able to affect the audio routing inside the device if the actual driver doesn't have some mixer control for this.
可以使用音频 EndPoint API
这应该允许您调整主音量以及连接的音频输入的音量。 一个问题是,当您枚举端点时,如果声卡上没有插入麦克风,则不会枚举任何内容。 这意味着您需要更改应用程序以响应“麦克风已插入”事件,并适当地通知用户。
另一种选择是深入 Microsoft Core Audio 并访问 WaveRT直接司机。 这比使用 WASAPI/Endpoint API 的工作量要大得多,但可以让您最大程度地控制对声卡输入/输出的访问。
Controlling the volume levels of a soundcards indivudual input/output levels in Windows Vista mixer is possible using the audio EndPoint API
This should allow you to adjust the main volume, and the volume of and connected audio inputs. One wrinkle about this that when you enumerate the end points, if there isn't a microphone plugged into your soundcard, then nothing will be enumerated. This means you'll need to change your application to respond to "microphone plugged in" events, and notify the user appropriately.
Another option is to dip below the Microsoft Core Audio and access the WaveRT driver directly. This is a lot more work than using the WASAPI/Endpoint APIs, but will give you the most control over access to the inputs/outputs of the soundcard.