|
|
|
@ -2,6 +2,7 @@ |
|
|
|
// Created: 2021-04-10 |
|
|
|
// Created: 2021-04-10 |
|
|
|
// Copyright(c) 2021 SimonG. All Rights Reserved. |
|
|
|
// Copyright(c) 2021 SimonG. All Rights Reserved. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using System.Linq; |
|
|
|
using System.Runtime.InteropServices; |
|
|
|
using System.Runtime.InteropServices; |
|
|
|
using Lib.Audio.Interfaces; |
|
|
|
using Lib.Audio.Interfaces; |
|
|
|
using NAudio.CoreAudioApi; |
|
|
|
using NAudio.CoreAudioApi; |
|
|
|
@ -12,34 +13,46 @@ namespace Lib.Audio |
|
|
|
{ |
|
|
|
{ |
|
|
|
private readonly AudioEndpointVolume _audioEndpointVolume; |
|
|
|
private readonly AudioEndpointVolume _audioEndpointVolume; |
|
|
|
private readonly string _name; |
|
|
|
private readonly string _name; |
|
|
|
|
|
|
|
private readonly IControllableCollector _controllableCollector; |
|
|
|
|
|
|
|
|
|
|
|
public MasterControllable(AudioEndpointVolume audioEndpointVolume, string name) |
|
|
|
public MasterControllable(AudioEndpointVolume audioEndpointVolume, string name, IControllableCollector controllableCollector) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_audioEndpointVolume = audioEndpointVolume; |
|
|
|
_audioEndpointVolume = audioEndpointVolume; |
|
|
|
_name = name; |
|
|
|
_name = name; |
|
|
|
|
|
|
|
_controllableCollector = controllableCollector; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void SetVolume(float volume) |
|
|
|
public void SetVolume(float volume) |
|
|
|
{ |
|
|
|
{ |
|
|
|
try |
|
|
|
// try |
|
|
|
{ |
|
|
|
// { |
|
|
|
_audioEndpointVolume.MasterVolumeLevelScalar = volume; |
|
|
|
// // _audioEndpointVolume.MasterVolumeLevelScalar = volume; |
|
|
|
} |
|
|
|
// MasterControllable? masterControllable = _controllableCollector.Controllables.OfType<MasterControllable>().FirstOrDefault(c => c.Equals(this)); |
|
|
|
catch (InvalidComObjectException) |
|
|
|
// if (masterControllable != null) |
|
|
|
{ |
|
|
|
// masterControllable._audioEndpointVolume.MasterVolumeLevelScalar = volume; |
|
|
|
// MasterControllable? masterControllable = _controllableCollector.Controllables.OfType<MasterControllable>().FirstOrDefault(c => c.Equals(this)); |
|
|
|
// } |
|
|
|
// if (masterControllable != null) |
|
|
|
// catch (InvalidComObjectException) |
|
|
|
// masterControllable._audioEndpointVolume.MasterVolumeLevelScalar = volume; |
|
|
|
// { |
|
|
|
} |
|
|
|
// MasterControllable? masterControllable = _controllableCollector.Controllables.OfType<MasterControllable>().FirstOrDefault(c => c.Equals(this)); |
|
|
|
catch (COMException) |
|
|
|
// if (masterControllable != null) |
|
|
|
{ |
|
|
|
// masterControllable._audioEndpointVolume.MasterVolumeLevelScalar = volume; |
|
|
|
|
|
|
|
// } |
|
|
|
} |
|
|
|
// catch (COMException) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void Mute() => _audioEndpointVolume.Mute = true; |
|
|
|
public void Mute() => _audioEndpointVolume.Mute = true; |
|
|
|
public void UnMute() => _audioEndpointVolume.Mute = false; |
|
|
|
public void UnMute() => _audioEndpointVolume.Mute = false; |
|
|
|
|
|
|
|
|
|
|
|
public override string ToString() => _name; |
|
|
|
public override string ToString() => _name; |
|
|
|
|
|
|
|
// public override bool Equals(object? obj) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// if (obj is not MasterControllable masterControllable) |
|
|
|
|
|
|
|
// return false; |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// return _name.Equals(masterControllable._name); |
|
|
|
|
|
|
|
// } |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |