Beep函数无法播放声音
系统:Windows 10
音响类型:蓝牙音响(可正常播放除Beep以外的声音)
main.cpp:
#include "music.hpp"
#include <iostream>
using namespace std;
int main() {
Music m("1.txt");
m.play();
return 0;
}
music.hpp:
#include <Windows.h>
#include <vector>
#include <map>
#include <string>
#include <fstream>
#include <sstream>
std::map<short, short> Split(std::string str, char delim) {
std::map<short, short> result;
short cnt = 1;
std::stringstream ss(str);
std::string buffer;
while (getline(ss, buffer, delim)) {
result[cnt++] = stoi(buffer);
}
return result;
}
class Music {
private:
struct tempo {
short scale;
short size;
};
std::vector<tempo> filedata;
std::map<short, int> scaledata;
public:
void play() {
for (std::vector<tempo>::iterator it = filedata.begin(); it != filedata.end(); ++it) {
Beep(DWORD(scaledata[(*it).scale]), DWORD(((*it).size) * 200));
}
return;
}
Music (std::string filename) {
std::ifstream file;
file.open(filename);
std::string buffer;
while (getline(file, buffer)) {
tempo tmp;
std::map<short, short> tmp1 = Split(buffer, ' ');
tmp.scale = tmp1[1];
tmp.size = tmp1[2];
filedata.push_back(tmp);
}
file.close();
scaledata[-1] = 262;
scaledata[-2] = 294;
scaledata[-3] = 330;
scaledata[-4] = 349;
scaledata[-5] = 392;
scaledata[-6] = 440;
scaledata[-7] = 494;
scaledata[1] = 523;
scaledata[2] = 578;
scaledata[3] = 659;
scaledata[4] = 698;
scaledata[5] = 784;
scaledata[6] = 880;
scaledata[7] = 988;
scaledata[8] = 1046;
scaledata[9] = 1175;
scaledata[10] = 1318;
scaledata[11] = 1480;
scaledata[12] = 1568;
scaledata[13] = 1760;
scaledata[14] = 1976;
return;
}
};
1.txt:
1 2
1 2
5 2
5 2
6 2
6 2
5 4
4 2
4 2
3 2
3 2
2 2
2 2
1 4
5 2
5 2
4 2
4 2
3 2
3 2
2 4
5 2
5 2
4 2
4 2
3 2
3 2
2 4
1 2
1 2
5 2
5 2
6 2
6 2
5 4
4 2
4 2
3 2
3 2
2 2
2 2
1 4
做过的尝试 | 期望的结果 | 实际得到的结果 |
---|---|---|
重启音响 | 成功播放Beep | 无法播放Beep |
重新安装音响驱动 | 成功播放Beep | 无法播放Beep |
https://zhidao.baidu.com/question/205959374.html
WinApi 里的 Beep 操作的是主板扬声器,不是声卡(也不是 板载声卡)
主板扬声器么,就是 开机自检 听到的
哔
的那一声好像现在都不响了,大概是 BIOS 有设置,默认关闭了