【问题标题】:Why don't I hear any sound after calling the Beep function in Windows 7?为什么在 Windows 7 中调用 Beep 功能后听不到任何声音?
【发布时间】:2012-05-03 05:47:43
【问题描述】:

我有以下代码:

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

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

我正在使用 MinGW 和 Dev-C++ 编译它。我的问题是我什么都听不见,尽管我没有收到错误消息。我有 Windows 7。有什么想法吗?

【问题讨论】:

  • 此代码发出哔哔声。代码没有任何问题,这使它成为一个题外话问题。
  • @David:为什么跑题了?如果代码没有按照您的预期执行,即使它在语法上是有效的,那么 Stack Overflow 是否仍然可以接受?这仍然是一个关于代码的问题,我能说的最好。
  • 我同意,@Cody,但现在我们已经了解到声音控制面板也不播放声音,我们知道这是系统问题,而不是编程问题。投票转为超级用户。

标签: c++ windows winapi audio beep


【解决方案1】:

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

所有这些都是在 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 不能在所有没有芯片的计算机上工作。这没关系,因为大多数开发人员已经开始调用MessageBeep function,它使用默认声音设备而不是 8254 芯片。

最终由于缺少可与之通信的硬件,Windows Vista 和 Windows XP 64 位版中不再支持 Beep

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

【讨论】:

  • 没有任何改变。 :/ 我应该从控制面板更改默认声音中的某些内容吗?
  • @Tha:是的,接下来要看的是“声音”控制面板。确保您的系统声音未静音,Windows 音频服务正在运行,您为“默认哔声”选择了声音等。
  • 没有静音。此外,几乎所有声音、感叹号、星号等都有这个问题。当我按下“测试”时,我什么也听不到,而且如果我编写一个 C# 应用程序,并对其进行编程以显示一个带有星号的 MessageBox,我也什么也没听到。 ://
  • 嗯,确实是系统问题。我将格式化计算机,因为我还有一些其他问题。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多