Win的Beep()功能会损坏我的声卡吗?
Can the function Beep() from Win damage my Audio card?
所以,我做了这个小函数,它将从。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)。
我不认为你可以损坏任何硬件,即使这个功能不是为你的声卡的目的而写的,你的声卡将有一个宽的频率范围。虽然经常播放非常低的频率有可能损坏连接的扬声器:).
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 我的 c 字符串复制函数正在损坏其他变量的堆栈
- 对于我的类函数,我得到双重释放或损坏错误
- 为什么我的作业操作员给出了损坏错误
- 此英特尔至强 mov 指令如何损坏我的应用内存?
- 为什么我的visual c++在堆栈损坏的情况下没有触发堆栈损坏错误
- 为什么我的输出损坏了
- 我的数据库的最终值在快速排序后损坏
- 我找不到导致我的数组在运行两次案例并退出后损坏的错误
- 损坏的HTML - 浏览器不会从我的网络服务器下载整个HTTP响应,CURL可以
- Bii 代码似乎损坏了我的 cmake
- 我的 QNX/BB10 C++应用程序崩溃,一个简单的C++对象似乎已损坏
- 我的双向链表中的查找函数损坏
- Win的Beep()功能会损坏我的声卡吗?