AudioDeviceDetection
Version 11 (Anonymous, 08/14/2010 12:32 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 | 4 | Adrian Georgescu | == Introduction == |
6 | 4 | Adrian Georgescu | |
7 | 4 | Adrian Georgescu | 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 | 4 | Adrian Georgescu | |
9 | 4 | Adrian Georgescu | 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 | 4 | Adrian Georgescu | |
11 | 4 | Adrian Georgescu | |
12 | 4 | Adrian Georgescu | == Goal == |
13 | 4 | Adrian Georgescu | |
14 | 4 | Adrian Georgescu | 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 | 4 | Adrian Georgescu | |
16 | 4 | Adrian Georgescu | |
17 | 4 | Adrian Georgescu | == Schematic Overview == |
18 | 4 | Adrian Georgescu | |
19 | 8 | Adrian Georgescu | [[Image(wiki:AudioDeviceDetection:SipSimpleAudioDevicesChange.png, width=1024)]] |
20 | 4 | Adrian Georgescu | |
21 | 4 | Adrian Georgescu | |
22 | 4 | Adrian Georgescu | == Required Modifications == |
23 | 4 | Adrian Georgescu | |
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 | 4 | Adrian Georgescu | 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 | 4 | Adrian Georgescu | * Currently, this is already achieved in Mac OS X through the `AudioHardwareAddPropertyListener` function in Core Audio API. |
28 | 11 | Adrian Georgescu | * In Windows platforms (under `WMME` hostapi), `WM_DEVICECHANGE` OS messages are used. |
29 | 4 | Adrian Georgescu | * Each of the rest of platforms (or corresponding hostapis) will need their own implementations too. |
30 | 4 | Adrian Georgescu | |
31 | 4 | Adrian Georgescu | 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 | 10 | Adrian Georgescu | * Mac OS X hostapi, Core Audio, already updates its internal devices list with `RescanDevices()`. |
33 | 11 | Adrian Georgescu | * Windows WMME hostapi includes its own `RescanDevices()` function, based on the [http://osdir.com/ml/audio.portaudio.devel/2007-02/msg00094.html implementation] provided in PortAudio mailing list. |
34 | 11 | Adrian Georgescu | * The rest of platforms and hostapis will need their own implementations. |