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