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