Beep函数无法播放声音,如何解决?

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
阅读 1.4k
2 个回答

https://zhidao.baidu.com/question/205959374.html

WinApi 里的 Beep 操作的是主板扬声器,不是声卡(也不是 板载声卡)

主板扬声器么,就是 开机自检 听到的 的那一声
好像现在都不响了,大概是 BIOS 有设置,默认关闭了

给一个建议,直接调用
Beep(4000, 2000);
看看是否有声音,,,,如果是笔记本电脑,会在音频中输出、而不是PC喇叭,那要检查还是禁音或耳机。

推荐问题