如何在 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 下工作的类似问题,并列出了用户需要进行的更改。
我正在观看一个使用 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 下工作的类似问题,并列出了用户需要进行的更改。