AudioDeviceDetection » History » Version 5
Anonymous, 07/25/2010 12:23 PM
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 | 5 | Adrian Georgescu | [[Image(wiki:AudioDeviceDetection:SipSimpleAudioDevicesChange.png)]] |
20 | 4 | Adrian Georgescu | |
21 | |||
22 | == Required Modifications == |
||
23 | |||
24 | After a first analysis of the SIP SIMPLE client SDK, these are the necessary code modifications: |
||
25 | |||
26 | === PortAudio modifications === |
||
27 | |||
28 | 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. |
||
29 | * Currently, this is already achieved in Mac OS X through the `AudioHardwareAddPropertyListener` function in Core Audio API. |
||
30 | * In Windows platforms (under `WMME` hostapi), `WM_DEVICECHANGE` notification or similar methods may be used (proper research of `mmsystem` API is pending). |
||
31 | * Each of the rest of platforms (or corresponding hostapis) will need their own implementations too. |
||
32 | |||
33 | 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. |
||
34 | * Mac OS X hostapi, Audiocore, already updates its internal devices list with `RescanDevices()`. |
||
35 | * 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. |
||
36 | * The rest of platforms will need their own implementations too. |
||
37 | |||
38 | === SIP SIMPLE client modifications === |
||
39 | |||
40 | The Windows version of SIP SIMPLE client SDK may need some very minor tweaks. |
||
41 | |||
42 | At first sight, `AudioDevicesDidChange` and `DefaultAudioDeviceDidChange` observers have to be added to `Application` implementation. |