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

Function GetDefaultAudioDeviceConfiguration

examples/src/Examples.hpp:12–57  ·  view source on GitHub ↗

Returns input, output

Source from the content-addressed store, hash-verified

10
11// Returns input, output
12inline std::pair<AudioStreamConfig, AudioStreamConfig>
13 GetDefaultAudioDeviceConfiguration(const bool with_input = true)
14{
15 AudioStreamConfig inputConfig;
16 AudioStreamConfig outputConfig;
17
18 const std::vector<AudioDeviceInfo> audioDevices = lab::MakeAudioDeviceList();
19 const AudioDeviceIndex default_output_device = lab::GetDefaultOutputAudioDeviceIndex();
20 const AudioDeviceIndex default_input_device = lab::GetDefaultInputAudioDeviceIndex();
21
22 AudioDeviceInfo defaultOutputInfo, defaultInputInfo;
23 for (auto & info : audioDevices) {
24 if (info.index == default_output_device.index)
25 defaultOutputInfo = info;
26 else if (info.index == default_input_device.index)
27 defaultInputInfo = info;
28 }
29
30 if (defaultOutputInfo.index != -1) {
31 outputConfig.device_index = defaultOutputInfo.index;
32 outputConfig.desired_channels = std::min(uint32_t(2), defaultOutputInfo.num_output_channels);
33 outputConfig.desired_samplerate = defaultOutputInfo.nominal_samplerate;
34 }
35
36 if (with_input) {
37 if (defaultInputInfo.index != -1) {
38 inputConfig.device_index = defaultInputInfo.index;
39 inputConfig.desired_channels = std::min(uint32_t(1), defaultInputInfo.num_input_channels);
40 inputConfig.desired_samplerate = defaultInputInfo.nominal_samplerate;
41 }
42 else {
43 throw std::invalid_argument("the default audio input device was requested but none were found");
44 }
45 }
46
47 // RtAudio doesn't support mismatched input and output rates.
48 // this may be a pecularity of RtAudio, but for now, force an RtAudio
49 // compatible configuration
50 if (defaultOutputInfo.nominal_samplerate != defaultInputInfo.nominal_samplerate) {
51 float min_rate = std::min(defaultOutputInfo.nominal_samplerate, defaultInputInfo.nominal_samplerate);
52 inputConfig.desired_samplerate = min_rate;
53 outputConfig.desired_samplerate = min_rate;
54 printf("Warning ~ input and output sample rates don't match, attempting to set minimum");
55 }
56 return {inputConfig, outputConfig};
57}
58
59struct ex_devices : public labsound_example {
60 virtual void play(int argc, char ** argv) override final

Callers 15

playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85
playMethod · 0.85

Calls 3

MakeAudioDeviceListFunction · 0.85

Tested by

no test coverage detected