diff --git a/dep/Makefile b/dep/Makefile index 6ffba4e0..9b0a99d7 100755 --- a/dep/Makefile +++ b/dep/Makefile @@ -202,7 +202,7 @@ $(rtmidi): | rtmidi $(MAKE) -C rtmidi $(MAKE) -C rtmidi install -RTAUDIO_FLAGS += -DRTAUDIO_BUILD_STATIC_LIBS=ON -DRTAUDIO_BUILD_TESTING=OFF +RTAUDIO_FLAGS += -DBUILD_SHARED_LIBS=OFF ifdef ARCH_LIN RTAUDIO_FLAGS += -DRTAUDIO_API_ALSA=ON -DRTAUDIO_API_JACK=ON -DRTAUDIO_API_PULSE=ON -DRTAUDIO_API_OSS=OFF endif diff --git a/dep/rtaudio b/dep/rtaudio index ece277bd..b09307ac 160000 --- a/dep/rtaudio +++ b/dep/rtaudio @@ -1 +1 @@ -Subproject commit ece277bd839603648c80c8a5f145678e13bc23f3 +Subproject commit b09307ac19de6c51c6410c35f655aad031133d75 diff --git a/src/rtaudio.cpp b/src/rtaudio.cpp index 09686a3b..6b6ab915 100644 --- a/src/rtaudio.cpp +++ b/src/rtaudio.cpp @@ -58,9 +58,9 @@ struct RtAudioDevice : audio::Device { try { // Query device ID deviceInfo = rtAudio->getDeviceInfo(deviceId); - if (!deviceInfo.probed) { - throw Exception("Failed to query RtAudio %s device %d", RTAUDIO_API_NAMES.at(api).c_str(), deviceId); - } + // if (!deviceInfo.probed) { + // throw Exception("Failed to query RtAudio %s device %d", RTAUDIO_API_NAMES.at(api).c_str(), deviceId); + // } openStream(); } @@ -225,7 +225,7 @@ struct RtAudioDriver : audio::Driver { // deviceId -> Device std::map devices; RtAudio* rtAudio = NULL; - std::vector deviceInfos; + // std::vector deviceInfos; RtAudioDriver(RtAudio::Api api) { this->api = api; @@ -238,17 +238,17 @@ struct RtAudioDriver : audio::Driver { rtAudio->showWarnings(false); // Cache DeviceInfos for performance and stability (especially for ASIO). - if (api == RtAudio::WINDOWS_WASAPI || api == RtAudio::WINDOWS_ASIO || api == RtAudio::WINDOWS_DS) { - int count = rtAudio->getDeviceCount(); - for (int deviceId = 0; deviceId < count; deviceId++) { - RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); - INFO("Found RtAudio %s device %d: %s (%d in, %d out)", RTAUDIO_API_NAMES.at(api).c_str(), deviceId, deviceInfo.name.c_str(), deviceInfo.inputChannels, deviceInfo.outputChannels); - deviceInfos.push_back(deviceInfo); - } - - delete rtAudio; - rtAudio = NULL; - } + // if (api == RtAudio::WINDOWS_WASAPI || api == RtAudio::WINDOWS_ASIO || api == RtAudio::WINDOWS_DS) { + // int count = rtAudio->getDeviceCount(); + // for (int deviceId = 0; deviceId < count; deviceId++) { + // RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + // INFO("Found RtAudio %s device %d: %s (%d in, %d out)", RTAUDIO_API_NAMES.at(api).c_str(), deviceId, deviceInfo.name.c_str(), deviceInfo.inputChannels, deviceInfo.outputChannels); + // deviceInfos.push_back(deviceInfo); + // } + + // delete rtAudio; + // rtAudio = NULL; + // } } ~RtAudioDriver() { @@ -262,61 +262,50 @@ struct RtAudioDriver : audio::Driver { } std::vector getDeviceIds() override { - int count = 0; + std::vector deviceIds; if (rtAudio) { - count = rtAudio->getDeviceCount(); + for (unsigned int id : rtAudio->getDeviceIds()) { + deviceIds.push_back(id); + } } else { - count = deviceInfos.size(); + // TODO } - - std::vector deviceIds; - for (int i = 0; i < count; i++) - deviceIds.push_back(i); return deviceIds; } std::string getDeviceName(int deviceId) override { if (rtAudio) { - int count = rtAudio->getDeviceCount(); - if (0 <= deviceId && deviceId < count) { - RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + if (deviceInfo.ID > 0) return deviceInfo.name; - } } else { - if (0 <= deviceId && deviceId < (int) deviceInfos.size()) - return deviceInfos[deviceId].name; + // TODO } return ""; } int getDeviceNumInputs(int deviceId) override { if (rtAudio) { - int count = rtAudio->getDeviceCount(); - if (0 <= deviceId && deviceId < count) { - RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + if (deviceInfo.ID > 0) return deviceInfo.inputChannels; - } } else { - if (0 <= deviceId && deviceId < (int) deviceInfos.size()) - return deviceInfos[deviceId].inputChannels; + // TODO } return 0; } int getDeviceNumOutputs(int deviceId) override { if (rtAudio) { - int count = rtAudio->getDeviceCount(); - if (0 <= deviceId && deviceId < count) { - RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(deviceId); + if (deviceInfo.ID > 0) return deviceInfo.outputChannels; - } } else { - if (0 <= deviceId && deviceId < (int) deviceInfos.size()) - return deviceInfos[deviceId].outputChannels; + // TODO } return 0; }