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