在内置扬声器上播放声音以及使用旧的xp api功能的可能性?

时间:2012-04-18 19:51:39

标签: c++ windows audio windows-7 beep

Windows Vista发布后,Windows功能Beep会在连接的扬声器上发出蜂鸣声而不是内部扬声器。

无论如何都要访问旧功能?是否有可能通过在旧的Windows API中保留?或者还有其他方法可以实现这一目标吗?如果是这样,我希望能够同时设置频率和持续时间。

我应该提一下,我实际上是针对windows xp平台。

2 个答案:

答案 0 :(得分:6)

没有。该函数在Kernel32.dll中实现,该内核在运行时从您当前运行的任何OS版本加载。由于代码不在您的可执行文件或系统DLL中,因此您无法运行它(甚至不考虑从不同的操作系统版本复制Kernel32.dll,这只是为了解决问题)。

您可以尝试使用MessageBeep代替Beep,但这样可以减少对输出的控制,并且可能仍会使用您的声卡而不是内部

有关MessageBeep函数的有趣历史记录,请参阅Larry Osterman's blog

答案 1 :(得分:2)

现在大多数计算机都没有内置扬声器,因此无法访问。

根据Larry Osterman's blog,在Windows 7中故意删除了该功能;来自档案馆的this post专门讨论了这个问题。似乎Beep.sys已被删除,并且旧的伪设备驱动程序的功能已更改为故意将声音重定向到声卡。从历史的角度来看,这篇文章很有意思。

Larry是一名MS员工,为Vista和Win7开发了新的音频框架,他从恐龙时代起就一直在MS(MS-DOS至少:D),所以他可能知道。 :)