如何在 Dev-C++ 中访问声音硬件?

How do I access Sound Hardware in Dev-C++?

我正在观看一个使用 c++ 播放音乐的视频教程:

https://www.youtube.com/watch?v=tgamhuQnOkM&t=1030s

我正在使用 Dev-C++,但我一直在头文件中收到“我不应该担心”的错误

行是:

auto d = std::find(devices.begin(), devices.end(), sOutputDevice);

错误说:

>92 68  C:\Users\benna\Documents\Starting Over\wave_music\olcNoiseMaker.h   [Error] no matching function for call to 'find(std::vector<std::basic_string<wchar_t> >::iterator, std::vector<std::basic_string<wchar_t> >::iterator, std::wstring&)'

我是菜鸟,真的不懂

我的代码是一样的,我查看了链接器项目设置和其他IDE (VS Code & Eclipse),没有任何变化。 (尤其是其他 IDE,我什至无法让它们进入 运行“Hello World”。)

我只是想通过一些小实验可以学到一些东西,但我一无所获。是我的软件有问题吗?

我认为访问我的声音硬件可能是个问题。

我还在学习中,如有任何帮助,我们将不胜感激,谢谢!

头文件在这里: https://github.com/OneLoneCoder/synth/blob/master/olcNoiseMaker.h

我的主文件是这样的:

using namespace std;

#include "olcNoiseMaker.h"

atomic<double> dFrequencyOutput = 0.0;


double MakeNoise(double dTime)
{
    return 0.5 * sin(440.0 * 2 * 3.14159 * dTime);
    //double dOutput 1.0* sin(dFrequencyOutput * 2.0 * 3.14159 * dTime);
    
    //return dOutput * 0.5;
    
    //if (dOutput > 0.0)
    //  return 0.2;
    //else
    //  return -0.2;
    
}

int main()
{
    wcout << "onelonecoder.com - Synthesizer Part 1" << endl;
    
    // Get all sound hardware
    vector<wstring> devices = olcNoiseMaker<short>::Enumerate();
    
    // Display findings
    for (auto d : devices) wcout << "Found Output Device:" << d << endl;
    
    // Create sound machine!!
    olcNoiseMaker<short> sound(devices[0], 44100, 1, 8, 512);
    
    // Link make noise function with sound machine
    sound.SetUserFunction(MakeNoise);
    
    
    while (1)
    {
        
    }
    
    return 0;
}

这是链接的 header 文件中的错误。它应该包括 <algorithm>,这是 std::find 所必需的,但没有。


我没有检查 header 文件的其余部分或您发布的代码是否存在错误,但我也注意到了

while (1)
{
    
}

没有 IO、原子、易失性或同步操作的无限循环在 C++ 中具有未定义的行为。您不能使用这样的循环来无限暂停程序或线程。


header 似乎没有在多个不同的环境中得到很好的测试。例如 this issue 提到了使其在 MinGW 下工作的类似问题,并列出了用户需要进行的更改。