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. |