在Windows 7中调用Beep功能后,为什么我听不到任何声音?

时间:2012-04-22 08:58:26

标签: c++ windows winapi audio beep

我有以下代码:

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

int main(void)
{
        Beep(523, 500);
        Sleep(1000);
        return 0;
}

我正在使用MinGW和Dev-C ++编译它。我的问题是我听不到任何声音,虽然我没有收到任何错误。我有Windows 7.有什么想法吗?

1 个答案:

答案 0 :(得分:6)

打开扬声器。如果它们已经打开,请调高音量。如果您的计算机上没有安装扬声器和声卡,请先安装并安装它们,然后再尝试运行该程序。

所有这些都需要从Windows 7上的Beep function听到任何内容。It no longer plays sound from the built-in hardware system speaker.而是将声音传递给用户会话的默认声音设备。在标准的本地用户会话中,这将是您的声卡。该文档在“备注”部分解释了这一重要细节:

  

很久以前,所有PC计算机共享一个通用的8254可编程间隔定时器芯片,用于生成原始声音。 Beep函数专门用于在该硬件上发出蜂鸣声。

     

在这些较旧的系统上,静音和音量控制对Beep没有影响;你仍会听到这种语气。要使音调静音,请使用以下命令:

net stop beep  
sc config beep start= disabled
     

此后,声卡已成为几乎所有PC计算机的标准设备。随着声卡变得越来越普遍,制造商开始从计算机中移除旧计时器芯片。这些芯片也被排除在服务器计算机的设计之外。结果是Beep在没有芯片的所有计算机上都不起作用。这没关系,因为大多数开发人员已经转而调用使用默认声音设备而不是8254芯片的MessageBeep function

     

最终由于缺乏与之通信的硬件,在Windows Vista和Windows XP 64位版本中删除了对Beep的支持。

     

在Windows 7中,重写了Beep以将蜂鸣声传递给会话的默认声音设备。这通常是声卡,除非在终端服务下运行,在这种情况下,蜂鸣声在客户端上呈现。