我想使用Steinberg的C++ ASIO SDK访问驱动程序名称列表以选择驱动程序然后加载它。所以我尝试使用 hostsample.cpp 示例来编写我的代码,它编译但不想执行:
#include <iostream>
#include <thread>
#include "asio.h"
#include "asiodrivers.h"
//----DBG MACROS----//
#define DBG(x) std::cout << #x << ": " << x << std::endl;
#define NL std::cout << std::endl; //new line
//------------------//
extern AsioDrivers *asioDrivers;
bool loadAsioDriver(char *name);
void audioTask(void)
{
auto maxDrivers {asioDrivers->asioGetNumDev()}; //The problem is here
ASIODriverInfo drvInfo{};
ASIOInit(&drvInfo);
//print info
NL;
DBG(drvInfo.asioVersion);
DBG(drvInfo.driverVersion);
DBG(drvInfo.errorMessage);
DBG(drvInfo.name);
DBG(drvInfo.sysRef);
}
int main(void)
{
std::thread audioThread(audioTask);
audioThread.join();
return 0;
}
make 命令返回:
make: *** [makefile:31: run] Error -1073741819
你能告诉我哪里出了问题以及我应该做什么吗? ASIO 文档不太用户友好...
我的配置如下:
操作系统:Windows 11
编译器:g++ (MinGW64)
编译:手工制作文件
C++版本:23
编译器标志:-Wall -Wextra -Wpedantic
我正在尝试包含其他标题,但我找不到关于此的其他主题。我也问过chatGPT,但获得正确的代码很复杂。
我找到了解决方案,要加载 ASIO 驱动程序,您必须:
asioDrivers->getDriverNames(char **names, long maxDrivers)
asioDrivers->loadDriver(char *name)
#include <iostream>
#include <thread>
#include <string>
#include <vector>
#include "asio.h"
#include "asiodrivers.h"
//----DBG MACROS----//
#define DBG_STRUCT(x) std::cout << #x << ": " << x << std::endl;
#define NL std::cout << std::endl;
//------------------//
extern AsioDrivers *asioDrivers;
void audioTask(void)
{
asioDrivers = new AsioDrivers();
//get number of devices
long deviceCount { asioDrivers->asioGetNumDev() };
//create a array of 32-char strings
std::vector<std::string> devicesNames(deviceCount, std::string(32, '\0'));
//print the index and name of each device
for(std::size_t i {0}; i < devicesNames.size(); ++i)
{
asioDrivers->asioGetDriverName(i, devicesNames[i].data(), 32);
std::cout << '[' << i << "]: " << devicesNames[i] << std::endl;
}
//select a device and load it
int index;
std::cin >> index;
asioDrivers->loadDriver(devicesNames[index].data());
delete asioDrivers;
}
int main(void)
{
std::thread audioThread(audioTask);
audioThread.join();
return 0;
}