C++ Win的函数Beep()会损坏我的声卡吗?

C++ Win的函数Beep()会损坏我的声卡吗?,c++,windows,winapi,audio,C++,Windows,Winapi,Audio,所以,我做了这个小功能,它可以从一个.txt文件中读取音符的频率和持续时间,然后播放音符,这样我就可以播放一些小曲子了。但有时,当播放它们时,一些音符听起来会非常怪异,就像被扭曲了一样。显然出了什么问题。所以我担心,由于windows中的Beep()函数不是为此编写的,使用它来播放歌曲可能会损坏我的声卡。这样的事情会发生吗?这是我正在使用的函数 int PlaySong() { ifstream File("\Text.txt"); if (File.is

所以,我做了这个小功能,它可以从一个.txt文件中读取音符的频率和持续时间,然后播放音符,这样我就可以播放一些小曲子了。但有时,当播放它们时,一些音符听起来会非常怪异,就像被扭曲了一样。显然出了什么问题。所以我担心,由于windows中的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;
    }

不,如果你使用的是声音的频率,以赫兹为单位,它不会损坏声卡。在37到32767(0x25到0x7FFF)的范围内。

不,如果您使用的是以赫兹为单位的声音频率,则不会损坏声卡。在37到32767(0x25到0x7FFF)的范围内。

我不认为您可以使用该功能损坏任何硬件,即使该功能不是为了使您的声卡具有较宽的频率范围而编写的。尽管经常播放非常低的频率可能会损坏连接的扬声器:)。

我不认为您可以使用该功能损坏任何硬件,即使该功能不是为了使您的声卡具有较宽的频率范围而编写的。虽然经常播放非常低的频率可能会损坏连接的扬声器:)。

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

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

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

发件人:

很久以前,所有PC机共用一个8254可编程间隔定时器芯片来产生原始声音。Beep函数是专门为在该硬件上发出嘟嘟声而编写的。 在这些较旧的系统上,静音和音量控制对蜂鸣音没有影响;你仍然可以听到这个音调。要使音调静音,请使用以下命令:

净停止嘟嘟声

sc config beep start=禁用

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

最终,由于缺乏与之通信的硬件,WindowsVista和WindowsXP64位版本中对Beep的支持被取消

在Windows 7中,重新编写了嘟嘟声,以将嘟嘟声传递给会话的默认声音设备。这通常是声卡,但在终端服务下运行时除外,在这种情况下,会在客户端上发出嘟嘟声


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

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

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

发件人:

很久以前,所有PC机共用一个8254可编程间隔定时器芯片来产生原始声音。Beep函数是专门为在该硬件上发出嘟嘟声而编写的。 在这些较旧的系统上,静音和音量控制对蜂鸣音没有影响;你仍然可以听到这个音调。要使音调静音,请使用以下命令:

净停止嘟嘟声

sc config beep start=禁用

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

最终,由于缺乏与之通信的硬件,WindowsVista和WindowsXP64位版本中对Beep的支持被取消

在Windows 7中,重新编写了嘟嘟声,以将嘟嘟声传递给会话的默认声音设备。这通常是声卡,但在终端服务下运行时除外,在这种情况下,会在客户端上发出嘟嘟声


不确定,但不是来自DirectX,它是Windows函数。您完全正确。立即修复我的问题。上的页面有一些历史记录,以及许多用户体验,包括一些声音问题的报告(例如,Beep()函数没有声音并不比Metallica歌曲严重,它不会损坏您的声卡。它会