我想使用C#中的PC扬声器发出蜂鸣声。使用以下代码时:
[DllImport("kernel32.dll", EntryPoint = "Beep", SetLastError = true,
ExactSpelling = true)]
public static extern bool Beep(uint frequency, uint duration);
static void Main()
{
while (true)
{
Beep(1000, 500);
Thread.Sleep(2000);
}
}
而不是通过PC扬声器发出蜂鸣声,它只是将给定频率和持续时间的声音输出到默认声音设备(例如,耳机)。使用Console.Beep()
时也会发生同样的事情。
为什么?
注意:
PC扬声器已打开。当我启动PC时,它会发出蜂鸣声。
操作系统是Windows 8。
您周围有32位Windows计算机吗?在其中之一上尝试Console.Beep();
,PC扬声器将发出蜂鸣声。
在64位Windows(XP,Vista,7或8)上,没有执行此操作的驱动程序,因此它将从插入本机的扬声器中出来。
也请纠正我,如果我错了,但我可能会猜测,每当打开PC时,您听到的哔哔声都是在您实际按下Windows 8之前通过BIOS发出的。
从Windows 7开始,您不再可以通过内置扬声器轻松发出声音。
对于Windows 7,我们已完全解决了该问题–我们将Beep.Sys中曾经包含的所有功能移到了用户模式系统声音代理中–现在,当您调用Beep()API而不是操纵8254芯片时,呼叫被重新路由到实际播放声音的用户模式代理中。
[…]
还有一些意想不到的后果。最大的是,人们开始注意到名为Beep()的应用程序。他们将PC放置的距离足够远(或有足够的环境噪音),直到他们的扬声器开始发出声音时,他们才注意到PC发出蜂鸣声。
请参阅此处了解详细信息:
例如,您可以使用SystemSounds.Beep
:SystemSounds.Beep.Play();