Controller() public method

public Controller ( int midiChannel, int controller ) : IObservable
midiChannel int
controller int
return IObservable
Exemplo n.º 1
0
        public TestMidi1(IEnumerable <string> args)
        {
            p = new PhysicalDevices
            {
                SmallLED = new Physical.SmallRGBStrobe(testLight1, 1),
                CatAir   = new Physical.GenericDimmer(catAir, 10),
                CatLight = new Physical.GenericDimmer(catLight, 11)
            };

            inputBrightness.ConnectTo(testLight1.InputBrightness);
            inputBrightness.ConnectTo(testLight2.InputBrightness);

            acnOutput.Connect(p.SmallLED, 20);
            acnOutput.Connect(p.CatAir, 20);
            acnOutput.Connect(p.CatLight, 20);

            buttonTest2.ConnectTo(catAir.Control);

            inputH.Output.Subscribe(x =>
            {
                testLight1.SetOnlyColor(HSV.ColorFromHSV(x.Value.GetByteScale(), inputS.Value, inputV.Value));
            });

            inputS.Output.Subscribe(x =>
            {
                testLight1.SetOnlyColor(HSV.ColorFromHSV(inputH.Value.GetByteScale(), x.Value, inputV.Value));
            });

            inputV.Output.Subscribe(x =>
            {
                testLight1.SetOnlyColor(HSV.ColorFromHSV(inputH.Value.GetByteScale(), inputS.Value, x.Value));
            });

            inputBrightness.Output.Subscribe(x =>
            {
                midiOutput.Send(0, 81, x.Value.GetByteScale(127));
            });
            midiInput.Controller(1, 1).Controls(inputBrightness.Control);
            midiInput.Controller(0, 81).Controls(inputBrightness.Control);
            midiInput.Controller(1, 2).Controls(inputH.Control);
            midiInput.Controller(1, 3).Controls(inputS.Control);
            midiInput.Controller(1, 4).Controls(inputV.Control);

            midiInput.Note(1, 36).Controls(buttonTest1.Control);
            midiInput.Note(1, 37).Controls(buttonTest2.Control);
            midiInput.Note(1, 38).Controls(buttonTest3.Control);


            buttonTest2.Output.Subscribe(catAir.Control);
            buttonTest3.Output.Subscribe(catLight.Control);

            buttonTest1.Output.Subscribe(x =>
            {
                if (x)
                {
                    testLight1.RunEffect(new Effect2.Fader(0.0, 1.0), S(1.0));
                }
                else
                {
                    if (testLight1.Brightness > 0)
                    {
                        testLight1.RunEffect(new Effect2.Fader(1.0, 0.0), S(1.0));
                    }
                }
            });
        }
