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