我为我的客户开发了一个非常复杂的音频软件,带有Winamp,Windows Media Player和VST的插件。现在客户对某些方法感兴趣,以避免维护大量的插件,我们无法支持那里的所有媒体播放器。
客户端还不关心Unix / Mac,所以我只能看看Windows XP和Vista / 7 / 基本上,我们需要的是一种始终可靠地拦截尽可能多的音频流协议的方法(好吧,除了ASIO,这是另一个故事,我猜),然后通过我们的自定义效果引擎传递此音频,然后路由回默认值音频设备,无论它是什么。
现在我在想,我有什么选择(理论上)。
我可以使用钩子。我需要挂钩全球旧的vaweOut和DirectSound。
但是这仍然适用于Vista / 7吗?
我可以使用虚拟驱动程序,就像虚拟音频电缆的作者那样: http://software.muzychenko.net/eng/vac.htm
似乎是一项非常艰巨的任务。无论如何,客户将联系VAC的作者,看他是否同意以合理的价格出售他的源代码。
此驱动程序可以将自身安装为默认音频输出设备,拦截来自Windows的音频流,并将其传递回默认设备。嗯,但是各种DirectSound音频缓冲区怎么样,我自己要混合它们还是有什么方法可以告诉Windows混音器为我混合所有并传递单个混合音频流? 看来,这个自定义驱动程序当然会扼杀所有硬件音频加速,但如果我们向客户发出关于此问题的警告,我们可以接受这一点。
据我所知,最新的Windows驱动程序标准是WDF。
但是它可能不适用于Windows Vista / 7上的音频? 我知道,Vista / 7有一个与XP不同的音频堆栈。
如果我可以使用WDF,我应该写什么驱动程序 - 内核模式或用户模式?
也许我错过了在Windows上截取,处理和路由音频的更优雅和简单的选项?
答案 0 :(得分:1)
尝试虚拟音频流媒体SDK。 Alsa虚拟声卡,让您实时读取/处理音频数据。