如何使用PC扬声器发出哔哔声?

时间:2012-10-09 07:23:45

标签: c# hardware beep

我想用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扬声器已开启。当我启动电脑时,它会发出哔哔声。

  • 操作系统是Windows 8。

3 个答案:

答案 0 :(得分:6)

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

  

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

[...]

  

还有一些意想不到的后果。最大的问题是人们开始注意到应用程序叫做Beep()。他们将PC放置得足够远(或者有足够的环境噪音),当他们的PC发出哔哔声时他们从未注意到,直到声音从扬声器中传出来。

详情请见此处:

http://blogs.msdn.com/b/larryosterman/archive/2010/01/04/what-s-up-with-the-beep-driver-in-windows-7.aspx

答案 1 :(得分:6)

你有任何32位Windows机器吗?在其中一个上尝试Console.Beep();,PC扬声器会发出哔哔声。

在64位Windows(XP,Vista,7或8)上,驱动程序不存在,因此它将从插入机器的扬声器中取出。

另外,如果我错了,请纠正我,但我会冒这样的猜测:在你真正点击Windows 8之前,你的电脑开机时听到的嘟嘟声就是来自你的BIOS。

答案 2 :(得分:3)

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

另请参阅:SystemSounds.Beep Property