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