-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathAudioController.cs
131 lines (98 loc) · 4.37 KB
/
AudioController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using AudioSwitcher.AudioApi.Observables;
namespace AudioSwitcher.AudioApi
{
public abstract class AudioController : IAudioController
{
protected const DeviceState DefaultDeviceStateFilter =
DeviceState.Active | DeviceState.Unplugged | DeviceState.Disabled;
private readonly Broadcaster<DeviceChangedArgs> _audioDeviceChanged;
protected AudioController()
{
_audioDeviceChanged = new Broadcaster<DeviceChangedArgs>();
}
public virtual IDevice DefaultPlaybackDevice => GetDefaultDevice(DeviceType.Playback, Role.Console | Role.Multimedia);
public virtual IDevice DefaultPlaybackCommunicationsDevice => GetDefaultDevice(DeviceType.Playback, Role.Communications);
public virtual IDevice DefaultCaptureDevice => GetDefaultDevice(DeviceType.Capture, Role.Console | Role.Multimedia);
public virtual IDevice DefaultCaptureCommunicationsDevice => GetDefaultDevice(DeviceType.Capture, Role.Communications);
public IObservable<DeviceChangedArgs> AudioDeviceChanged => _audioDeviceChanged.AsObservable();
public abstract IDevice GetDevice(Guid id);
public virtual Task<IDevice> GetDeviceAsync(Guid id)
{
return TaskShim.FromResult(GetDevice(id));
}
public abstract IDevice GetDevice(Guid id, DeviceState state);
public virtual Task<IDevice> GetDeviceAsync(Guid id, DeviceState state)
{
return TaskShim.FromResult(GetDevice(id, state));
}
public abstract IDevice GetDefaultDevice(DeviceType deviceType, Role role);
public virtual Task<IDevice> GetDefaultDeviceAsync(DeviceType deviceType, Role role)
{
return TaskShim.FromResult(GetDefaultDevice(deviceType, role));
}
public virtual IEnumerable<IDevice> GetDevices()
{
return GetDevices(DefaultDeviceStateFilter);
}
public virtual Task<IEnumerable<IDevice>> GetDevicesAsync()
{
return TaskShim.FromResult(GetDevices());
}
public virtual Task<IEnumerable<IDevice>> GetDevicesAsync(DeviceState state)
{
return TaskShim.FromResult(GetDevices(state));
}
public IEnumerable<IDevice> GetDevices(DeviceType deviceType)
{
return GetDevices(deviceType, DefaultDeviceStateFilter);
}
public Task<IEnumerable<IDevice>> GetDevicesAsync(DeviceType deviceType)
{
return GetDevicesAsync(deviceType, DefaultDeviceStateFilter);
}
public virtual IEnumerable<IDevice> GetDevices(DeviceState state)
{
return GetDevices(DeviceType.All, state);
}
public abstract IEnumerable<IDevice> GetDevices(DeviceType deviceType, DeviceState state);
public virtual Task<IEnumerable<IDevice>> GetDevicesAsync(DeviceType deviceType, DeviceState state)
{
return TaskShim.FromResult(GetDevices(deviceType, state));
}
public abstract IEnumerable<IDevice> GetPlaybackDevices();
public virtual Task<IEnumerable<IDevice>> GetPlaybackDevicesAsync()
{
return TaskShim.FromResult(GetPlaybackDevices());
}
public abstract IEnumerable<IDevice> GetPlaybackDevices(DeviceState deviceState);
public virtual Task<IEnumerable<IDevice>> GetPlaybackDevicesAsync(DeviceState deviceState)
{
return TaskShim.FromResult(GetPlaybackDevices(deviceState));
}
public abstract IEnumerable<IDevice> GetCaptureDevices();
public virtual Task<IEnumerable<IDevice>> GetCaptureDevicesAsync()
{
return TaskShim.FromResult(GetCaptureDevices());
}
public abstract IEnumerable<IDevice> GetCaptureDevices(DeviceState deviceState);
public virtual Task<IEnumerable<IDevice>> GetCaptureDevicesAsync(DeviceState deviceState)
{
return TaskShim.FromResult(GetCaptureDevices(deviceState));
}
public void Dispose()
{
Dispose(true);
}
protected virtual void OnAudioDeviceChanged(DeviceChangedArgs e)
{
_audioDeviceChanged.OnNext(e);
}
protected virtual void Dispose(bool disposing)
{
_audioDeviceChanged.Dispose();
}
}
}