所以,我做了这个小功能,它将从.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;
}
答案 0 :(得分:2)
如果您使用声音的频率,请不要损坏声卡,以赫兹为单位。在37到32,767(0x25到0x7FFF)范围内。
答案 1 :(得分:2)
我认为你不能用它破坏任何硬件,即使你的声卡没有为你的声卡编写具有宽频率范围的功能。虽然通常会以非常低的频率损坏连接的扬声器:)。
答案 2 :(得分:2)
简短回答 - 不。如果声音不正确,则可能是声卡驱动程序或可能超出范围的参数。
您尚未显示您的输入数据,但频率快速变化的非常短的时间段可能低于音乐,并且会从音调的不完整周期产生不受控制的谐波。当周期小于1 / F时尤其如此,但任何突然的频率切换都会引入产生谐波的不连续性,并且可以清楚地听到这种情况。
似乎Beep()明确定义为至少从Windows 7开始使用声卡;在此之前它将不被支持,或者将直接从定时器芯片驱动扬声器。
很久以前,所有PC计算机都共享一个通用的8254可编程间隔定时器芯片,用于生成原始声音。 Beep功能专门用于在该硬件上发出蜂鸣声。 在这些较旧的系统上,静音和音量控制对Beep没有影响;你仍会听到这种语气。要使音调静音,请使用以下命令:
net stop beep
sc config beep start = disabled
此后,声卡已成为几乎所有PC计算机的标准设备。随着声卡变得越来越普遍,制造商开始从计算机中移除旧计时器芯片。这些芯片也被排除在服务器计算机的设计之外。结果是Beep在没有芯片的所有计算机上都不起作用。这没关系,因为大多数开发人员已经开始调用MessageBeep函数,该函数使用默认声音设备而不是8254芯片。
最终由于缺乏与之通信的硬件,在Windows Vista和Windows XP 64位版本中删除了对Beep的支持。
在Windows 7中,重写了Beep以将蜂鸣声传递给会话的默认声音设备。这通常是声卡,除非在终端服务下运行,在这种情况下,蜂鸣声在客户端上呈现。