Exemplo n.º 1
0
 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     if (foundOmniMIDI)
     {
         KDMAPI.TerminateKDMAPIStream();
     }
 }
Exemplo n.º 2
0
 private void DisableKDMAPI_Click(object sender, RoutedEventArgs e)
 {
     if (OmniMIDIDisabled)
     {
         disableKDMAPI.Content    = Resources["disableKDMAPI"];
         OmniMIDIDisabled         = false;
         settings.playbackEnabled = true;
         try
         {
             Console.WriteLine("Loading KDMAPI...");
             KDMAPI.InitializeKDMAPIStream();
             Console.WriteLine("Loaded!");
         }
         catch { }
     }
     else
     {
         disableKDMAPI.Content    = Resources["enableKDMAPI"];
         OmniMIDIDisabled         = true;
         settings.playbackEnabled = false;
         try
         {
             Console.WriteLine("Unloading KDMAPI");
             KDMAPI.TerminateKDMAPIStream();
         }
         catch { }
     }
 }
Exemplo n.º 3
0
 protected override void OnKeyDown(KeyboardKeyEventArgs e)
 {
     base.OnKeyDown(e);
     if (e.Key == Key.Space && !settings.ffRender)
     {
         settings.Paused = !settings.Paused;
     }
     if (e.Key == Key.Right && !settings.ffRender)
     {
         int skip = settings.skip;
         if (e.Modifiers == KeyModifiers.Control)
         {
             skip += 20000;
         }
         if (e.Modifiers == KeyModifiers.Shift)
         {
             skip += 60000;
         }
         if (settings.timeBasedNotes)
         {
             midiTime += skip;
         }
         else
         {
             lock (midi)
             {
                 double timeSkipped = 0;
                 for (; timeSkipped < skip; ++midiTime)
                 {
                     midi.ParseUpTo(midiTime);
                     timeSkipped += 1 / midi.tempoTickMultiplier;
                 }
             }
             Task.Run(() =>
             {
                 Console.WriteLine("Resetting KDMAPI Stream...");
                 try
                 {
                     KDMAPI.ResetKDMAPIStream();
                     Console.WriteLine("Done");
                 }
                 catch
                 {
                     Console.WriteLine("Failed to reset KDMAPI Stream.");
                 }
             });
         }
     }
     if (e.Key == Key.Enter)
     {
         if (WindowState != WindowState.Fullscreen)
         {
             WindowState = WindowState.Fullscreen;
         }
         else
         {
             WindowState = WindowState.Normal;
         }
     }
 }
Exemplo n.º 4
0
 public GeneralSettings()
 {
     try
     {
         SelectedMIDIDevice = KDMAPI.IsKDMAPIAvailable() ? -1 : 0;
     }
     catch { SelectedMIDIDevice = 0; }
 }
Exemplo n.º 5
0
        void PlaybackLoop()
        {
            PlaybackEvent pe;
            int           timeJump;
            long          now;

            playbackLoopStarted = true;
            if (settings.ffRender)
            {
                return;
            }
            if (settings.Paused || !settings.playbackEnabled)
            {
                SpinWait.SpinUntil(() => !(settings.Paused || !settings.playbackEnabled));
            }
            KDMAPI.ResetKDMAPIStream();
            KDMAPI.SendDirectData(0x0);
            while (settings.running)
            {
                if (settings.Paused || !settings.playbackEnabled)
                {
                    SpinWait.SpinUntil(() => !(settings.Paused || !settings.playbackEnabled));
                }
                try
                {
                    if (globalPlaybackEvents.ZeroLen)
                    {
                        continue;
                    }
                    pe  = globalPlaybackEvents.Pop();
                    now = DateTime.Now.Ticks;
                    if (now - 10000000 > frameStartTime)
                    {
                        SpinWait.SpinUntil(() => now - 10000000 < frameStartTime);
                    }
                    timeJump = (int)(((pe.pos - midiTime) * microsecondsPerTick / settings.tempoMultiplier - now + frameStartTime) / 10000);
                    if (timeJump < -1000)
                    {
                        continue;
                    }
                    if (timeJump > 0)
                    {
                        Thread.Sleep(timeJump);
                    }
                    if (settings.playSound && settings.playbackEnabled)
                    {
                        try
                        {
                            KDMAPI.SendDirectData((uint)pe.val);
                        }
                        catch { continue; }
                    }
                }
                catch { continue; }
            }
            KDMAPI.ResetKDMAPIStream();
            KDMAPI.SendDirectData(0x0);
        }
Exemplo n.º 6
0
        public void Send(MIDIEvent[] events)
        {
            foreach (MIDIEvent e in events)
            {
                var offset = e.time * 1000 - timer.getStopWatch().ElapsedMilliseconds;
                if (offset > 0)
                {
                    Thread.Sleep((int)offset);
                }

                KDMAPI.SendDirectData(e.data);
            }
        }
