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
{ {
@@ -80,86 +77,88 @@ namespace PepperDash.Essentials.DM
switch (args.EventId) switch (args.EventId)
{ {
case DMOutputEventIds.MasterVolumeFeedBackEventId: case DMOutputEventIds.MasterVolumeFeedBackEventId:
{ {
MasterVolumeLevel.VolumeLevelFeedback.FireUpdate(); MasterVolumeLevel.VolumeLevelFeedback.FireUpdate();
MasterVolumeLevel.VolumeLevelScaledFeedback.FireUpdate(); MasterVolumeLevel.VolumeLevelScaledFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.MasterMuteOnFeedBackEventId: case DMOutputEventIds.MasterMuteOnFeedBackEventId:
{ {
MasterVolumeLevel.MuteFeedback.FireUpdate(); MasterVolumeLevel.MuteFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.SourceLevelFeedBackEventId: case DMOutputEventIds.SourceLevelFeedBackEventId:
{ {
SourceVolumeLevel.VolumeLevelFeedback.FireUpdate(); SourceVolumeLevel.VolumeLevelFeedback.FireUpdate();
SourceVolumeLevel.VolumeLevelScaledFeedback.FireUpdate(); SourceVolumeLevel.VolumeLevelScaledFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.SourceMuteOnFeedBackEventId: case DMOutputEventIds.SourceMuteOnFeedBackEventId:
{ {
SourceVolumeLevel.MuteFeedback.FireUpdate(); SourceVolumeLevel.MuteFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.MicMasterLevelFeedBackEventId: case DMOutputEventIds.MicMasterLevelFeedBackEventId:
{ {
MicsMasterVolumeLevel.VolumeLevelFeedback.FireUpdate(); MicsMasterVolumeLevel.VolumeLevelFeedback.FireUpdate();
MicsMasterVolumeLevel.VolumeLevelScaledFeedback.FireUpdate(); MicsMasterVolumeLevel.VolumeLevelScaledFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.MicMasterMuteOnFeedBackEventId: case DMOutputEventIds.MicMasterMuteOnFeedBackEventId:
{ {
MicsMasterVolumeLevel.MuteFeedback.FireUpdate(); MicsMasterVolumeLevel.MuteFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.Codec1LevelFeedBackEventId: case DMOutputEventIds.Codec1LevelFeedBackEventId:
{
if (Codec1VolumeLevel != null)
{ {
Codec1VolumeLevel.VolumeLevelFeedback.FireUpdate(); if (Codec1VolumeLevel != null)
Codec1VolumeLevel.VolumeLevelScaledFeedback.FireUpdate(); {
Codec1VolumeLevel.VolumeLevelFeedback.FireUpdate();
Codec1VolumeLevel.VolumeLevelScaledFeedback.FireUpdate();
}
break;
} }
break;
}
case DMOutputEventIds.Codec1MuteOnFeedBackEventId: case DMOutputEventIds.Codec1MuteOnFeedBackEventId:
{ {
if (Codec1VolumeLevel != null) if (Codec1VolumeLevel != null)
Codec1VolumeLevel.MuteFeedback.FireUpdate(); Codec1VolumeLevel.MuteFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.Codec2LevelFeedBackEventId: case DMOutputEventIds.Codec2LevelFeedBackEventId:
{
if (Codec2VolumeLevel != null)
{ {
Codec2VolumeLevel.VolumeLevelFeedback.FireUpdate(); if (Codec2VolumeLevel != null)
Codec2VolumeLevel.VolumeLevelScaledFeedback.FireUpdate(); {
Codec2VolumeLevel.VolumeLevelFeedback.FireUpdate();
Codec2VolumeLevel.VolumeLevelScaledFeedback.FireUpdate();
}
break;
} }
break;
}
case DMOutputEventIds.Codec2MuteOnFeedBackEventId: case DMOutputEventIds.Codec2MuteOnFeedBackEventId:
{ {
if (Codec2VolumeLevel != null) if (Codec2VolumeLevel != null)
Codec2VolumeLevel.MuteFeedback.FireUpdate(); Codec2VolumeLevel.MuteFeedback.FireUpdate();
break; break;
} }
case DMOutputEventIds.MinVolumeFeedBackEventId: case DMOutputEventIds.MinVolumeFeedBackEventId:
{
Debug.Console(2, this, "MinVolumeFeedBackEventId: {0}", args.Index);
if (MasterVolumeLevel != null)
{ {
MasterVolumeLevel.GetVolumeMin(); Debug.Console(2, this, "MinVolumeFeedBackEventId: {0}", args.Index);
var level = MasterVolumeLevel as DmpsAudioOutputWithMixer;
if (level != null)
{
level.GetVolumeMin();
}
break;
} }
break;
}
case DMOutputEventIds.MaxVolumeFeedBackEventId: case DMOutputEventIds.MaxVolumeFeedBackEventId:
{
Debug.Console(2, this, "MaxVolumeFeedBackEventId: {0}", args.Index);
if (MasterVolumeLevel != null)
{ {
MasterVolumeLevel.GetVolumeMax(); Debug.Console(2, this, "MaxVolumeFeedBackEventId: {0}", args.Index);
var level = MasterVolumeLevel as DmpsAudioOutputWithMixer;
if (level != null)
{
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; }
@@ -267,13 +297,12 @@ namespace PepperDash.Essentials.DM
{ {
Level = output.MasterVolume; Level = output.MasterVolume;
MuteFeedback = new BoolFeedback( new Func<bool> (() => Output.MasterMuteOnFeedBack.BoolValue)); MuteFeedback = new BoolFeedback(new Func<bool>(() => Output.MasterMuteOnFeedBack.BoolValue));
VolumeLevelFeedback = new IntFeedback(new Func<int>(() => Output.MasterVolumeFeedBack.UShortValue)); VolumeLevelFeedback = new IntFeedback(new Func<int>(() => Output.MasterVolumeFeedBack.UShortValue));
MuteOnAction = new Action(Output.MasterMuteOn); MuteOnAction = new Action(Output.MasterMuteOn);
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)