Exemplo n.º 2
0
        public Halloween2015(IEnumerable <string> args)
        {
            hoursSmall.AddRange("5:00 pm", "7:00 pm");
            //            hoursFull.AddRange("5:00 pm", "7:00 pm");

            // Logging
            hoursSmall.Output.Log("Hours small");
            hoursFull.Output.Log("Hours full");

            hoursSmall
            .ControlsMasterPower(catAir);
            hoursFull
            .ControlsMasterPower(catAir);
            //                .ControlsMasterPower(eyes);

            buttonOverrideHours.Output.Subscribe(x =>
            {
                if (x)
                {
                    hoursFull.SetForced(true);
                }
                else
                {
                    hoursFull.SetForced(false);
                }
            });


            emergencyStop.Output.Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToState(States.EmergencyStop);
                }
                else
                {
                    if (hoursFull.IsOpen)
                    {
                        stateMachine.GoToState(States.Background);
                    }
                    else
                    {
                        stateMachine.GoToIdle();
                    }
                }
            });

            hoursFull.Output.Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.SetDefaultState(States.Background);

                    if (emergencyStop.Value)
                    {
                        stateMachine.GoToState(States.EmergencyStop);
                    }
                    else
                    {
                        stateMachine.GoToState(States.Background);
                    }
                }
                else
                {
                    stateMachine.GoToIdle();
                    stateMachine.SetDefaultState(null);
                }
                SetPixelColor();
            });

            popOut1.ConnectTo(wall1Light);
            popOut1.ConnectTo(wall4Light);
            popOut2.ConnectTo(wall2Light);
            popOutAll.ConnectTo(wall1Light);
            popOutAll.ConnectTo(wall2Light);
            popOutAll.ConnectTo(wall3Light);
            popOutAll.ConnectTo(wall4Light);
            popOutAll.ConnectTo(underGeorge);
            popOutAll.ConnectTo(pixelsRoofEdge);
            popOutAll.ConnectTo(pinSpot);

            allLights.Add(wall1Light, wall2Light, wall3Light, wall4Light, underGeorge, pixelsRoofEdge, pinSpot, spiderLight);
            purpleLights.Add(wall1Light, wall2Light, wall3Light, wall4Light, pixelsRoofEdge);

            flickerEffect.ConnectTo(stairs1Light);
            flickerEffect.ConnectTo(stairs2Light);
            pulsatingEffect1.ConnectTo(pinSpot, Tuple.Create <DataElements, object>(DataElements.Color, Color.FromArgb(0, 255, 0)));
            pulsatingEffect2.ConnectTo(pinSpot, Tuple.Create <DataElements, object>(DataElements.Color, Color.FromArgb(255, 0, 0)));

            stateMachine.For(States.Background)
            .Execute(i =>
            {
                subVideo.Run();
                flickerEffect.Start();
                treeGhosts.SetBrightness(1.0);
                audioMain.PlayBackground();
                audioEeebox.SetBackgroundVolume(0.6);
                audioEeebox.PlayBackground();

                ColorBrightness purpleColor = new ColorBrightness(HSV.ColorFromRGB(0.73333333333333328, 0, 1),
                                                                  0.16470588235294117);

                purpleLights.SetData(null, Utils.Data(purpleColor.Color, purpleColor.Brightness));

                while (!i.IsCancellationRequested && stateMachine.CurrentState == States.Background)
                {
                    i.WaitFor(S(0.5));
                    if (!this.lastFogRun.HasValue || (DateTime.Now - this.lastFogRun.Value).TotalMinutes > 5)
                    {
                        // Run the fog for a little while
                        fog.SetValue(true);
                        i.WaitFor(S(4));
                        fog.SetValue(false);
                        this.lastFogRun = DateTime.Now;
                    }
                }
            })
            .TearDown(instance =>
            {
                purpleLights.SetBrightness(0.0);

                Exec.Cancel(subVideo);
                audioMain.PauseBackground();
                audioEeebox.PauseBackground();

                timelineThunder1.Stop();
                timelineThunder2.Stop();
                timelineThunder3.Stop();
                timelineThunder4.Stop();
                timelineThunder5.Stop();
                timelineThunder6.Stop();
                timelineThunder7.Stop();
                timelineThunder8.Stop();

                flickerEffect.Stop();
                treeGhosts.SetBrightness(0.0);
            });

            stateMachine.For(States.EmergencyStop)
            .Execute(i =>
            {
                // Do nothing
                i.WaitUntilCancel();
            });

            stateMachine.For(States.Special1)
            .Execute(i =>
            {
                audioEeebox.PlayNewEffect("640 The Demon Exorcised.wav");

                i.WaitUntilCancel();
            });

            inputBrightness.Output.Subscribe(x =>
            {
                //                testLight1.SetBrightness(x);
            });

            inputH.WhenOutputChanges(x =>
            {
                //                testLight1.SetColor(HSV.ColorFromHSV(x.GetByteScale(), inputS.Value, 1.0));
            });

            inputS.Output.Subscribe(x =>
            {
                //                testLight1.SetColor(HSV.ColorFromHSV(inputH.Value.GetByteScale(), x, 1.0));
            });

            midiInput.Controller(midiChannel, 1).Controls(inputBrightness.Control);
            midiInput.Controller(midiChannel, 2).Controls(inputH.Control);
            midiInput.Controller(midiChannel, 3).Controls(inputS.Control);

            raspberryLocal.AudioTrackStart.Subscribe(x =>
            {
                // Next track
                switch (x)
                {
                case "Thunder1.wav":
                    timelineThunder1.Start();
                    audioEeebox.PlayEffect("scream.wav");
                    break;

                case "Thunder2.wav":
                    timelineThunder2.Start();
                    break;

                case "Thunder3.wav":
                    timelineThunder3.Start();
                    break;

                case "Thunder4.wav":
                    timelineThunder4.Start();
                    audioEeebox.PlayEffect("424 Coyote Howling.wav");
                    break;

                case "Thunder5.wav":
                    timelineThunder5.Start();
                    //                        audioEeebox.PlayEffect("sixthsense-deadpeople.wav");
                    break;

                case "Thunder6.wav":
                    timelineThunder6.Start();
                    break;

                case "Thunder7.wav":
                    timelineThunder7.Start();
                    break;

                case "Thunder8.wav":
                    timelineThunder8.Start();
                    break;

                default:
                    log.Debug("Unknown track {0}", x);
                    break;
                }
            });

            timelineThunder1.AddMs(500, "A");
            timelineThunder1.AddMs(3500, "B");
            timelineThunder1.AddMs(4500, "C");
            timelineThunder1.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder2.AddMs(500, "A");
            timelineThunder2.AddMs(1500, "B");
            timelineThunder2.AddMs(1600, "C");
            timelineThunder2.AddMs(3700, "C");
            timelineThunder2.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder3.AddMs(100, "A");
            timelineThunder3.AddMs(200, "B");
            timelineThunder3.AddMs(300, "C");
            timelineThunder3.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder4.AddMs(0, "A");
            timelineThunder4.AddMs(3500, "B");
            timelineThunder4.AddMs(4500, "C");
            timelineThunder4.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder5.AddMs(1100, "A");
            timelineThunder5.AddMs(3500, "B");
            timelineThunder5.AddMs(4700, "C");
            timelineThunder5.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder6.AddMs(1000, "A");
            timelineThunder6.AddMs(1800, "B");
            timelineThunder6.AddMs(6200, "C");
            timelineThunder6.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder7.AddMs(0, "A");
            timelineThunder7.AddMs(200, "B");
            timelineThunder7.AddMs(300, "C");
            timelineThunder7.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder8.AddMs(500, "A");
            timelineThunder8.AddMs(4000, "B");
            timelineThunder8.AddMs(4200, "C");
            timelineThunder8.TimelineTrigger += TriggerThunderTimeline;

            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 0, 50), 6, 1);
            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 50, 100), 5, 1);

            acnOutput.Connect(new Physical.SmallRGBStrobe(spiderLight, 1), 1);
            acnOutput.Connect(new Physical.RGBStrobe(wall1Light, 60), 1);
            acnOutput.Connect(new Physical.RGBStrobe(wall2Light, 70), 1);
            acnOutput.Connect(new Physical.RGBStrobe(wall3Light, 40), 1);
            acnOutput.Connect(new Physical.RGBStrobe(wall4Light, 80), 1);
            acnOutput.Connect(new Physical.GenericDimmer(stairs1Light, 50), 1);
            acnOutput.Connect(new Physical.GenericDimmer(stairs2Light, 51), 1);
            acnOutput.Connect(new Physical.GenericDimmer(treeGhosts, 52), 1);
            acnOutput.Connect(new Physical.AmericanDJStrobe(underGeorge, 100), 1);
            acnOutput.Connect(new Physical.MonopriceRGBWPinSpot(pinSpot, 20), 1);

            //            acnOutput.Connect(new Physical.RGBIS(testLight1, 260), 1);


            raspberryCat.DigitalInputs[4].Connect(catMotion, false);
            raspberryCat.DigitalInputs[5].Connect(firstBeam, false);
            raspberryCat.DigitalInputs[6].Connect(finalBeam, false);
            raspberryCat.DigitalOutputs[7].Connect(spiderCeilingDrop);
            raspberryCat.Connect(audioCat);
            raspberryLocal.Connect(audioMain);
            monoExpanderEeebox.Connect(audioEeebox);
            raspberry3dfx.Connect(video3dfx);
            raspberryVideo2.Connect(video2);
            raspberryPop.Connect(audioPop);
            raspberryDIN.Connect(audioDIN);
            raspberryDIN.DigitalInputs[4].Connect(motion2);
            raspberryCat.DigitalOutputs[6].Connect(fog);
            raspberryDIN.DigitalOutputs[1].Connect(candyEyes);
            raspberryPop.DigitalOutputs[7].Connect(george1);
            raspberryPop.DigitalOutputs[6].Connect(george2);
            raspberryPop.DigitalOutputs[5].Connect(popper);
            raspberryPop.DigitalOutputs[2].Connect(dropSpiderEyes);

            acnOutput.Connect(new Physical.GenericDimmer(catAir, 10), 1);
            acnOutput.Connect(new Physical.GenericDimmer(catLights, 11), 1);

            oscServer.RegisterAction <int>("/3/multipush1/6/1", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("sixthsense-deadpeople.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/6/2", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("162 Blood Curdling Scream of Terror.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/6/3", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("424 Coyote Howling.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/6/4", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("125919__klankbeeld__horror-what-are-you-doing-here-cathedral.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/6/5", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("242004__junkfood2121__fart-01.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/5/1", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("death-scream.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/5/2", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("scream.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/5/3", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("door-creak.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/5/4", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("violin screech.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/5/5", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("gollum_precious1.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/4/1", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayNewEffect("640 The Demon Exorcised.wav");
            });

            oscServer.RegisterAction <int>("/3/multipush1/4/2", d => d.First() != 0, (msg, data) =>
            {
                audioCat.PlayEffect("266 Monster Growl 7.wav", 1.0, 1.0);
            });

            oscServer.RegisterAction <int>("/3/multipush1/4/3", d => d.First() != 0, (msg, data) =>
            {
                audioCat.PlayEffect("285 Monster Snarl 2.wav", 1.0, 1.0);
            });

            oscServer.RegisterAction <int>("/3/multipush1/4/4", d => d.First() != 0, (msg, data) =>
            {
                audioCat.PlayEffect("286 Monster Snarl 3.wav", 1.0, 1.0);
            });

            oscServer.RegisterAction <int>("/3/multipush1/4/5", d => d.First() != 0, (msg, data) =>
            {
                audioCat.PlayEffect("287 Monster Snarl 4.wav", 1.0, 1.0);
            });

            oscServer.RegisterAction <int>("/3/multipush1/3/1", d => d.First() != 0, (msg, data) =>
            {
                audioEeebox.PlayEffect("180 Babbling Lunatic.wav");
            });

            oscServer.RegisterAction <int>("/1/eStop", (msg, data) =>
            {
                emergencyStop.Control.OnNext(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/push2", d => d.First() != 0, (msg, data) =>
            {
                audioCat.PlayEffect("285 Monster Snarl 2.wav", 1.0, 1.0);
            });

            oscServer.RegisterAction <int>("/1/push3", d => d.First() != 0, (msg, data) =>
            {
                audioCat.PlayEffect("286 Monster Snarl 3.wav", 1.0, 1.0);
            });

            oscServer.RegisterAction <int>("/1/push4", (msg, data) =>
            {
                // Flash
                if (data.First() != 0)
                {
                    allLights.TakeAndHoldControl();
                    allLights.SetData(null, Utils.Data(Color.White, 1.0));
                }
                else
                {
                    allLights.ReleaseControl();
                }
            });

            oscServer.RegisterAction <int>("/1/push5", (msg, data) =>
            {
                george1.SetValue(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/push6", (msg, data) =>
            {
                george2.SetValue(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/push7", (msg, data) =>
            {
                popper.SetValue(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/push8", d => d.First() != 0, (msg, data) =>
            {
                audioPop.PlayEffect("laugh.wav", 1.0, 0.0);
            });

            oscServer.RegisterAction <int>("/1/spiderEyes", (msg, data) =>
            {
                dropSpiderEyes.SetValue(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/push10", d => d.First() != 0, (msg, data) =>
            {
                audioPop.PlayEffect("348 Spider Hiss.wav", 0.0, 1.0);
            });

            oscServer.RegisterAction <int>("/1/push11", (msg, data) =>
            {
                spiderCeilingDrop.SetValue(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/push12", (msg, data) =>
            {
                fog.SetValue(data.First() != 0);
            });

            oscServer.RegisterAction <int>("/1/special1", (msg, data) =>
            {
                if (data.First() != 0)
                {
                    stateMachine.GoToMomentaryState(States.Special1);
                }
                else
                {
                    stateMachine.StopCurrentJob();
                }
            });

            oscServer.RegisterAction <int>("/1/push13", d => d.First() != 0, (msg, data) =>
            {
                //                Exec.MasterEffect.Fade(stairs1Light, 1.0, 0.0, 2000, token: testToken);
                //popOut1.Pop();
                //popOut2.Pop();
                //popOut3.Pop();
                popOutAll.Pop(color: Color.White);
            });

            oscServer.RegisterAction <int>("/1/toggle1", (msg, data) =>
            {
                //                candyEyes.Value = data.First() != 0;
                if (data.First() != 0)
                {
                    audioMain.PlayBackground();
                }
                else
                {
                    audioMain.PauseBackground();
                }
            });

            oscServer.RegisterAction <int>("/1/toggle2", (msg, data) =>
            {
                //                pinSpot.SetBrightness(data.First());
            });

            oscServer.RegisterAction <int>("/1/toggle3", (msg, data) =>
            {
                if (data.First() != 0)
                {
                    audioEeebox.PlayBackground();
                }
                else
                {
                    audioEeebox.PauseBackground();
                }
            });

            oscServer.RegisterAction <int>("/1/toggle4", (msg, data) =>
            {
                block.Value = data.First() != 0;
                //                treeGhosts.SetBrightness(data.First() != 0 ? 1.0 : 0.0);
            });

            oscServer.RegisterAction <int>("/1/push14", (msg, data) =>
            {
                //                flickerEffect.Start();
                //double brightness = data.First();

                //spiderLight.SetColor(Color.Red, brightness);
                //pinSpot.SetColor(Color.Purple, brightness);
                //underGeorge.SetBrightness(brightness);
                //wall1Light.SetColor(Color.Purple, brightness);
                //wall2Light.SetColor(Color.Purple, brightness);
                //wall3Light.SetColor(Color.Purple, brightness);
                //wall4Light.SetColor(Color.Purple, brightness);
                //                audioDIN.PlayEffect("gollum_precious1.wav");
            });

            oscServer.RegisterAction <int>("/1/push20", d => d.First() != 0, (msg, data) =>
            {
                video3dfx.PlayVideo("PHA_Wraith_StartleScare_3DFX_H.mp4");
            });

            oscServer.RegisterAction <int>("/1/push21", d => d.First() != 0, (msg, data) =>
            {
                //               video2.PlayVideo("SkeletonSurprise_Door_Horz_HD.mp4");
                video2.PlayVideo("Beauty_Startler_TVHolo_Hor_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/5/1", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("Beauty_Startler_TVHolo_Hor_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/5/2", d => d.First() != 0, (msg, data) =>
            {
            });

            oscServer.RegisterAction <int>("/4/multipush2/5/3", d => d.First() != 0, (msg, data) =>
            {
            });

            oscServer.RegisterAction <int>("/4/multipush2/5/4", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("FearTheReaper_Door_Horz_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/4/1", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("GatheringGhouls_Door_Horz_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/4/2", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("Girl_Startler_TVHolo_Hor_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/4/3", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("HeadOfHouse_Startler_TVHolo_Hor_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/4/4", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("JitteryBones_Door_Horz_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/3/1", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("PHA_Poltergeist_StartleScare_Holl_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/3/2", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("PHA_Siren_StartleScare_Holl_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/3/3", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("PHA_Spinster_StartleScare_Holl_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/3/4", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("PHA_Wraith_StartleScare_Holl_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/2/1", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("PopUpPanic_Door_Horz_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/2/2", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("SkeletonSurprise_Door_Horz_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/2/3", d => d.First() != 0, (msg, data) =>
            {
                video2.PlayVideo("Wraith_Startler_TVHolo_Hor_HD.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/2/4", d => d.First() != 0, (msg, data) =>
            {
            });

            oscServer.RegisterAction <int>("/4/multipush2/1/1", d => d.First() != 0, (msg, data) =>
            {
                video3dfx.PlayVideo("PHA_Wraith_StartleScare_3DFX_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/1/2", d => d.First() != 0, (msg, data) =>
            {
                video3dfx.PlayVideo("PHA_Spinster_StartleScare_3DFX_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/1/3", d => d.First() != 0, (msg, data) =>
            {
                video3dfx.PlayVideo("PHA_Siren_StartleScare_3DFX_H.mp4");
            });

            oscServer.RegisterAction <int>("/4/multipush2/1/4", d => d.First() != 0, (msg, data) =>
            {
                video3dfx.PlayVideo("PHA_Poltergeist_StartleScare_3DFX_H.mp4");
            });


            oscServer.RegisterAction("/1", msg =>
            {
                this.log.Information("Page 1");
                //                manualFader.Value = false;

                SetPixelColor();
            });

            oscServer.RegisterAction("/2", msg =>
            {
                this.log.Information("Page 2");
                //                manualFader.Value = true;

                SetPixelColor();
            });

            oscServer.RegisterAction <float>("/2/faderBright", (msg, data) =>
            {
                faderBright.Value = data.First();

                SetPixelColor();
            });

            oscServer.RegisterAction <float>("/2/faderR", (msg, data) =>
            {
                faderR.Value = data.First();

                SetPixelColor();
            });

            oscServer.RegisterAction <float>("/2/faderG", (msg, data) =>
            {
                faderG.Value = data.First();

                SetPixelColor();
            });

            oscServer.RegisterAction <float>("/2/faderB", (msg, data) =>
            {
                faderB.Value = data.First();

                SetPixelColor();
            });



            midiInput.Note(midiChannel, 36).Subscribe(x =>
            {
                if (x)
                {
                    audioCat.PlayEffect("266 Monster Growl 7", 1.0, 1.0);
                }
            });

            midiInput.Note(midiChannel, 37).Subscribe(x =>
            {
                if (x)
                {
                    audioCat.PlayEffect("285 Monster Snarl 2", 1.0, 1.0);
                }
            });

            midiInput.Note(midiChannel, 38).Subscribe(x =>
            {
                if (x)
                {
                    audioCat.PlayEffect("286 Monster Snarl 3", 1.0, 1.0);
                }
            });

            midiInput.Note(midiChannel, 39).Subscribe(x =>
            {
                if (x)
                {
                    audioCat.PlayEffect("287 Monster Snarl 4", 1.0, 1.0);
                }
            });

            midiInput.Note(midiChannel, 40).Subscribe(x =>
            {
                if (x)
                {
                    allLights.TakeAndHoldControl();
                    allLights.SetData(null, Utils.Data(Color.White, 1.0));
                }
                else
                {
                    allLights.ReleaseControl();
                }
            });

            midiInput.Note(midiChannel, 41).Subscribe(x =>
            {
                if (x)
                {
                    audioEeebox.PlayEffect("125919__klankbeeld__horror-what-are-you-doing-here-cathedral.wav");
                }
            });

            midiInput.Note(midiChannel, 42).Subscribe(x =>
            {
                if (x)
                {
                    audioEeebox.PlayEffect("180 Babbling Lunatic.wav");
                }
            });

            midiInput.Note(midiChannel, 43).Subscribe(x =>
            {
                if (x)
                {
                    audioEeebox.PlayEffect("162 Blood Curdling Scream of Terror.wav");
                }
            });

            catMotion.Output.Subscribe(x =>
            {
                if (x && (hoursFull.IsOpen || hoursSmall.IsOpen))
                {
                    Executor.Current.Execute(catSeq);
                }

                touchOSC.Send("/1/led1", x ? 1 : 0);
            });

            firstBeam.Output.Subscribe(x =>
            {
                touchOSC.Send("/1/led2", x ? 1 : 0);

                if (x && hoursFull.IsOpen && !emergencyStop.Value && !block.Value)
                {
                    subFirst.Run();
                }
            });

            finalBeam.Output.Subscribe(x =>
            {
                touchOSC.Send("/1/led3", x ? 1 : 0);

                if (x && hoursFull.IsOpen && !emergencyStop.Value && !block.Value)
                {
                    subFinal.Run();
                }
            });

            motion2.Output.Subscribe(x =>
            {
                //if (x && hoursFull.IsOpen)
                //    Executor.Current.Execute(motionSeq);

                touchOSC.Send("/1/led4", x ? 1 : 0);
            });

            welcomeSeq.WhenExecuted
            .Execute(i =>
            {
                audioPop.PlayEffect("100471__robinhood76__01886-welcome-spell.wav");

                i.WaitFor(S(3));
            });

            subFirst
            .LockWhenRunning(10, spiderLight)
            .RunAction(i =>
            {
                fog.SetValue(true);
                this.lastFogRun = DateTime.Now;
                pulsatingEffect2.Start();
                i.WaitFor(S(5.0));

                spiderLight.SetColor(Color.Red, token: i.Token);
                dropSpiderEyes.SetValue(true);
                spiderCeilingDrop.SetValue(true);
                audioPop.PlayEffect("348 Spider Hiss.wav", 1.0, 0.0);

                i.WaitFor(S(2.0));
                dropSpiderEyes.SetValue(false);
                spiderLight.SetBrightness(0.0, i.Token);
                switch (random.Next(4))
                {
                case 0:
                    video3dfx.PlayVideo("PHA_Wraith_StartleScare_3DFX_H.mp4");
                    break;

                case 1:
                    video3dfx.PlayVideo("PHA_Spinster_StartleScare_3DFX_H.mp4");
                    break;

                case 2:
                    video3dfx.PlayVideo("PHA_Siren_StartleScare_3DFX_H.mp4");
                    break;

                case 3:
                    video3dfx.PlayVideo("PHA_Poltergeist_StartleScare_3DFX_H.mp4");
                    break;
                }
                fog.SetValue(false);
                i.WaitFor(S(2.0));
                spiderCeilingDrop.SetValue(false);
                i.WaitFor(S(3.0));
            })
            .TearDown(i =>
            {
                pulsatingEffect2.Stop();
                Thread.Sleep(S(5));
            });

            subVideo
            .RunAction(i =>
            {
                while (!i.IsCancellationRequested)
                {
                    string videoFile;
                    while (true)
                    {
                        videoFile = videoFiles[random.Next(videoFiles.Length)];
                        if (videoFiles.Length == 1 || videoFile != currentVideoFile)
                        {
                            break;
                        }
                    }

                    currentVideoFile = videoFile;
                    video2.PlayVideo(videoFile);
                    i.WaitFor(S(60));
                }
            });

            subFinal
            .LockWhenRunning(10, candyEyes, underGeorge)
            .RunAction(i =>
            {
                pulsatingEffect2.Stop();
                pulsatingEffect1.Start();
                candyEyes.SetValue(true);
                underGeorge.SetStrobeSpeed(0.5, i.Token);
                underGeorge.SetBrightness(1.0, i.Token);
                audioPop.PlayEffect("laugh.wav", 1.0, 0.0);
                for (int r = 0; r < 2; r++)
                {
                    george1.SetValue(true);
                    i.WaitFor(S(0.2));
                    george1.SetValue(false);
                    i.WaitFor(S(0.2));
                }
                i.WaitFor(S(1));
                audioDIN.PlayEffect("125919__klankbeeld__horror-what-are-you-doing-here-cathedral.wav");
                underGeorge.SetStrobeSpeed(0.0, i.Token);
                underGeorge.SetBrightness(0.0, i.Token);
                i.WaitFor(S(1));

                popper.SetValue(true);
                audioPop.PlayEffect("180 Babbling Lunatic.wav", 0.0, 1.0);
                i.WaitFor(S(3));
                popper.SetValue(false);

                i.WaitFor(S(8));

                Exec.MasterEffect.Fade(underGeorge, 0.5, 0.0, 1000, token: i.Token);
                //                    underGeorge.SetBrightness(0.3, i.Token);
                i.WaitFor(S(0.5));
                george2.SetValue(true);
                i.WaitFor(S(1.0));
                george2.SetValue(false);
                i.WaitFor(S(1.0));
                //                    underGeorge.SetBrightness(0.0, i.Token);
            })
            .TearDown(i =>
            {
                candyEyes.SetValue(false);
                pulsatingEffect1.Stop();
                Thread.Sleep(S(5));
            });


            catSeq.WhenExecuted
            .Execute(instance =>
            {
                var maxRuntime = System.Diagnostics.Stopwatch.StartNew();

                catLights.SetValue(true);

                while (true)
                {
                    switch (random.Next(4))
                    {
                    case 0:
                        audioCat.PlayEffect("266 Monster Growl 7", 1.0, 1.0);
                        instance.WaitFor(TimeSpan.FromSeconds(2.0));
                        break;

                    case 1:
                        audioCat.PlayEffect("285 Monster Snarl 2", 1.0, 1.0);
                        instance.WaitFor(TimeSpan.FromSeconds(3.0));
                        break;

                    case 2:
                        audioCat.PlayEffect("286 Monster Snarl 3", 1.0, 1.0);
                        instance.WaitFor(TimeSpan.FromSeconds(2.5));
                        break;

                    case 3:
                        audioCat.PlayEffect("287 Monster Snarl 4", 1.0, 1.0);
                        instance.WaitFor(TimeSpan.FromSeconds(1.5));
                        break;

                    default:
                        instance.WaitFor(TimeSpan.FromSeconds(3.0));
                        break;
                    }

                    instance.CancelToken.ThrowIfCancellationRequested();

                    if (maxRuntime.Elapsed.TotalSeconds > 10)
                    {
                        break;
                    }
                }
            })
            .TearDown(instance =>
            {
                catLights.SetValue(false);
            });

            motionSeq.WhenExecuted
            .Execute(instance =>
            {
                //video2.PlayVideo("DancingDead_Wall_HD.mp4");

                //                    instance.WaitFor(S(10));
            })
            .TearDown(instance =>
            {
            });
        }
Exemplo n.º 3
0
        public Xmas2015(IEnumerable <string> args)
        {
            hours.AddRange("4:00 pm", "10:00 pm");

            string expFilesParam = args.FirstOrDefault(x => x.StartsWith("EXPFILES"));

            if (!string.IsNullOrEmpty(expFilesParam))
            {
                string[] parts = expFilesParam.Split('=');
                if (parts.Length == 2)
                {
                    Exec.ExpanderSharedFiles = parts[1];
                }
            }

            pulsatingEffect1.ConnectTo(lightOlaf);
            pulsatingEffect2.ConnectTo(lightR2D2);
            pulsatingEffect3.ConnectTo(pixelsRoofEdge, Utils.Data(Color.Red));
            pulsatingEffect4.ConnectTo(lightBlueButton);
            pulsatingEffect4.ConnectTo(lightRedButton);

            expanderServer.AddInstance("ec30b8eda95b4c5cab46bf630d74810e", expanderLocal);
            expanderServer.AddInstance("ed86c3dc166f41ee86626897ba039ed2", expander1);      // rpi-eb0092ca
            expanderServer.AddInstance("10520fdcf14d47cba31da8b6e05d01d8", expander2);      // rpi-eb428ef1
            expanderServer.AddInstance("59ebb8e925c94182a0f6e0ef09180200", expander3);      // rpi-eba6cbc7
            expanderServer.AddInstance("1583f686014345888c15d7fc9c55ca3c", expander4);      // rpi-eb81c94e

            expander1.DigitalInputs[5].Connect(inR2D2);
            expander1.DigitalInputs[4].Connect(inOlaf);
            expander1.DigitalInputs[6].Connect(inShowMachine);
            expander1.DigitalOutputs[7].Connect(out1);
            expander4.DigitalOutputs[7].Connect(snowMachine);

            expander4.DigitalInputs[5].Connect(inBlueButton);
            expander4.DigitalInputs[4].Connect(inRedButton);

            expander1.Connect(audio1);
            expander2.Connect(audioMain);
            expander3.Connect(video3);
            expander4.Connect(audioDarthVader);

            blackOut.ConnectTo(Exec.Blackout);
            whiteOut.ConnectTo(Exec.Whiteout);

            midiAkai.Controller(midiChannel, 1).Subscribe(x => blackOut.Value = x.Value);
            midiAkai.Controller(midiChannel, 2).Subscribe(x => whiteOut.Value = x.Value);

            dmxPlayback.Load(Path.Combine(Exec.ExpanderSharedFiles, "Seq", "XmasLoop.bin"), 15);
            dmxPlayback.Loop = true;

            var pixelMapping = Framework.Utility.PixelMapping.GeneratePixelMappingFromGlediatorPatch(
                Path.Combine(Exec.ExpanderSharedFiles, "Glediator", "ArtNet 14-15 20x10.patch.glediator"));

            dmxPlayback.SetOutput(pixelsMatrix, pixelMapping);

            buttonOverrideHours.Output.Subscribe(x =>
            {
                if (x)
                {
                    hours.SetForced(true);
                }
                else
                {
                    hours.SetForced(null);
                }
            });

            inflatablesRunning.Subscribe(x =>
            {
                airReindeer.SetValue(x);

                Exec.SetKey("InflatablesRunning", x.ToString());
            });

            // Read from storage
            inflatablesRunning.OnNext(Exec.GetSetKey("InflatablesRunning", false));

            //            hours.Output.Log("Hours inside");

            stateMachine.ForFromSubroutine(States.Background, subBackground);
            stateMachine.ForFromSubroutine(States.Music1, subMusic1);
            stateMachine.ForFromSubroutine(States.Music2, subMusic2);
            stateMachine.ForFromSubroutine(States.SantaVideo, subSantaVideo);
            stateMachine.ForFromSubroutine(States.DarthVader, subStarWars);

            airR2D2.SetValue(true);
            airSanta1.SetValue(true);
            airOlaf.SetValue(true);
            laser.SetValue(true);

            hours
            //    .ControlsMasterPower(packages)
            //    .ControlsMasterPower(airSnowman)
            .ControlsMasterPower(airOlaf)
            .ControlsMasterPower(laser)
            .ControlsMasterPower(airSanta1)
            .ControlsMasterPower(airR2D2);
            //    .ControlsMasterPower(airSanta);

            buttonStartInflatables.Output.Subscribe(x =>
            {
                if (x && hours.IsOpen)
                {
                    inflatablesRunning.OnNext(true);
                }
            });

            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 0, 50), SacnUniverse6, 1);
            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 50, 100), SacnUniverse5, 1);

            var pixelMapping2D = Framework.Utility.PixelMapping.GeneratePixelMapping(20, 10, pixelOrder: Framework.Utility.PixelOrder.HorizontalSnakeBottomLeft);

            acnOutput.Connect(new Physical.Pixel2D(pixelsMatrix, pixelMapping2D), SacnUniverse10, 1);

            acnOutput.Connect(new Physical.Pixel1D(saberPixels, 0, 32), SacnUniverse12, 1);

            acnOutput.Connect(new Physical.GenericDimmer(airOlaf, 10), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(airReindeer, 12), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(airR2D2, 11), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat1, 96), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat2, 97), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat3, 98), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat4, 99), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightVader, 60), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightWall1, 70), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightWall2, 40), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightWall3, 80), SacnUniverseDMX);

            acnOutput.Connect(new Physical.GenericDimmer(laser, 4), SacnUniverseRenardBig);

            acnOutput.Connect(new Physical.GenericDimmer(lightOlaf, 128), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightSanta, 131), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightSnowman, 132), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightSnowman, 132), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightBlueButton, 262), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightRedButton, 263), SacnUniverseDMX);

            acnOutput.Connect(new Physical.GenericDimmer(lightR2D2, 16), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightRail2, 10), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet5, 11), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet6, 19), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(airSanta1, 20), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet7, 22), SacnUniverseRenardBig);

            acnOutput.Connect(new Physical.GenericDimmer(lightStairs2, 25), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightXmasTree, 26), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightReindeer2, 29), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightReindeer1, 32), SacnUniverseRenardBig);

            acnOutput.Connect(new Physical.GenericDimmer(lightStairs1, 1), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet2, 2), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet1, 3), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet3, 4), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet4, 5), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightRail1, 6), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightTopper1, 7), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightTopper2, 8), SacnUniverseRenardSmall);

            hours.Output.Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToDefaultState();
                }
                else
                {
                    //if (buttonOverrideHours.Active)
                    //    return;

                    stateMachine.GoToIdle();

                    // Needed?
                    System.Threading.Thread.Sleep(200);

                    inflatablesRunning.OnNext(false);
                }
            });

            subBackground
            .LockWhenRunning(
                lightNet1,
                lightNet2,
                lightNet3,
                lightNet4,
                lightNet5,
                lightNet6,
                lightNet7,
                lightNet8,
                lightTopper1,
                lightTopper2,
                lightXmasTree,
                lightStairs1,
                lightStairs2,
                lightRail1,
                lightRail2,
                lightSanta,
                lightSnowman,
                lightHat1,
                lightHat2,
                lightHat3,
                lightHat4,
                lightReindeer1,
                lightReindeer2,
                lightVader,
                lightWall1,
                lightWall2,
                lightWall3,
                lightR2D2,
                lightOlaf,
                saberPixels)
            .RunAction(i =>
            {
                pulsatingEffect4.Start();
                lightR2D2.SetBrightness(1, i.Token);
                lightOlaf.SetBrightness(1, i.Token);
                lightNet1.SetBrightness(1, i.Token);
                lightNet2.SetBrightness(1, i.Token);
                lightNet3.SetBrightness(1, i.Token);
                lightNet4.SetBrightness(1, i.Token);
                lightNet5.SetBrightness(1, i.Token);
                lightNet6.SetBrightness(1, i.Token);
                lightNet7.SetBrightness(1, i.Token);
                lightNet8.SetBrightness(1, i.Token);
                lightTopper1.SetBrightness(1, i.Token);
                lightTopper2.SetBrightness(1, i.Token);
                lightXmasTree.SetBrightness(1, i.Token);
                lightStairs1.SetBrightness(1, i.Token);
                lightStairs2.SetBrightness(1, i.Token);
                lightRail1.SetBrightness(1, i.Token);
                lightRail2.SetBrightness(1, i.Token);
                lightSanta.SetBrightness(1, i.Token);
                lightSnowman.SetBrightness(1, i.Token);
                lightHat1.SetBrightness(1, i.Token);
                lightHat2.SetBrightness(1, i.Token);
                lightHat3.SetBrightness(1, i.Token);
                lightHat4.SetBrightness(1, i.Token);
                lightReindeer1.SetBrightness(1, i.Token);
                lightReindeer2.SetBrightness(1, i.Token);
                lightVader.SetColor(Color.Red, 1, i.Token);
                lightWall1.SetColor(Color.Red, 1, i.Token);
                lightWall2.SetColor(Color.Red, 1, i.Token);
                lightWall3.SetColor(Color.Red, 1, i.Token);

                saberPixels.SetColor(Color.Red, 0.4, i.Token);

                subCandyCane.Run();
                dmxPlayback.Run();

                i.WaitUntilCancel();

                dmxPlayback.Stop();
                Exec.Cancel(subCandyCane);
                pulsatingEffect4.Stop();
            });

            subCandyCane
            .LockWhenRunning(pixelsRoofEdge)
            .RunAction(i =>
            {
                const int spacing = 4;

                while (true)
                {
                    for (int x = 0; x < spacing; x++)
                    {
                        pixelsRoofEdge.Inject((x % spacing) == 0 ? Color.Red : Color.White, 0.5, i.Token);

                        i.WaitFor(S(0.30), true);
                    }
                }
            });

            subSnow
            .RunAction(ins =>
            {
                snowMachine.SetValue(true);

                ins.WaitFor(S(30));
            })
            .TearDown(i =>
            {
                snowMachine.SetValue(false);
            });

            subStarWarsCane
            .LockWhenRunning(
                pixelsRoofEdge,
                pixelsMatrix)
            .RunAction(instance =>
            {
                const int spacing = 4;

                while (!instance.CancelToken.IsCancellationRequested)
                {
                    for (int i = 0; i < spacing; i++)
                    {
                        switch (i % spacing)
                        {
                        case 0:
                        case 1:
                            pixelsRoofEdge.InjectRev(Color.Yellow, 1.0, instance.Token);
                            break;

                        case 2:
                        case 3:
                            pixelsRoofEdge.InjectRev(Color.Orange, 0.2, instance.Token);
                            break;
                        }

                        instance.WaitFor(S(0.1));

                        if (instance.IsCancellationRequested)
                        {
                            break;
                        }
                    }
                }
            });

            subMusic1
            .RunAction(ins =>
            {
                audioMain.PlayTrack("08 Feel the Light.wav");
                ins.WaitFor(S(240));
            }).TearDown(i =>
            {
                lorFeelTheLight.Stop();
                audioMain.PauseTrack();
            });

            subMusic2
            .RunAction(ins =>
            {
                snowMachine.SetValue(true);
                audioMain.PlayTrack("T.P.E. - 04 - Josh Groban - Believe.flac");
                ins.WaitFor(S(260));
            }).TearDown(i =>
            {
                snowMachine.SetValue(false);
                lorBelieve.Stop();
                audioMain.PauseTrack();
            });

            subSantaVideo
            .RunAction(i =>
            {
                pulsatingEffect3.Start();
                switch (random.Next(6))
                {
                case 0:
                    video3.PlayVideo("NBC_DeckTheHalls_Holl_H.mp4");
                    break;

                case 1:
                    video3.PlayVideo("NBC_AllThruHouse_Part1_Holl_H.mp4");
                    break;

                case 2:
                    video3.PlayVideo("NBC_AllThruHouse_Part2_Holl_H.mp4");
                    break;

                case 3:
                    video3.PlayVideo("NBC_AllThruHouse_Part3_Holl_H.mp4");
                    break;

                case 4:
                    video3.PlayVideo("NBC_JingleBells_Holl_H.mp4");
                    break;

                case 5:
                    video3.PlayVideo("NBC_WeWishYou_Holl_H.mp4");
                    break;
                }

                i.WaitFor(S(120), false);
                pulsatingEffect3.Stop();
            });

            subOlaf
            .RunAction(i =>
            {
                pulsatingEffect1.Start();
                audio1.PlayNewEffect("WarmHugs.wav", 0.0, 1.0);
                i.WaitFor(S(10));
                pulsatingEffect1.Stop();
            });

            subR2D2
            .RunAction(i =>
            {
                pulsatingEffect2.Start();
                audio1.PlayNewEffect("Im C3PO.wav", 1.0, 0.0);
                i.WaitFor(S(4));
                audio1.PlayNewEffect("Processing R2D2.wav", 0.5, 0.0);
                i.WaitFor(S(5));
                pulsatingEffect2.Stop();
            });

            subStarWars
            .LockWhenRunning(
                saberPixels,
                lightVader,
                lightR2D2)
            .RunAction(instance =>
            {
                //Exec.Cancel(subCandyCane);
                subStarWarsCane.Run();
                lightR2D2.SetBrightness(1.0, instance.Token);

                audioMain.PlayTrack("01. Star Wars - Main Title.wav");

                instance.WaitFor(S(16));

                /*
                 *  elJesus.SetPower(true);
                 *  pulsatingStar.Start();
                 *  lightJesus.SetColor(Color.White, 0.3);
                 *  light3wise.SetOnlyColor(Color.LightYellow);
                 *  light3wise.RunEffect(new Effect2.Fader(0.0, 1.0), S(1.0));*/

                Exec.MasterEffect.Fade(lightVader, 0.0, 1.0, 1000, token: instance.Token, additionalData: Utils.Data(Color.Red));
                instance.WaitFor(S(2.5));

                Exec.Cancel(subStarWarsCane);
                instance.WaitFor(S(0.5));

                audioDarthVader.PlayEffect("saberon.wav");
                for (int sab = 00; sab < 32; sab++)
                {
                    saberPixels.Inject(Color.Red, 0.5, instance.Token);
                    instance.WaitFor(S(0.01));
                }
                instance.WaitFor(S(1));
                audioMain.PauseTrack();

                lightVader.SetColor(Color.Red, 1.0, instance.Token);
                audioDarthVader.PlayEffect("father.wav");
                instance.WaitFor(S(5));

                lightVader.SetBrightness(0.0, instance.Token);
                //light3wise.TurnOff();
                //lightJesus.TurnOff();
                //pulsatingStar.Stop();
                //elJesus.TurnOff();

                audioDarthVader.PlayEffect("force1.wav");
                instance.WaitFor(S(4));

                audioDarthVader.PlayEffect("saberoff.wav");
                instance.WaitFor(S(0.7));
                for (int sab = 0; sab < 16; sab++)
                {
                    saberPixels.InjectRev(Color.Black, 0, instance.Token);
                    saberPixels.InjectRev(Color.Black, 0, instance.Token);
                    instance.WaitFor(S(0.01));
                }
                //elLightsaber.SetPower(false);
                instance.WaitFor(S(2));

                //lightJesus.TurnOff();
                //light3wise.TurnOff();
                //elLightsaber.TurnOff();
                //pulsatingStar.Stop();
                //elJesus.TurnOff();
                //instance.WaitFor(S(2));
            })
            .TearDown(i =>
            {
                audioMain.PauseTrack();
            });


            midiAkai.Note(midiChannel, 36).Subscribe(x =>
            {
                if (x)
                {
                    subOlaf.Run();
                }
            });

            midiAkai.Note(midiChannel, 37).Subscribe(x =>
            {
                if (x)
                {
                    subR2D2.Run();
                }
            });

            midiAkai.Note(midiChannel, 38).Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToState(States.Music1);
                }
                //                    audio2.PlayTrack("08 Feel the Light.wav");
            });

            midiAkai.Note(midiChannel, 39).Subscribe(x =>
            {
                if (x)
                {
                    lorFeelTheLight.Stop();
                    audioMain.PauseTrack();
                }
            });

            midiAkai.Note(midiChannel, 40).Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToState(States.SantaVideo);
                }
            });

            inOlaf.Output.Subscribe(x =>
            {
                if (x && hours.IsOpen)
                {
                    subOlaf.Run();
                }
            });

            inR2D2.Output.Subscribe(x =>
            {
                if (x && hours.IsOpen)
                {
                    subR2D2.Run();
                }
            });

            inRedButton.Output.Subscribe(x =>
            {
                if (x)
                {
                    if (hours.IsOpen)
                    {
                        if (stateMachine.CurrentState == States.Background)
                        {
                            stateMachine.GoToState(States.DarthVader);
                        }
                    }
                    else
                    {
                        audioDarthVader.PlayEffect("darthvader_lackoffaith.wav");
                    }
                }
            });

            inBlueButton.Output.Subscribe(x =>
            {
                if (x)
                {
                    if (hours.IsOpen)
                    {
                        subSnow.Run();
                        if (stateMachine.CurrentState == States.Background)
                        {
                            stateMachine.GoToState(States.Music2);
                        }
                    }
                    else
                    {
                        audioDarthVader.PlayEffect("darkside.wav");
                    }
                }
            });

            audioMain.AudioTrackStart += (o, e) =>
            {
                switch (e.FileName)
                {
                case "08 Feel the Light.wav":
                    lorFeelTheLight.Start(27830);
                    break;

                case "T.P.E. - 04 - Josh Groban - Believe.flac":
                    lorBelieve.Start();
                    break;
                }
            };

            audioMain.AudioTrackDone += (o, e) =>
            {
                //                Thread.Sleep(5000);
                //    audio2.PlayTrack("08 Feel the Light.wav");
            };

            inShowMachine.Output.Subscribe(x =>
            {
                snowMachine.SetValue(x);
                //                lightRedButton.SetBrightness(x ? 1.0 : 0.0);
                //if (x)
                //    stateMachine.GoToState(States.Music1);
            });

            in2.Output.Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToIdle();
                }
            });

            in3.Output.Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToDefaultState();
                }
            });

            ImportAndMapFeelTheLight();
            ImportAndMapBelieve();
        }