annotate src/portaudio_20140130/bindings/cpp/example/devs.cxx @ 39:7ddb4fc30dac

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