7

我想在 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。

4

3 回答 3

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

于 2012-10-09T07:35:16.057 回答
5

你身边有 32 位 Windows 机器吗?试一试Console.Beep();,PC 扬声器会发出哔哔声。

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

另外,如果我错了,请纠正我,但我会冒昧地猜测,每当你的电脑开机时你听到的哔哔声来自你的 BIOS,在你实际运行 Windows 8 之前。

于 2012-10-09T07:36:38.340 回答
3

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

另请参阅:SystemSounds.Beep 属性

于 2012-10-09T07:29:59.333 回答