Chris@4: #ifndef INCLUDED_PORTAUDIO_SYSTEM_HXX Chris@4: #define INCLUDED_PORTAUDIO_SYSTEM_HXX Chris@4: Chris@4: // --------------------------------------------------------------------------------------- Chris@4: Chris@4: #include "portaudio.h" Chris@4: Chris@4: // --------------------------------------------------------------------------------------- Chris@4: Chris@4: // Forward declaration(s): Chris@4: namespace portaudio Chris@4: { Chris@4: class Device; Chris@4: class Stream; Chris@4: class HostApi; Chris@4: } Chris@4: Chris@4: // --------------------------------------------------------------------------------------- Chris@4: Chris@4: // Declaration(s): Chris@4: namespace portaudio Chris@4: { Chris@4: Chris@4: Chris@4: ////// Chris@4: /// @brief System singleton which represents the PortAudio system. Chris@4: /// Chris@4: /// The System is used to initialize/terminate PortAudio and provide Chris@4: /// a single acccess point to the PortAudio System (instance()). Chris@4: /// It can be used to iterate through all HostApi 's in the System as Chris@4: /// well as all devices in the System. It also provides some utility Chris@4: /// functionality of PortAudio. Chris@4: /// Chris@4: /// Terminating the System will also abort and close the open streams. Chris@4: /// The Stream objects will need to be deallocated by the client though Chris@4: /// (it's usually a good idea to have them cleaned up automatically). Chris@4: ////// Chris@4: class System Chris@4: { Chris@4: public: Chris@4: class HostApiIterator; // forward declaration Chris@4: class DeviceIterator; // forward declaration Chris@4: Chris@4: // ------------------------------------------------------------------------------- Chris@4: Chris@4: static int version(); Chris@4: static const char *versionText(); Chris@4: Chris@4: static void initialize(); Chris@4: static void terminate(); Chris@4: Chris@4: static System &instance(); Chris@4: static bool exists(); Chris@4: Chris@4: // ------------------------------------------------------------------------------- Chris@4: Chris@4: // host apis: Chris@4: HostApiIterator hostApisBegin(); Chris@4: HostApiIterator hostApisEnd(); Chris@4: Chris@4: HostApi &defaultHostApi(); Chris@4: Chris@4: HostApi &hostApiByTypeId(PaHostApiTypeId type); Chris@4: HostApi &hostApiByIndex(PaHostApiIndex index); Chris@4: Chris@4: int hostApiCount(); Chris@4: Chris@4: // ------------------------------------------------------------------------------- Chris@4: Chris@4: // devices: Chris@4: DeviceIterator devicesBegin(); Chris@4: DeviceIterator devicesEnd(); Chris@4: Chris@4: Device &defaultInputDevice(); Chris@4: Device &defaultOutputDevice(); Chris@4: Chris@4: Device &deviceByIndex(PaDeviceIndex index); Chris@4: Chris@4: int deviceCount(); Chris@4: Chris@4: static Device &nullDevice(); Chris@4: Chris@4: // ------------------------------------------------------------------------------- Chris@4: Chris@4: // misc: Chris@4: void sleep(long msec); Chris@4: int sizeOfSample(PaSampleFormat format); Chris@4: Chris@4: private: Chris@4: System(); Chris@4: ~System(); Chris@4: Chris@4: static System *instance_; Chris@4: static int initCount_; Chris@4: Chris@4: static HostApi **hostApis_; Chris@4: static Device **devices_; Chris@4: Chris@4: static Device *nullDevice_; Chris@4: }; Chris@4: Chris@4: Chris@4: } // namespace portaudio Chris@4: Chris@4: Chris@4: #endif // INCLUDED_PORTAUDIO_SYSTEM_HXX Chris@4: