如何在Windows上用C发出哔声?

时间:2015-04-07 14:19:33

标签: c windows audio

我正在尝试制作一个包含哔声的程序。我在32位Windows Vista上工作。我正在使用在GNU编译器上运行的Code :: Blocks IDE。我的示例代码是 -

#include <stdio.h>
#include <windows.h>
#include <dos.h>

int main(void)
{
    Beep(750, 300);
    printf("\n \n \t This is a dummy program for Beep.");
    getch();

    return 0;
}

在互联网上,我读到我们也可以在printf中使用\ a来发出哔哔声。我试过了,但它没有用。我检查了我的扬声器和声卡。一切都很完美,但我听不到哔哔声。即使我在示例代码中显示的方法也不起作用。

6 个答案:

答案 0 :(得分:7)

'\a'写入标准输出的C标准recommends会产生声音或可见警报信号,但如果重定向标准输出则不起作用。同样,一些较新的计算机缺少Windows Beep()和某些终端所依赖的PC蜂鸣器。要使Windows PC在桌面应用程序中播放警报声,您可以调用Windows特定的MessageBeep功能,该功能可以播放声音并且异步地播放声音。 (在程序继续运行的后台)。用户可以在声音控制面板中配置与这四个值中的每一个相关联的声音。

#include <windows.h>

/* Include one of these in a function */
MessageBeep(MB_OK);              /* play Windows default beep */
MessageBeep(MB_ICONINFORMATION); /* play asterisk sound */
MessageBeep(MB_ICONQUESTION);    /* play question sound */
MessageBeep(MB_ICONWARNING);     /* play warning sound */
{p> MessageBeep()User32.dll中定义,因此如果这会给您带来链接错误,请确保您链接到相应的导入库。在MinGW GCC(Code :: Blocks中的编译器)中,将-lUser32添加到传递给链接器的库列表中。

答案 1 :(得分:1)

MessageBeep(-1);

来自MSDN文档:

  

MessageBeep功能

     

播放波形声音。每种声音类型的波形声音是   通过注册表中的条目识别。

     

BOOL WINAPI MessageBeep( _In_ UINT uType );   ......

     

uType的价值:0xFFFFFFFF

     

含义:一声简单的哔哔声。如果   声卡不可用,声音是使用扬声器产生的。


另外,令我惊讶的是,我已经测试过了。至少Windows 7 32位(以及Windows Vista肯定也是)对旧的8253 I / O端口和键盘端口进行某种仿真,可用于响铃3进程,因此sound()和{{nosound()的旧实现1}}应该工作。不幸的是,我还没有任何32位机器可用ATM,所以我无法证实这一点。

答案 2 :(得分:0)

要使windows.h中的Beep()功能真正起作用,您必须在PC中安装“PC扬声器”蜂鸣器,如功能文档中所述。因此,您需要拥有相当旧的PC以及Windows XP或更早版本,因为在Windows Vista中显然已删除对该功能的支持。

在较新的Windows版本中,使用声卡拨打Beep()会在扬声器中发出蜂鸣声。如果您没有收到任何哔声,则可能与程序无关,但可能与您的特定计算机硬件无关。

答案 3 :(得分:0)

从Windows 7开始,

Beep在Windows中再次起作用。格式为:

Beep(frequency, duration) where frequency is the pitch in hertz, and duration is the length in milliseconds

请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms679277(v=vs.85).aspx

答案 4 :(得分:0)

此方法在使用Visual Studio 2017编译的Windows 7上有效。与此无关。

printf("\n Bad request - check status code parameter\a");

答案 5 :(得分:-1)

您可以使用\a。至少它可以在我的电脑上运行。