AudioDeviceDetection » History » Version 9
  Anonymous, 07/26/2010 08:54 AM 
  
| 1 | 1 | Adrian Georgescu | = Audio Device Detection = | 
|---|---|---|---|
| 2 | 2 | Adrian Georgescu | |
| 3 | 3 | Adrian Georgescu | [[TOC(Design*, AudioDeviceDetection, depth=1)]] | 
| 4 | 4 | Adrian Georgescu | |
| 5 | == Introduction == | ||
| 6 | |||
| 7 | The idea behind audio device detection is to allow SIP users to switch headphones, speakers or microphones as they are plugged or unplugged from the computer. | ||
| 8 | |||
| 9 | Many SIP applications allow this. Some require to restart the application, while others can detect it while running. SIP SIMPLE client can currently detect hotplugged devices in Mac OS X platforms. | ||
| 10 | |||
| 11 | |||
| 12 | == Goal == | ||
| 13 | |||
| 14 | The ultimate goal is to enable SIP SIMPLE client applications to detect audio device changes on the fly in all currently supported platforms, with the most immediate priority being [ticket:117 Windows platform]. | ||
| 15 | |||
| 16 | |||
| 17 | == Schematic Overview == | ||
| 18 | |||
| 19 | 8 | Adrian Georgescu | [[Image(wiki:AudioDeviceDetection:SipSimpleAudioDevicesChange.png, width=1024)]] | 
| 20 | 4 | Adrian Georgescu | |
| 21 | |||
| 22 | == Required Modifications == | ||
| 23 | |||
| 24 | 9 | Adrian Georgescu | After a first analysis of the SIP SIMPLE client SDK and dependencies, these are the necessary PortAudio code modifications: | 
| 25 | 4 | Adrian Georgescu | |
| 26 | First, it's necessary to hook up into the host OS multimedia system in order to get notified when new devices are added or old ones removed. If the OS doesn't provide a notification API, a poll loop with sensible frequency settings will need to be used. | ||
| 27 | * Currently, this is already achieved in Mac OS X through the `AudioHardwareAddPropertyListener` function in Core Audio API. | ||
| 28 | * In Windows platforms (under `WMME` hostapi), `WM_DEVICECHANGE` notification or similar methods may be used (proper research of `mmsystem` API is pending). | ||
| 29 | * Each of the rest of platforms (or corresponding hostapis) will need their own implementations too. | ||
| 30 | |||
| 31 | Second, the hostapi needs to react to the `DevicesChanged` notification, by updating the internal audio devices data (after which PortAudio will proceed to notify upper layers about the availability of a new devices list). This is achieved through the `RescanDevices` function. | ||
| 32 | * Mac OS X hostapi, Audiocore, already updates its internal devices list with `RescanDevices()`. | ||
| 33 | * Windows platform lacks such a function. [http://osdir.com/ml/audio.portaudio.devel/2007-02/msg00094.html Partial implementations] have been provided in PortAudio mailing list, but have not yet been integrated into SIP SIMPLE client official releases. | ||
| 34 | * The rest of platforms will need their own implementations too. |