如何使用PC扬声器发出蜂鸣声?

问题描述 投票:8回答:3

我想使用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。

c# hardware beep
3个回答
6
投票

您周围有32位Windows计算机吗?在其中之一上尝试Console.Beep();,PC扬声器将发出蜂鸣声。

在64位Windows(XP,Vista,7或8)上,没有执行此操作的驱动程序,因此它将从插入本机的扬声器中出来。

也请纠正我,如果我错了,但我可能会猜测,每当打开PC时,您听到的哔哔声都是在您实际按下Windows 8之前通过BIOS发出的。


6
投票

从Windows 7开始,您不再可以通过内置扬声器轻松发出声音。

对于Windows 7,我们已完全解决了该问题–我们将Beep.Sys中曾经包含的所有功能移到了用户模式系统声音代理中–现在,当您调用Beep()API而不是操纵8254芯片时,呼叫被重新路由到实际播放声音的用户模式代理中。

[…]

还有一些意想不到的后果。最大的是,人们开始注意到名为Beep()的应用程序。他们将PC放置的距离足够远(或有足够的环境噪音),直到他们的扬声器开始发出声音时,他们才注意到PC发出蜂鸣声。

请参阅此处了解详细信息:

https://docs.microsoft.com/en-us/archive/blogs/larryosterman/whats-up-with-the-beep-driver-in-windows-7


3
投票

例如,您可以使用SystemSounds.BeepSystemSounds.Beep.Play();

另请参见:SystemSounds.Beep Property

© www.soinside.com 2019 - 2024. All rights reserved.