예제 #1
0
        public void SetConnector(EOBSConnectorType type)
        {
            if (type == EOBSConnectorType.SLOBS)
            {
                Obs = new CSLOBSConnector();
            }
            else if (type == EOBSConnectorType.OBS)
            {
                Obs = new COBSConnector();
            }

            Obs.ConnectionStatus       += Obs_ConnectionStatus;
            Obs.AudioSourceChanged     += Obs_AudioSourceChanged;
            Obs.SceneChanged           += Obs_SceneChanged;
            Obs.SceneItemChanged       += Obs_SceneItemChanged;
            Obs.SceneListChanged       += Obs_SceneListChanged;
            Obs.SourceChanged          += Obs_SourceChanged;
            Obs.StreamingStatusChanged += Obs_StreamingStatusChanged;
            Obs.TransitionChanged      += Obs_TransitionChanged;
            Obs.ModeChanged            += Obs_ModeChanged;

            Midi = new CMidiObserver(Obs);
            Midi.OnMidiOutput += Midi_OnMidiOutput;
            ConnectorType      = type;
        }
예제 #2
0
        private void Obs_TransitionChanged(IOBSConnector sender, EOBSEvent eventtype)
        {
            if (eventtype == EOBSEvent.TransitionListChanged)
            {
                Midi.Display(EMidiOBSItemType.Transition, EMidiOBSOutputType.Off, -1);
            }

            int tr_i = 0;

            if (Obs.Transitions.Count > 0)
            {
                foreach (var tr in Obs.Transitions)
                {
                    if (Obs.ActiveTransition.Id == tr.Id)
                    {
                        Midi.Display(EMidiOBSItemType.Transition, EMidiOBSOutputType.Active, tr_i);
                    }
                    else
                    {
                        Midi.Display(EMidiOBSItemType.Transition, EMidiOBSOutputType.On, tr_i);
                    }
                    tr_i++;
                }
            }
        }
예제 #3
0
        public CMidiObserver(IOBSConnector refobs)
        {
            obs = refobs;

            midiActions      = new List <SMidiOBSAction>();
            midiQueue        = new Dictionary <string, SMidiAction>();
            midiOutputStatus = new Dictionary <string, SMidiAction>();

            midiQueueTimer           = new System.Timers.Timer(1);
            midiQueueTimer.Elapsed  += OnMidiQueueTimer;
            midiQueueTimer.AutoReset = true;
            midiQueueTimer.Enabled   = false;
        }
예제 #4
0
 private void Obs_ModeChanged(IOBSConnector sender, EOBSMode mode)
 {
     if (mode == EOBSMode.Normal)
     {
         Midi.Display(EMidiOBSItemType.Pscene, EMidiOBSOutputType.Off, -1, -1);
         Midi.Display(EMidiOBSItemType.PsceneItem, EMidiOBSOutputType.Off, -1, -1);
         Midi.Display(EMidiOBSItemType.Scene, EMidiOBSOutputType.Off, -1, -1);
         Midi.Display(EMidiOBSItemType.SceneItem, EMidiOBSOutputType.Off, -1, -1);
     }
     Midi.Display(EMidiOBSItemType.Mode, (int)Obs.Mode == 2 ? EMidiOBSOutputType.Active : EMidiOBSOutputType.On, -1);
     _renderScenes();
     _renderSceneItems();
     Midi.FlushQueue();
 }
예제 #5
0
 private void Obs_AudioSourceChanged(IOBSConnector sender, EOBSEvent eventtype)
 {
     Midi.Display(EMidiOBSItemType.AudioItem, EMidiOBSOutputType.Off, -1, -1, true);
     for (int i = 0; i < Obs.AudioSources.Count; i++)
     {
         if (!Obs.AudioSources[i].Hidden)
         {
             if (Obs.AudioSources[i].Muted)
             {
                 Midi.Display(EMidiOBSItemType.AudioItem, EMidiOBSOutputType.Muted, i, -1);
             }
             else
             {
                 Midi.Display(EMidiOBSItemType.AudioItem, EMidiOBSOutputType.On, i, -1);
             }
         }
     }
 }
예제 #6
0
 private void Obs_SceneChanged(IOBSConnector sender, EOBSEvent eventtype, SOBSScene scene)
 {
     // throw new NotImplementedException();
     if (eventtype == EOBSEvent.SceneAdded || eventtype == EOBSEvent.SceneRemoved)
     {
         if (EOBSEvent.SceneRemoved == eventtype)
         {
             Midi.Display(EMidiOBSItemType.Scene, EMidiOBSOutputType.Off, -1);
         }
         _renderScenes();
     }
     else if (eventtype == EOBSEvent.SceneSwitched || eventtype == EOBSEvent.SceneUpdated)
     {
         _renderScenes();
         _renderSceneItems();
     }
     Midi.FlushQueue();
 }
