Тут только только часть кода которая показывает, как выбрать устройство вывода не по умолчанию в Audiere без написания каких-либо циклов for или разветвлений if. Я решил сделать это через <алгоритм> из STL
#include <audiere.h>
#include <vector>
#include <string>
#include <algorithm>
#ifdef _WIN32
#include <objbase.h>
#endif
int main() {
#ifdef _WIN32
CoInitialize(nullptr);
#endif
std::vector<audiere::AudioDeviceDesc> devices;
devices.reserve(8);
audiere::GetSupportedAudioDevices(devices);
auto it = std::find_if(
devices.begin(), devices.end(),
[](auto const& desc){ return desc.name == "MyDesiredDeviceName"; }
);
audiere::AudioDevicePtr device(
audiere::OpenDevice(
it != devices.end() ? it->name.c_str() : nullptr,
/* parameters = */ nullptr
)
);
if (!device) {
// Реализуй свою уже логику обработки ошибок...
return -1;
}
auto sound = audiere::OpenSound(device, "music.ogg", true);
sound->play();
// ... Далее уже реализуй свою логику программы ...
return 0;
}