MCPcopy Create free account
hub / github.com/LabSound/LabSound / MakeAudioDeviceList

Method MakeAudioDeviceList

src/backends/RtAudio/AudioDevice_RtAudio.cpp:24–76  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22////////////////////////////////////////////////////
23
24std::vector<AudioDeviceInfo> AudioDevice::MakeAudioDeviceList()
25{
26 std::vector<std::string> rt_audio_apis{
27 "unspecified",
28 "linux_alsa",
29 "linux_pulse",
30 "linux_oss",
31 "unix_jack",
32 "macos_coreaudio",
33 "windows_wasapi",
34 "windows_asio",
35 "windows_directsound",
36 "rtaudio_dummy"};
37
38 RtAudio rt;
39 if (rt.getDeviceCount() <= 0) throw std::runtime_error("no rtaudio devices available!");
40
41 const auto api_enum = rt.getCurrentApi();
42 LOG_INFO("using rtaudio api %s", rt_audio_apis[static_cast<int>(api_enum)].c_str());
43
44 auto to_flt_vec = [](const std::vector<unsigned int> & vec) {
45 std::vector<float> result;
46 for (auto & i : vec) result.push_back(static_cast<float>(i));
47 return result;
48 };
49
50 std::vector<AudioDeviceInfo> devices;
51 for (uint32_t i = 0; i < rt.getDeviceCount(); ++i)
52 {
53 RtAudio::DeviceInfo info = rt.getDeviceInfo(i);
54
55 if (info.probed)
56 {
57 AudioDeviceInfo lab_device_info;
58 lab_device_info.index = i;
59 lab_device_info.identifier = info.name;
60 lab_device_info.num_output_channels = info.outputChannels;
61 lab_device_info.num_input_channels = info.inputChannels;
62 lab_device_info.supported_samplerates = to_flt_vec(info.sampleRates);
63 lab_device_info.nominal_samplerate = static_cast<float>(info.preferredSampleRate);
64 lab_device_info.is_default_output = info.isDefaultOutput;
65 lab_device_info.is_default_input = info.isDefaultInput;
66
67 devices.push_back(lab_device_info);
68 }
69 else
70 {
71 LOG_ERROR("probing failed %s", info.name.c_str());
72 }
73 }
74
75 return devices;
76}
77
78AudioDeviceIndex AudioDevice::GetDefaultOutputAudioDeviceIndex() noexcept
79{

Callers

nothing calls this directly

Calls 3

getDeviceCountMethod · 0.45
getCurrentApiMethod · 0.45
getDeviceInfoMethod · 0.45

Tested by

no test coverage detected