예제 #7
0
        private async void Obs_ConnectionStatus(IOBSConnector sender, EOBSCStatus eventdata)
        {
            if (eventdata == EOBSCStatus.Connected)
            {
                Connected  = true;
                Connecting = false;
                Midi.Display(EMidiOBSItemType.ReloadObsData, EMidiOBSOutputType.Off, -1, -1, true);

                //await Obs.Reload();

                Midi.Display(EMidiOBSItemType.ReloadObsData, EMidiOBSOutputType.On, -1, -1, true);
                Midi.RenderSurface();
            }
            else if (eventdata == EOBSCStatus.Disconnected)
            {
                Midi.ResetSurface();
            }

            if (StatusChanged != null)
            {
                StatusChanged(this, eventdata);
            }
        }
예제 #8
0
 private void Obs_SceneItemChanged(IOBSConnector sender, EOBSEvent eventtype, SOBSSceneItem eventdata)
 {
     _renderSceneItems();
 }
예제 #9
0
 private void Obs_SceneListChanged(IOBSConnector sender, EOBSEvent eventtype, List <SOBSScene> scenes)
 {
     _renderScenes();
     _renderSceneItems();
     Midi.FlushQueue();
 }
예제 #10
0
 private void Obs_SourceChanged(IOBSConnector sender, EOBSEvent eventtype, SOBSSource eventdata)
 {
 }
예제 #11
0
        private void Obs_StreamingStatusChanged(IOBSConnector sender, SOBSStreamingState state)
        {
            //streaming
            if (state.Stream == EOBSStreamingState.Starting || state.Stream == EOBSStreamingState.Reconnecting)
            {
                Midi.Display(EMidiOBSItemType.Stream, EMidiOBSOutputType.Starting, -1);
            }
            else if (state.Stream == EOBSStreamingState.Stopping)
            {
                Midi.Display(EMidiOBSItemType.Stream, EMidiOBSOutputType.Stopping, -1);
            }
            else if (state.Stream == EOBSStreamingState.Started)
            {
                Midi.Display(EMidiOBSItemType.Stream, EMidiOBSOutputType.Active, -1);
            }
            else if (state.Stream == EOBSStreamingState.Stopped)
            {
                Midi.Display(EMidiOBSItemType.Stream, EMidiOBSOutputType.On, -1);
            }

            //recording
            if (state.Record == EOBSStreamingState.Starting)
            {
                Midi.Display(EMidiOBSItemType.Record, EMidiOBSOutputType.Starting, -1);
            }
            else if (state.Record == EOBSStreamingState.Stopping)
            {
                Midi.Display(EMidiOBSItemType.Record, EMidiOBSOutputType.Stopping, -1);
            }
            else if (state.Record == EOBSStreamingState.Started)
            {
                Midi.Display(EMidiOBSItemType.Record, EMidiOBSOutputType.Active, -1);
            }
            else if (state.Record == EOBSStreamingState.Stopped)
            {
                Midi.Display(EMidiOBSItemType.Record, EMidiOBSOutputType.On, -1);
            }

            //replaybuffer
            if (state.Replay == EOBSStreamingState.Starting || state.Replay == EOBSStreamingState.Saving)
            {
                Midi.Display(EMidiOBSItemType.ReplayBuffer, EMidiOBSOutputType.Starting, -1);
            }
            else if (state.Replay == EOBSStreamingState.Stopping)
            {
                Midi.Display(EMidiOBSItemType.ReplayBuffer, EMidiOBSOutputType.Stopping, -1);
            }
            else if (state.Replay == EOBSStreamingState.Started)
            {
                Midi.Display(EMidiOBSItemType.ReplayBuffer, EMidiOBSOutputType.Active, -1);
            }
            else if (state.Replay == EOBSStreamingState.Stopped)
            {
                Midi.Display(EMidiOBSItemType.ReplayBuffer, EMidiOBSOutputType.On, -1);
            }

            if (state.Replay == EOBSStreamingState.Saving)
            {
                Midi.Display(EMidiOBSItemType.ReplayBufferSave, EMidiOBSOutputType.Active, -1);
            }
            else
            {
                Midi.Display(EMidiOBSItemType.ReplayBufferSave, EMidiOBSOutputType.On, -1);
            }
        }