annotate src/portaudio_20161030_catalina_patch/bindings/cpp/example/devs.cxx @ 83:ae30d91d2ffe

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