/********************************************************************** Audacity: A Digital Audio Editor DeviceManager.h Created by Michael Chinen (mchinen) on 2/12/11 Audacity(R) is copyright (c) 1999-2011 Audacity Team. License: GPL v2. See License.txt. ******************************************************************//** \class DeviceManager \brief A singleton that manages the audio devices known to Audacity *//*******************************************************************/ #ifndef __AUDACITY_DEVICEMANAGER__ #define __AUDACITY_DEVICEMANAGER__ #include #include #include // to declare a custom event type #include // member variables #if defined(EXPERIMENTAL_DEVICE_CHANGE_HANDLER) #include "DeviceChange.h" #endif // Event sent to the application wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_RESCANNED_DEVICES, wxCommandEvent); typedef struct DeviceSourceMap { int deviceIndex; int sourceIndex; int hostIndex; int totalSources; int numChannels; wxString sourceString; wxString deviceString; wxString hostString; } DeviceSourceMap; AUDACITY_DLL_API wxString MakeDeviceSourceString(const DeviceSourceMap *map); class AUDACITY_DLL_API DeviceManager final #if defined(EXPERIMENTAL_DEVICE_CHANGE_HANDLER) #if defined(HAVE_DEVICE_CHANGE) : public DeviceChangeHandler #endif #endif { public: /// Gets the singleton instance static DeviceManager* Instance(); /// Gets a NEW list of devices by terminating and restarting portaudio /// Assumes that DeviceManager is only used on the main thread. void Rescan(); // Time since devices scanned in seconds. float GetTimeSinceRescan(); DeviceSourceMap* GetDefaultOutputDevice(int hostIndex); DeviceSourceMap* GetDefaultInputDevice(int hostIndex); const std::vector &GetInputDeviceMaps(); const std::vector &GetOutputDeviceMaps(); #if defined(EXPERIMENTAL_DEVICE_CHANGE_HANDLER) #if defined(HAVE_DEVICE_CHANGE) // DeviceChangeHandler implementation void DeviceChangeNotification(); #endif #endif private: std::chrono::time_point mRescanTime; protected: //private constructor - Singleton. DeviceManager(); ~DeviceManager(); /// Does an initial scan. /// Called by GetInputDeviceMaps and GetOutputDeviceMaps when needed. void Init(); DeviceSourceMap* GetDefaultDevice(int hostIndex, int isInput); bool m_inited; std::vector mInputDeviceSourceMaps; std::vector mOutputDeviceSourceMaps; static DeviceManager dm; }; #endif