Project

General

Profile

AudioDeviceDetection » History » 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
== 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 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
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 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
 * The rest of platforms and hostapis will need their own implementations.