【问题标题】:How to beep using PC speaker?如何使用 PC 扬声器发出蜂鸣声?
【发布时间】:2012-09-29 11:28:42
【问题描述】:

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

【问题讨论】:

    标签: c# hardware beep


    【解决方案1】:

    从 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

    【讨论】:

    • 很棒的博客文章,但也许​​这只是我的电气工程师;)
    【解决方案2】:

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

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

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

    【讨论】:

    • +1 也表示,对于 windows 8 32bit,pc beep 也使用声卡。我拥有一台 32 位机器,所以我根据经验说话。
    【解决方案3】:

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

    另请参阅:SystemSounds.Beep Property

    【讨论】:

    • 尽管这不能回答 OP 的确切问题,但这给了我一个简单请求的答案:我可以通过 .NET 纯粹以编程方式使用的快速小声音。谢谢,埃克!
    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多