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

如何在Windows上用C发出嘟嘟声?,c,windows,audio,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."

我正在尝试制作一个包含哔哔声的程序。我在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;
}
#包括
#包括
#包括
内部主(空)
{
嘟嘟声(750300);
printf(“\n\n\t这是Beep的虚拟程序。”);
getch();
返回0;
}
在互联网上,我读到我们也可以使用printf中的\a发出嘟嘟声。我试过了,但不起作用。我检查了我的扬声器和声卡。一切都很完美,但我没有听到嘟嘟声。即使我在示例代码中显示的方法也不起作用。

'\a'
写入标准输出会产生声音或可见的警报信号的C标准,但如果标准输出被重定向,它将不起作用。类似地,一些较新的计算机缺少Windows
Beep()
和一些终端所依赖的PC寻呼机。要使Windows PC在桌面应用程序中播放警报声音,可以调用Windows特定函数,该函数“异步”播放声音(在后台,程序继续运行)。用户可以在声音控制面板中配置与这四个值中的每一个相关联的声音

#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 */
#包括
/*在函数中包含其中一个*/
MessageBeep(MB_OK);/*播放Windows默认蜂鸣音*/
MessageBeep(MB_图标信息);/*播放星号音*/
MessageBeep(MB_i查询);/*播放问题声音*/
MessageBeep(MB_i警告);/*播放警告音*/
MessageBeep()
是在
User32.dll
中定义的,因此如果出现链接错误,请确保链接到相应的导入库。在MinGW GCC(Code::Blocks中的编译器)中,将-lUser32添加到传递给链接器的库列表中。

要使windows.h中的函数真正工作,必须在PC中安装一个“PC扬声器”蜂鸣器,如函数文档中所述。因此,您需要一台相当旧的PC,并且使用Windows XP或更旧的版本,因为在Windows Vista中对该功能的支持显然已被取消

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

MessageBeep(-1);
从MSDN文档中:

MessageBeep功能

播放波形声音。每种声音类型的波形声音为 由注册表中的条目标识

BOOL-WINAPI MessageBeep(\u In\UINT-uType)
... ... 

uType的值
0xffffff

意思:一声简单的嘟嘟声。如果 声卡不可用,声音由扬声器产生



而且,令我惊讶的是,我已经测试过了。至少Windows 7 32位(当然也包括Windows Vista)对旧的8253 I/O端口和键盘端口(可用于ring 3进程)进行了某种模拟,因此
sound()
nosound()
的旧实现应该可以工作。不幸的是,我没有任何32位的ATM机,所以我无法确认这一点。

您可以使用
\a
。至少它能在我的电脑中工作。

自Windows 7以来,在Windows中,蜂鸣音又能工作了。格式为:

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

请参见

此选项适用于使用Visual Studio 2017编译的Windows 7。没问题

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

在C语言中,不需要将
'\a'
写入标准输出即可产生音频信号。您正在寻找Windows特定的答案吗?
Beep
工作正常,但可能需要消息loopis
Beep
返回非零值?
dos.h
用于dos,不用于Windows。您尝试过:printf(“\a”);如果你坚持使用Windows,那么给未来的读者一个提示:当我快速尝试这个方法时,我得到了链接错误,并且不得不将
User32.dll
添加到链接中。大多数IDE生成的Windows项目可能都包含它,但如果没有,请找到一种方法为您的开发环境添加它(例如,我需要将
LIBS=+-lUser32
添加到我的测试项目的qmake.pro文件中)。您好,谢谢您的回答。这是否意味着与我的示例程序一样,我使用了Beep();我应该使用MessageBeep(MB_OK);要生成默认的windows beep.Hello,答案在我的程序中不起作用,因为我的编译器给出了错误-BOOL WINAPI undeclared。在我的IDE中,它不起作用。请您再次测试您的方法,以便其他用户不会得到错误的答案。我已经包含了许多标题。我甚至还包括了windows.h和dos.h。你是如何使用MessageBeep的?请从您的程序中写出使用MessageBeep的确切行。我没有使用MessageBeep作为行。我已经声明了它,然后调用它。您不必声明它。h已经声明了它。你需要的时候就打电话。问题是他们试过了,但没用。