Win的Beep()功能会损坏我的声卡吗?

Can the function Beep() from Win damage my Audio card?

本文关键字:我的 损坏 声卡 功能 Beep Win      更新时间:2023-10-16

所以,我做了这个小函数,它将从。txt文件中读取音符的频率和持续时间,并播放音符,这样我就可以播放一些小调。但有时,当演奏它们时,一些音符听起来会非常奇怪,就像扭曲的一样。显然出了问题。所以我担心,由于窗口的Beep()函数不是为此目的编写的,使用它来播放歌曲可能会损坏我的声卡。这样的事情会发生吗?下面是我使用的函数

int PlaySong()
    {
        ifstream File("Text.txt");
        if (File.is_open() == false)
            return -1;
        int F = 0;
        int D = 0;
        while (File.eof() == false)
        {
            File >> F >> D;
            Beep(F, D);
        }
        return 0;
    }

简短的回答——不。如果声音不正确,可能是声卡驱动程序或超出范围的参数。

您没有透露您的输入数据,但是非常短的时间内快速变化的频率可能比音乐少,并且从音调的不完整循环中产生不受控制的谐波。当周期小于1/F时尤其如此,但是任何突然的频率切换都会引入一个会产生谐波的不连续,并且快速地这样做会清晰地听到。

似乎Beep()至少从Windows 7开始就明确定义为与声卡一起工作;在此之前,它要么不被支持,要么直接从定时器芯片驱动扬声器。

来自MSDN Beep文档:

很久以前,所有的PC计算机都共享一个通用的8254可编程间隔定时器芯片,用于生成原始声音。Beep函数是专门为在该硬件上发出蜂鸣声而编写的。在这些旧系统上,静音和音量控制对哔声没有影响;你仍然能听到那种语气。要静音提示音,可以使用以下命令:

网停哔哔声

sc config beep start= disabled

从那时起,声卡已成为几乎所有个人电脑的标准设备。随着声卡变得越来越普遍,制造商开始从电脑中移除旧的定时器芯片。这些芯片也被排除在服务器计算机的设计之外。结果是,Beep不能在所有没有芯片的电脑上运行。这是可以的,因为大多数开发人员已经转向调用MessageBeep函数,该函数使用默认声音设备而不是8254芯片。

最终,由于缺乏可通信的硬件,对Beep的支持在Windows Vista和Windows XP 64位版中被取消。

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

不,如果你使用声音的频率,以赫兹为单位,它不会损坏声卡。从37到32,767 (0x25到0x7FFF)。

我不认为你可以损坏任何硬件,即使这个功能不是为你的声卡的目的而写的,你的声卡将有一个宽的频率范围。虽然经常播放非常低的频率有可能损坏连接的扬声器:).