annotate src/portaudio_20161030_catalina_patch/bindings/cpp/example/devs.cxx @ 77:4edcd14160a5 pa_catalina

Duplicate for patch testing
author Chris Cannam
date Wed, 30 Oct 2019 11:25:10 +0000
parents src/portaudio_20161030/bindings/cpp/example/devs.cxx@284acf908dcd
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 }