Exemplo n.º 7
0
 public GeneralSettings()
 {
     try
     {
         SelectedMIDIDevice = KDMAPI.IsKDMAPIAvailable() ? -1 : 0;
     }
     catch { SelectedMIDIDevice = 0; }
     if (MaxRenderThreads <= 0)
     {
         MaxRenderThreads = Environment.ProcessorCount;
     }
     if (MaxRenderThreads > Environment.ProcessorCount)
     {
         MaxRenderThreads = Environment.ProcessorCount;
     }
 }
Exemplo n.º 8
0
        public static void Main()
        {
            new MainWindow().ShowDialog();
            return;


            MidiLoader loader = new MidiLoader("F:/Music/Black MIDIs/Evans LOLEX MODE II 4.0.mid");

            KDMAPI.InitializeKDMAPIStream();

            Console.WriteLine("Playing...");
            Timer timer = new Timer();

            for (uint i = 0; i < loader.File.MIDINoteEvents.Length; i++)
            {
                StartThread(loader.File.MIDINoteEvents[i], timer);
            }

            timer.Start();

            Thread.Sleep(-1);

            KDMAPI.TerminateKDMAPIStream();
        }
Exemplo n.º 9
0
        public MainWindow()
        {
            InitializeComponent();

            SourceInitialized += (s, e) =>
            {
                IntPtr handle = (new WindowInteropHelper(this)).Handle;
                HwndSource.FromHwnd(handle).AddHook(new HwndSourceHook(WindowProc));
            };

            tempoMultSlider.nudToSlider = v => Math.Log(v, 2);
            tempoMultSlider.sliderToNud = v => Math.Pow(2, v);

            dynamic sett = JsonConvert.DeserializeObject(File.ReadAllText("settings.json"));

            if (sett.defaultBackground != "")
            {
                try
                {
                    bgImagePath.Text = sett.defaultBackground;
                    settings.BGImage = new Bitmap(bgImagePath.Text);
                }
                catch
                {
                    settings.BGImage = null;
                    if (bgImagePath.Text != "")
                    {
                        MessageBox.Show("Couldn't load default background image");
                    }
                }
            }
            if ((bool)sett.ignoreKDMAPI)
            {
                foundOmniMIDI = false;
            }
            defaultPlugin = (string)sett.defaultPlugin;
            JArray size = sett.settingsWindowSize;

            Width  = (double)size[0];
            Height = (double)size[1];

            Task omnimidiLoader = null;

            if (foundOmniMIDI)
            {
                omnimidiLoader = Task.Run(() =>
                {
                    try
                    {
                        KDMAPI.InitializeKDMAPIStream();
                        Console.WriteLine("Loaded KDMAPI!");
                    }
                    catch
                    {
                        Console.WriteLine("Failed to load KDMAPI, disabling");
                        foundOmniMIDI = false;
                    }
                });
            }
            if (!foundOmniMIDI)
            {
                disableKDMAPI.IsEnabled = false;
            }
            settings = new RenderSettings();
            settings.PauseToggled += ToggledPause;
            InitialiseSettingsValues();
            creditText.Text = "Video was rendered with Zenith\nhttps://arduano.github.io/Zenith-MIDI/start";

            var languagePacks = Directory.GetDirectories("Languages");

            foreach (var language in languagePacks)
            {
                var resources = Directory.GetFiles(language).Where((l) => l.EndsWith(".xaml")).ToList();
                if (resources.Count == 0)
                {
                    continue;
                }

                Dictionary <string, ResourceDictionary> fullDict = new Dictionary <string, ResourceDictionary>();
                foreach (var r in resources)
                {
                    ResourceDictionary file = new ResourceDictionary();
                    file.Source = new Uri(Path.GetFullPath(r), UriKind.RelativeOrAbsolute);
                    var name = Path.GetFileNameWithoutExtension(r);
                    fullDict.Add(name, file);
                }
                if (!fullDict.ContainsKey("window"))
                {
                    continue;
                }
                if (fullDict["window"].Contains("LanguageName") && fullDict["window"]["LanguageName"].GetType() == typeof(string))
                {
                    Languages.Add(fullDict);
                }
            }
            Languages.Sort(new Comparison <Dictionary <string, ResourceDictionary> >((d1, d2) =>
            {
                if ((string)d1["window"]["LanguageName"] == "English")
                {
                    return(-1);
                }
                if ((string)d2["window"]["LanguageName"] == "English")
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            }));
            foreach (var lang in Languages)
            {
                var item = new ComboBoxItem()
                {
                    Content = lang["window"]["LanguageName"]
                };
                languageSelect.Items.Add(item);
            }
            languageSelect.SelectedIndex = 0;
            if (omnimidiLoader != null)
            {
                omnimidiLoader.GetAwaiter().GetResult();
            }
        }