annotate src/portaudio_20161030_catalina_patch/bindings/cpp/example/devs.cxx @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents d43aab368df9
children
rev   line source
cannam@162 1 #include <iostream>
cannam@162 2 #include "portaudiocpp/PortAudioCpp.hxx"
cannam@162 3
cannam@162 4 #ifdef WIN32
cannam@162 5 #include "portaudiocpp/AsioDeviceAdapter.hxx"
cannam@162 6 #endif
cannam@162 7
cannam@162 8 // ---------------------------------------------------------------------------------------
cannam@162 9
cannam@162 10 void printSupportedStandardSampleRates(
cannam@162 11 const portaudio::DirectionSpecificStreamParameters &inputParameters,
cannam@162 12 const portaudio::DirectionSpecificStreamParameters &outputParameters)
cannam@162 13 {
cannam@162 14 static double STANDARD_SAMPLE_RATES[] = {
cannam@162 15 8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
cannam@162 16 44100.0, 48000.0, 88200.0, 96000.0, -1 }; // negative terminated list
cannam@162 17
cannam@162 18 int printCount = 0;
cannam@162 19
cannam@162 20 for (int i = 0; STANDARD_SAMPLE_RATES[i] > 0; ++i)
cannam@162 21 {
cannam@162 22 portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, STANDARD_SAMPLE_RATES[i], 0, paNoFlag);
cannam@162 23
cannam@162 24 if (tmp.isSupported())
cannam@162 25 {
cannam@162 26 if (printCount == 0)
cannam@162 27 {
cannam@162 28 std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2
cannam@162 29 printCount = 1;
cannam@162 30 }
cannam@162 31 else if (printCount == 4)
cannam@162 32 {
cannam@162 33 std::cout << "," << std::endl;
cannam@162 34 std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2
cannam@162 35 printCount = 1;
cannam@162 36 }
cannam@162 37 else
cannam@162 38 {
cannam@162 39 std::cout << ", " << STANDARD_SAMPLE_RATES[i]; // 8.2
cannam@162 40 ++printCount;
cannam@162 41 }
cannam@162 42 }
cannam@162 43 }
cannam@162 44
cannam@162 45 if (printCount == 0)
cannam@162 46 std::cout << "None" << std::endl;
cannam@162 47 else
cannam@162 48 std::cout << std::endl;
cannam@162 49 }
cannam@162 50
cannam@162 51 // ---------------------------------------------------------------------------------------
cannam@162 52
cannam@162 53 int main(int, char*[]);
cannam@162 54 int main(int, char*[])
cannam@162 55 {
cannam@162 56 try
cannam@162 57 {
cannam@162 58 portaudio::AutoSystem autoSys;
cannam@162 59
cannam@162 60 portaudio::System &sys = portaudio::System::instance();
cannam@162 61
cannam@162 62 std::cout << "PortAudio version number = " << sys.version() << std::endl;
cannam@162 63 std::cout << "PortAudio version text = '" << sys.versionText() << "'" << std::endl;
cannam@162 64
cannam@162 65 int numDevices = sys.deviceCount();
cannam@162 66 std::cout << "Number of devices = " << numDevices << std::endl;
cannam@162 67
cannam@162 68 for (portaudio::System::DeviceIterator i = sys.devicesBegin(); i != sys.devicesEnd(); ++i)
cannam@162 69 {
cannam@162 70 std::cout << "--------------------------------------- device #" << (*i).index() << std::endl;
cannam@162 71
cannam@162 72 // Mark global and API specific default devices:
cannam@162 73 bool defaultDisplayed = false;
cannam@162 74
cannam@162 75 if ((*i).isSystemDefaultInputDevice())
cannam@162 76 {
cannam@162 77 std::cout << "[ Default Input";
cannam@162 78 defaultDisplayed = true;
cannam@162 79 }
cannam@162 80 else if ((*i).isHostApiDefaultInputDevice())
cannam@162 81 {
cannam@162 82 std::cout << "[ Default " << (*i).hostApi().name() << " Input";
cannam@162 83 defaultDisplayed = true;
cannam@162 84 }
cannam@162 85
cannam@162 86 if ((*i).isSystemDefaultOutputDevice())
cannam@162 87 {
cannam@162 88 std::cout << (defaultDisplayed ? "," : "[");
cannam@162 89 std::cout << " Default Output";
cannam@162 90 defaultDisplayed = true;
cannam@162 91 }
cannam@162 92 else if ((*i).isHostApiDefaultOutputDevice())
cannam@162 93 {
cannam@162 94 std::cout << (defaultDisplayed ? "," : "[");
cannam@162 95 std::cout << " Default " << (*i).hostApi().name() << " Output";
cannam@162 96 defaultDisplayed = true;
cannam@162 97 }
cannam@162 98
cannam@162 99 if (defaultDisplayed)
cannam@162 100 std::cout << " ]" << std::endl;
cannam@162 101
cannam@162 102 // Print device info:
cannam@162 103 std::cout << "Name = " << (*i).name() << std::endl;
cannam@162 104 std::cout << "Host API = " << (*i).hostApi().name() << std::endl;
cannam@162 105 std::cout << "Max inputs = " << (*i).maxInputChannels() << ", Max outputs = " << (*i).maxOutputChannels() << std::endl;
cannam@162 106
cannam@162 107 std::cout << "Default low input latency = " << (*i).defaultLowInputLatency() << std::endl; // 8.3
cannam@162 108 std::cout << "Default low output latency = " << (*i).defaultLowOutputLatency() << std::endl; // 8.3
cannam@162 109 std::cout << "Default high input latency = " << (*i).defaultHighInputLatency() << std::endl; // 8.3
cannam@162 110 std::cout << "Default high output latency = " << (*i).defaultHighOutputLatency() << std::endl; // 8.3
cannam@162 111
cannam@162 112 #ifdef WIN32
cannam@162 113 // ASIO specific latency information:
cannam@162 114 if ((*i).hostApi().typeId() == paASIO)
cannam@162 115 {
cannam@162 116 portaudio::AsioDeviceAdapter asioDevice((*i));
cannam@162 117
cannam@162 118 std::cout << "ASIO minimum buffer size = " << asioDevice.minBufferSize() << std::endl;
cannam@162 119 std::cout << "ASIO maximum buffer size = " << asioDevice.maxBufferSize() << std::endl;
cannam@162 120 std::cout << "ASIO preferred buffer size = " << asioDevice.preferredBufferSize() << std::endl;
cannam@162 121
cannam@162 122 if (asioDevice.granularity() == -1)
cannam@162 123 std::cout << "ASIO buffer granularity = power of 2" << std::endl;
cannam@162 124 else
cannam@162 125 std::cout << "ASIO buffer granularity = " << asioDevice.granularity() << std::endl;
cannam@162 126 }
cannam@162 127 #endif // WIN32
cannam@162 128
cannam@162 129 std::cout << "Default sample rate = " << (*i).defaultSampleRate() << std::endl; // 8.2
cannam@162 130
cannam@162 131 // Poll for standard sample rates:
cannam@162 132 portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL);
cannam@162 133 portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL);
cannam@162 134
cannam@162 135 if (inputParameters.numChannels() > 0)
cannam@162 136 {
cannam@162 137 std::cout << "Supported standard sample rates" << std::endl;
cannam@162 138 std::cout << " for half-duplex 16 bit " << inputParameters.numChannels() << " channel input = " << std::endl;
cannam@162 139 printSupportedStandardSampleRates(inputParameters, portaudio::DirectionSpecificStreamParameters::null());
cannam@162 140 }
cannam@162 141
cannam@162 142 if (outputParameters.numChannels() > 0)
cannam@162 143 {
cannam@162 144 std::cout << "Supported standard sample rates" << std::endl;
cannam@162 145 std::cout << " for half-duplex 16 bit " << outputParameters.numChannels() << " channel output = " << std::endl;
cannam@162 146 printSupportedStandardSampleRates(portaudio::DirectionSpecificStreamParameters::null(), outputParameters);
cannam@162 147 }
cannam@162 148
cannam@162 149 if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0)
cannam@162 150 {
cannam@162 151 std::cout << "Supported standard sample rates" << std::endl;
cannam@162 152 std::cout << " for full-duplex 16 bit " << inputParameters.numChannels() << " channel input, " << outputParameters.numChannels() << " channel output = " << std::endl;
cannam@162 153 printSupportedStandardSampleRates(inputParameters, outputParameters);
cannam@162 154 }
cannam@162 155 }
cannam@162 156
cannam@162 157 std::cout << "----------------------------------------------" << std::endl;
cannam@162 158 }
cannam@162 159 catch (const portaudio::PaException &e)
cannam@162 160 {
cannam@162 161 std::cout << "A PortAudio error occured: " << e.paErrorText() << std::endl;
cannam@162 162 }
cannam@162 163 catch (const portaudio::PaCppException &e)
cannam@162 164 {
cannam@162 165 std::cout << "A PortAudioCpp error occured: " << e.what() << std::endl;
cannam@162 166 }
cannam@162 167 catch (const std::exception &e)
cannam@162 168 {
cannam@162 169 std::cout << "A generic exception occured: " << e.what() << std::endl;
cannam@162 170 }
cannam@162 171 catch (...)
cannam@162 172 {
cannam@162 173 std::cout << "An unknown exception occured." << std::endl;
cannam@162 174 }
cannam@162 175
cannam@162 176 return 0;
cannam@162 177 }