Chris@4
|
1 #ifndef INCLUDED_PORTAUDIO_SYSTEM_HXX
|
Chris@4
|
2 #define INCLUDED_PORTAUDIO_SYSTEM_HXX
|
Chris@4
|
3
|
Chris@4
|
4 // ---------------------------------------------------------------------------------------
|
Chris@4
|
5
|
Chris@4
|
6 #include "portaudio.h"
|
Chris@4
|
7
|
Chris@4
|
8 // ---------------------------------------------------------------------------------------
|
Chris@4
|
9
|
Chris@4
|
10 // Forward declaration(s):
|
Chris@4
|
11 namespace portaudio
|
Chris@4
|
12 {
|
Chris@4
|
13 class Device;
|
Chris@4
|
14 class Stream;
|
Chris@4
|
15 class HostApi;
|
Chris@4
|
16 }
|
Chris@4
|
17
|
Chris@4
|
18 // ---------------------------------------------------------------------------------------
|
Chris@4
|
19
|
Chris@4
|
20 // Declaration(s):
|
Chris@4
|
21 namespace portaudio
|
Chris@4
|
22 {
|
Chris@4
|
23
|
Chris@4
|
24
|
Chris@4
|
25 //////
|
Chris@4
|
26 /// @brief System singleton which represents the PortAudio system.
|
Chris@4
|
27 ///
|
Chris@4
|
28 /// The System is used to initialize/terminate PortAudio and provide
|
Chris@4
|
29 /// a single acccess point to the PortAudio System (instance()).
|
Chris@4
|
30 /// It can be used to iterate through all HostApi 's in the System as
|
Chris@4
|
31 /// well as all devices in the System. It also provides some utility
|
Chris@4
|
32 /// functionality of PortAudio.
|
Chris@4
|
33 ///
|
Chris@4
|
34 /// Terminating the System will also abort and close the open streams.
|
Chris@4
|
35 /// The Stream objects will need to be deallocated by the client though
|
Chris@4
|
36 /// (it's usually a good idea to have them cleaned up automatically).
|
Chris@4
|
37 //////
|
Chris@4
|
38 class System
|
Chris@4
|
39 {
|
Chris@4
|
40 public:
|
Chris@4
|
41 class HostApiIterator; // forward declaration
|
Chris@4
|
42 class DeviceIterator; // forward declaration
|
Chris@4
|
43
|
Chris@4
|
44 // -------------------------------------------------------------------------------
|
Chris@4
|
45
|
Chris@4
|
46 static int version();
|
Chris@4
|
47 static const char *versionText();
|
Chris@4
|
48
|
Chris@4
|
49 static void initialize();
|
Chris@4
|
50 static void terminate();
|
Chris@4
|
51
|
Chris@4
|
52 static System &instance();
|
Chris@4
|
53 static bool exists();
|
Chris@4
|
54
|
Chris@4
|
55 // -------------------------------------------------------------------------------
|
Chris@4
|
56
|
Chris@4
|
57 // host apis:
|
Chris@4
|
58 HostApiIterator hostApisBegin();
|
Chris@4
|
59 HostApiIterator hostApisEnd();
|
Chris@4
|
60
|
Chris@4
|
61 HostApi &defaultHostApi();
|
Chris@4
|
62
|
Chris@4
|
63 HostApi &hostApiByTypeId(PaHostApiTypeId type);
|
Chris@4
|
64 HostApi &hostApiByIndex(PaHostApiIndex index);
|
Chris@4
|
65
|
Chris@4
|
66 int hostApiCount();
|
Chris@4
|
67
|
Chris@4
|
68 // -------------------------------------------------------------------------------
|
Chris@4
|
69
|
Chris@4
|
70 // devices:
|
Chris@4
|
71 DeviceIterator devicesBegin();
|
Chris@4
|
72 DeviceIterator devicesEnd();
|
Chris@4
|
73
|
Chris@4
|
74 Device &defaultInputDevice();
|
Chris@4
|
75 Device &defaultOutputDevice();
|
Chris@4
|
76
|
Chris@4
|
77 Device &deviceByIndex(PaDeviceIndex index);
|
Chris@4
|
78
|
Chris@4
|
79 int deviceCount();
|
Chris@4
|
80
|
Chris@4
|
81 static Device &nullDevice();
|
Chris@4
|
82
|
Chris@4
|
83 // -------------------------------------------------------------------------------
|
Chris@4
|
84
|
Chris@4
|
85 // misc:
|
Chris@4
|
86 void sleep(long msec);
|
Chris@4
|
87 int sizeOfSample(PaSampleFormat format);
|
Chris@4
|
88
|
Chris@4
|
89 private:
|
Chris@4
|
90 System();
|
Chris@4
|
91 ~System();
|
Chris@4
|
92
|
Chris@4
|
93 static System *instance_;
|
Chris@4
|
94 static int initCount_;
|
Chris@4
|
95
|
Chris@4
|
96 static HostApi **hostApis_;
|
Chris@4
|
97 static Device **devices_;
|
Chris@4
|
98
|
Chris@4
|
99 static Device *nullDevice_;
|
Chris@4
|
100 };
|
Chris@4
|
101
|
Chris@4
|
102
|
Chris@4
|
103 } // namespace portaudio
|
Chris@4
|
104
|
Chris@4
|
105
|
Chris@4
|
106 #endif // INCLUDED_PORTAUDIO_SYSTEM_HXX
|
Chris@4
|
107
|