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