Refactor some of the dmps audio changes

This commit is contained in:
Alex Johnson
2021-10-27 10:18:54 -04:00
parent 32443a2102
commit 0ecf593e44

View File

@@ -38,34 +38,31 @@ namespace PepperDash.Essentials.DM
if (card is Card.Dmps3ProgramOutput) if (card is Card.Dmps3ProgramOutput)
{ {
MasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Master) MasterVolumeLevel = new DmpsAudioOutputWithMixer(card, eDmpsLevelType.Master, (card as Card.Dmps3ProgramOutput).OutputMixer);
{
Mixer = (card as Card.Dmps3ProgramOutput).OutputMixer
};
SourceVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Source); SourceVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Source);
MicsMasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.MicsMaster); MicsMasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.MicsMaster);
Codec1VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec1); Codec1VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec1);
Codec2VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec2); Codec2VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec2);
((DmpsAudioOutputWithMixer)MasterVolumeLevel).GetVolumeMax();
((DmpsAudioOutputWithMixer)MasterVolumeLevel).GetVolumeMin();
} }
else if (card is Card.Dmps3Aux1Output) else if (card is Card.Dmps3Aux1Output)
{ {
MasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Master) MasterVolumeLevel = new DmpsAudioOutputWithMixer(card, eDmpsLevelType.Master, (card as Card.Dmps3Aux1Output).OutputMixer);
{
Mixer = (card as Card.Dmps3Aux1Output).OutputMixer
};
SourceVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Source); SourceVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Source);
MicsMasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.MicsMaster); MicsMasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.MicsMaster);
Codec2VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec2); Codec2VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec2);
((DmpsAudioOutputWithMixer)MasterVolumeLevel).GetVolumeMax();
((DmpsAudioOutputWithMixer)MasterVolumeLevel).GetVolumeMin();
} }
else if (card is Card.Dmps3Aux2Output) else if (card is Card.Dmps3Aux2Output)
{ {
MasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Master) MasterVolumeLevel = new DmpsAudioOutputWithMixer(card, eDmpsLevelType.Master, (card as Card.Dmps3Aux2Output).OutputMixer);
{
Mixer = (card as Card.Dmps3Aux2Output).OutputMixer
};
SourceVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Source); SourceVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Source);
MicsMasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.MicsMaster); MicsMasterVolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.MicsMaster);
Codec1VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec1); Codec1VolumeLevel = new DmpsAudioOutput(card, eDmpsLevelType.Codec1);
((DmpsAudioOutputWithMixer)MasterVolumeLevel).GetVolumeMax();
((DmpsAudioOutputWithMixer)MasterVolumeLevel).GetVolumeMin();
} }
else //Digital Outputs else //Digital Outputs
{ {
@@ -145,18 +142,20 @@ namespace PepperDash.Essentials.DM
case DMOutputEventIds.MinVolumeFeedBackEventId: case DMOutputEventIds.MinVolumeFeedBackEventId:
{ {
Debug.Console(2, this, "MinVolumeFeedBackEventId: {0}", args.Index); Debug.Console(2, this, "MinVolumeFeedBackEventId: {0}", args.Index);
if (MasterVolumeLevel != null) var level = MasterVolumeLevel as DmpsAudioOutputWithMixer;
if (level != null)
{ {
MasterVolumeLevel.GetVolumeMin(); level.GetVolumeMin();
} }
break; break;
} }
case DMOutputEventIds.MaxVolumeFeedBackEventId: case DMOutputEventIds.MaxVolumeFeedBackEventId:
{ {
Debug.Console(2, this, "MaxVolumeFeedBackEventId: {0}", args.Index); Debug.Console(2, this, "MaxVolumeFeedBackEventId: {0}", args.Index);
if (MasterVolumeLevel != null) var level = MasterVolumeLevel as DmpsAudioOutputWithMixer;
if (level != null)
{ {
MasterVolumeLevel.GetVolumeMax(); level.GetVolumeMax();
} }
break; break;
} }
@@ -232,6 +231,38 @@ namespace PepperDash.Essentials.DM
trilist.SetBoolSigAction(volumeUpJoin, output.VolumeUp); trilist.SetBoolSigAction(volumeUpJoin, output.VolumeUp);
trilist.SetBoolSigAction(volumeDownJoin, output.VolumeDown); trilist.SetBoolSigAction(volumeDownJoin, output.VolumeDown);
trilist.OnlineStatusChange += (a, b) => output.VolumeLevelFeedback.FireUpdate();
trilist.OnlineStatusChange += (a, b) => output.VolumeLevelScaledFeedback.FireUpdate();
}
}
public class DmpsAudioOutputWithMixer : DmpsAudioOutput
{
CrestronControlSystem.Dmps3OutputMixerWithMonoAndStereo Mixer;
public DmpsAudioOutputWithMixer(Card.Dmps3OutputBase output, eDmpsLevelType type, CrestronControlSystem.Dmps3OutputMixerWithMonoAndStereo mixer)
: base(output, type)
{
Mixer = mixer;
}
public void GetVolumeMin()
{
MinLevel = (short)Mixer.MinVolumeFeedback.UShortValue;
if (VolumeLevelScaledFeedback != null)
{
VolumeLevelScaledFeedback.FireUpdate();
}
}
public void GetVolumeMax()
{
MaxLevel = (short)Mixer.MaxVolumeFeedback.UShortValue;
if (VolumeLevelScaledFeedback != null)
{
VolumeLevelScaledFeedback.FireUpdate();
}
} }
} }
@@ -241,10 +272,9 @@ namespace PepperDash.Essentials.DM
eDmpsLevelType Type; eDmpsLevelType Type;
UShortInputSig Level; UShortInputSig Level;
public short MinLevel { get; private set; } protected short MinLevel { get; set; }
public short MaxLevel { get; private set; } protected short MaxLevel { get; set; }
public CrestronControlSystem.Dmps3OutputMixerWithMonoAndStereo Mixer { get; set; }
public BoolFeedback MuteFeedback { get; private set; } public BoolFeedback MuteFeedback { get; private set; }
public IntFeedback VolumeLevelFeedback { get; private set; } public IntFeedback VolumeLevelFeedback { get; private set; }
public IntFeedback VolumeLevelScaledFeedback { get; private set; } public IntFeedback VolumeLevelScaledFeedback { get; private set; }
@@ -273,7 +303,6 @@ namespace PepperDash.Essentials.DM
MuteOffAction = new Action(Output.MasterMuteOff); MuteOffAction = new Action(Output.MasterMuteOff);
VolumeUpAction = new Action<bool>((b) => Output.MasterVolumeUp.BoolValue = b); VolumeUpAction = new Action<bool>((b) => Output.MasterVolumeUp.BoolValue = b);
VolumeDownAction = new Action<bool>((b) => Output.MasterVolumeDown.BoolValue = b); VolumeDownAction = new Action<bool>((b) => Output.MasterVolumeDown.BoolValue = b);
break; break;
} }
case eDmpsLevelType.MicsMaster: case eDmpsLevelType.MicsMaster:
@@ -383,32 +412,6 @@ namespace PepperDash.Essentials.DM
return (ushort)((signedLevel - MinLevel) * ushort.MaxValue / (MaxLevel - MinLevel)); return (ushort)((signedLevel - MinLevel) * ushort.MaxValue / (MaxLevel - MinLevel));
} }
public void GetVolumeMin()
{
if (Mixer != null)
{
MinLevel = (short)Mixer.MinVolumeFeedback.UShortValue;
Debug.Console(2, Debug.ErrorLogLevel.None, "DMPS set {0} min level:{1}", Output.Name, MinLevel);
if (VolumeLevelScaledFeedback != null)
{
VolumeLevelScaledFeedback.FireUpdate();
}
}
}
public void GetVolumeMax()
{
if (Mixer != null)
{
MaxLevel = (short)Mixer.MaxVolumeFeedback.UShortValue;
Debug.Console(2, Debug.ErrorLogLevel.None, "DMPS set {0} max level:{1}", Output.Name, MaxLevel);
if (VolumeLevelScaledFeedback != null)
{
VolumeLevelScaledFeedback.FireUpdate();
}
}
}
#region IBasicVolumeWithFeedback Members #region IBasicVolumeWithFeedback Members
public void SetVolume(ushort level) public void SetVolume(ushort level)