To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at https://github.com/sonic-visualiser/sv-dependency-builds .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / src / portaudio_20161030_catalina_patch / bindings / cpp / example / devs.cxx @ 164:9fa11135915a

History | View | Annotate | Download (6.1 KB)

1
#include <iostream>
2
#include "portaudiocpp/PortAudioCpp.hxx"
3

    
4
#ifdef WIN32
5
#include "portaudiocpp/AsioDeviceAdapter.hxx"
6
#endif
7

    
8
// ---------------------------------------------------------------------------------------
9

    
10
void printSupportedStandardSampleRates(
11
                const portaudio::DirectionSpecificStreamParameters &inputParameters, 
12
                const portaudio::DirectionSpecificStreamParameters &outputParameters)
13
{
14
        static double STANDARD_SAMPLE_RATES[] = {
15
                8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
16
                44100.0, 48000.0, 88200.0, 96000.0, -1 }; // negative terminated list
17

    
18
        int printCount = 0;
19

    
20
        for (int i = 0; STANDARD_SAMPLE_RATES[i] > 0; ++i)
21
        {
22
                portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, STANDARD_SAMPLE_RATES[i], 0, paNoFlag);
23

    
24
                if (tmp.isSupported())
25
                {
26
                        if (printCount == 0)
27
                        {
28
                                std::cout << "    " << STANDARD_SAMPLE_RATES[i]; // 8.2
29
                                printCount = 1;
30
                        }
31
                        else if (printCount == 4)
32
                        {
33
                                std::cout << "," << std::endl;
34
                                std::cout << "    " << STANDARD_SAMPLE_RATES[i]; // 8.2
35
                                printCount = 1;
36
                        }
37
                        else
38
                        {
39
                                std::cout << ", " << STANDARD_SAMPLE_RATES[i]; // 8.2
40
                                ++printCount;
41
                        }
42
                }
43
        }
44

    
45
        if (printCount == 0)
46
                std::cout << "None" << std::endl;
47
        else
48
                std::cout << std::endl;
49
}
50

    
51
// ---------------------------------------------------------------------------------------
52

    
53
int main(int, char*[]);
54
int main(int, char*[])
55
{
56
        try
57
        {
58
                portaudio::AutoSystem autoSys;
59

    
60
                portaudio::System &sys = portaudio::System::instance();
61

    
62
                std::cout << "PortAudio version number = " << sys.version() << std::endl;
63
                std::cout << "PortAudio version text = '" << sys.versionText() << "'" << std::endl;
64

    
65
                int numDevices = sys.deviceCount();
66
                std::cout << "Number of devices = " << numDevices << std::endl;
67

    
68
                for (portaudio::System::DeviceIterator i = sys.devicesBegin(); i != sys.devicesEnd(); ++i)
69
                {
70
                        std::cout << "--------------------------------------- device #" << (*i).index() << std::endl;
71

    
72
                        // Mark global and API specific default devices:
73
                        bool defaultDisplayed = false;
74

    
75
                        if ((*i).isSystemDefaultInputDevice())
76
                        {
77
                                std::cout << "[ Default Input";
78
                                defaultDisplayed = true;
79
                        }
80
                        else if ((*i).isHostApiDefaultInputDevice())
81
                        {
82
                                std::cout << "[ Default " << (*i).hostApi().name() << " Input";
83
                                defaultDisplayed = true;
84
                        }
85

    
86
                        if ((*i).isSystemDefaultOutputDevice())
87
                        {
88
                                std::cout << (defaultDisplayed ? "," : "[");
89
                                std::cout << " Default Output";
90
                                defaultDisplayed = true;
91
                        }
92
                        else if ((*i).isHostApiDefaultOutputDevice())
93
                        {
94
                                std::cout << (defaultDisplayed ? "," : "[");
95
                                std::cout << " Default " << (*i).hostApi().name() << " Output";
96
                                defaultDisplayed = true;
97
                        }
98
                        
99
                        if (defaultDisplayed)
100
                                std::cout << " ]" << std::endl;
101

    
102
                        // Print device info:
103
                        std::cout << "Name                        = " << (*i).name() << std::endl;
104
                        std::cout << "Host API                    = " << (*i).hostApi().name() << std::endl;
105
                        std::cout << "Max inputs = " << (*i).maxInputChannels() << ", Max outputs = " << (*i).maxOutputChannels() << std::endl;
106

    
107
                        std::cout << "Default low input latency   = " << (*i).defaultLowInputLatency() << std::endl; // 8.3
108
                        std::cout << "Default low output latency  = " << (*i).defaultLowOutputLatency() << std::endl; // 8.3
109
                        std::cout << "Default high input latency  = " << (*i).defaultHighInputLatency() << std::endl; // 8.3
110
                        std::cout << "Default high output latency = " << (*i).defaultHighOutputLatency() << std::endl; // 8.3
111

    
112
#ifdef WIN32
113
                        // ASIO specific latency information:
114
                        if ((*i).hostApi().typeId() == paASIO)
115
                        {
116
                                portaudio::AsioDeviceAdapter asioDevice((*i));
117

    
118
                                std::cout << "ASIO minimum buffer size    = " << asioDevice.minBufferSize() << std::endl;
119
                                std::cout << "ASIO maximum buffer size    = " << asioDevice.maxBufferSize() << std::endl;
120
                                std::cout << "ASIO preferred buffer size  = " << asioDevice.preferredBufferSize() << std::endl;
121

    
122
                                if (asioDevice.granularity() == -1)
123
                                        std::cout << "ASIO buffer granularity     = power of 2" << std::endl;
124
                                else
125
                                        std::cout << "ASIO buffer granularity     = " << asioDevice.granularity() << std::endl;
126
                        }
127
#endif // WIN32
128

    
129
                        std::cout << "Default sample rate         = " << (*i).defaultSampleRate() << std::endl; // 8.2
130

    
131
                        // Poll for standard sample rates:
132
                        portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL);
133
                        portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL);
134

    
135
                        if (inputParameters.numChannels() > 0)
136
                        {
137
                                std::cout << "Supported standard sample rates" << std::endl;
138
                                std::cout << " for half-duplex 16 bit " << inputParameters.numChannels() << " channel input = " << std::endl;
139
                                printSupportedStandardSampleRates(inputParameters, portaudio::DirectionSpecificStreamParameters::null());
140
                        }
141

    
142
                        if (outputParameters.numChannels() > 0)
143
                        {
144
                                std::cout << "Supported standard sample rates" << std::endl;
145
                                std::cout << " for half-duplex 16 bit " << outputParameters.numChannels() << " channel output = " << std::endl;
146
                                printSupportedStandardSampleRates(portaudio::DirectionSpecificStreamParameters::null(), outputParameters);
147
                        }
148

    
149
                        if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0)
150
                        {
151
                                std::cout << "Supported standard sample rates" << std::endl;
152
                                std::cout << " for full-duplex 16 bit " << inputParameters.numChannels() << " channel input, " << outputParameters.numChannels() << " channel output = " << std::endl;
153
                                printSupportedStandardSampleRates(inputParameters, outputParameters);
154
                        }
155
                }
156

    
157
                std::cout << "----------------------------------------------" << std::endl;
158
        }
159
        catch (const portaudio::PaException &e)
160
        {
161
                std::cout << "A PortAudio error occured: " << e.paErrorText() << std::endl;
162
        }
163
        catch (const portaudio::PaCppException &e)
164
        {
165
                std::cout << "A PortAudioCpp error occured: " << e.what() << std::endl;
166
        }
167
        catch (const std::exception &e)
168
        {
169
                std::cout << "A generic exception occured: " << e.what() << std::endl;
170
        }
171
        catch (...)
172
        {
173
                std::cout << "An unknown exception occured." << std::endl;
174
        }
175

    
176
        return 0;
177
}