Ejemplo n.º 1
0
        async private void OnOpenMenuClick(object sender, EventArgs e)
        {
            var openDialog = new OpenFileDialog();

            openDialog.Filter      = "O2Jam Chart File|*.ojn";
            openDialog.Multiselect = true;

            if (openDialog.ShowDialog() == DialogResult.OK)
            {
                int count = charts.Count;
                AddChart(openDialog.FileNames);

                if (charts.Count > 0 && openDialog.FileNames.Length > 0)
                {
                    try
                    {
                        var header = await ChartDecoder.DecodeHeaderAsync(openDialog.FileNames[0]);

                        var item = MusicList.Items.Cast <ListViewItem>().FirstOrDefault((listItem) => listItem.Text == header.Title);

                        MusicList.FocusedItem = item;
                        BtnPlay.PerformClick();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void AddChart(string[] filenames)
        {
            bool initial = MusicList.Items.Count == 0;
            var  err     = new List <string>();

            MusicList.BeginUpdate();
            {
                LoadingForm loader = null;
                loader = new LoadingForm(async() =>
                {
                    float progress = 0;
                    foreach (string filename in filenames)
                    {
                        Chart chart = null;
                        try
                        {
                            if (charts.FirstOrDefault((existing) => existing.Filename == filename) == null)
                            {
                                chart = await ChartDecoder.DecodeHeaderAsync(filename, (int)OJN.Difficulty.HX);
                                charts.Add(chart);

                                var item = new ListViewItem(new string[] {
                                    chart.Title,
                                    chart.Artist,
                                    chart.Pattern,
                                    chart.Duration.ToString(@"mm\:ss")
                                });

                                MusicList.Items.Add(item);
                            }
                        }
                        catch (Exception ex)
                        {
                            err.Add(string.Format("{0}: {1}", Path.GetFileName(filename), ex.Message));
                        }

                        progress++;
                        if (loader.IsHandleCreated)
                        {
                            loader.SetStatus(string.Format("Processing {0} - {1}", Path.GetFileName(filename), chart?.Title));
                            loader.SetProgress((progress / filenames.Length) * 100f);
                        }
                    }

                    loader.Close();
                });

                loader.ShowDialog();
                if (MusicList.ListViewItemSorter == null)
                {
                    var listSorter = new ListViewColumnSorter();
                    listSorter.Order = SortOrder.Ascending;

                    MusicList.ListViewItemSorter = listSorter;
                }

                var sorter      = MusicList.ListViewItemSorter as ListViewColumnSorter;
                var chartSorter = new ChartSorter();
                chartSorter.SortType = (ChartSortType)sorter.SortColumn;
                chartSorter.Order    = sorter.Order;

                MusicList.Sort();
                charts?.Sort(chartSorter);
            }
            MusicList.EndUpdate();

            if (err.Count > 0)
            {
                string errfn = "";
                foreach (string fn in err)
                {
                    errfn += fn + Environment.NewLine;
                }

                MessageBox.Show("Failed to decode following charts: " + Environment.NewLine + errfn, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            if (charts.Count > 0 && initial)
            {
                playback.Track = 0;
                GenerateOJNListMenu.Enabled   = SavePlaylistMenu.Enabled =
                    RenderMenu.Enabled        = OpenMenu.Enabled =
                        GroupPlayback.Enabled = PlaybackMenu.Enabled = true;
            }
        }
Ejemplo n.º 3
0
        async private void OnBtnPlayClick(object sender, EventArgs e)
        {
            if (playback.Renderer != null && playback.Renderer.IsPaused)
            {
                playback.Renderer.Resume();
                return;
            }

            if (MusicList.FocusedItem == null)
            {
                if (MusicList.Items.Count > 0)
                {
                    MusicList.FocusedItem = MusicList.Items[0];
                }
                else
                {
                    return;
                }
            }

            if (playback.Renderer != null && playback.Renderer.IsRendering &&
                MusicList.FocusedItem.Index == playback.Track)
            {
                return;
            }

            Chart chart = null;

            try
            {
                BtnEditMeta.Enabled = GroupUtilities.Enabled = RenderToFileMenu.Enabled = RenderSelectedMenu.Enabled = true;
                if (playback.Renderer == null)
                {
                    var renderer = new ChartRenderer();
                    renderer.Rendering += ((send, args) => {
                        string offset = string.Format("{0} / {1}", renderer.Elapsed.ToString(@"mm\:ss"), renderer.Duration.ToString(@"mm\:ss"));
                        string status = string.Format("{0} - {1}", offset, renderer.Chart.Title);

                        lblPlayingOffset.SetTextAsync(offset);
                        StatusStrip.Invoke(new Action(() => StatusLabel.Text = renderer.IsPaused ? "Paused - " + renderer.Chart.Title : status));
                    });

                    renderer.RenderComplete += OnRenderComplete;
                    playback.Renderer        = renderer;
                }
                else
                {
                    playback.Renderer.Stop();
                    await renderTask;
                }

                OpenMenu.Enabled = GroupPlayback.Enabled = PlaybackMenu.Enabled = false;
                playback.Track   = MusicList.FocusedItem.Index;

                var header = charts[playback.Track];
                SetLayoutInfo(header, true);
                SetHighlightState(true);

                BtnSaveThumbnail.Enabled = header.ThumbnailData != null && header.ThumbnailData.Length > 0;
                BtnSaveCover.Enabled     = header.CoverArtData != null && header.CoverArtData.Length > 0;

                chart = await ChartDecoder.DecodeAsync(header.Filename, DifficultyBox.SelectedIndex);

                if (chart == null)
                {
                    throw new Exception("Invalid / unsupported chart file.");
                }

                //foreach (var ev in chart.Events)
                //{
                //    var sample = ev as Event.Sound;
                //    if (sample != null)
                //        sample.Payload = null;
                //}
                renderTask = playback.Renderer.RenderAsync(chart);
            }
            catch (Exception ex)
            {
                StatusLabel.Text = "Ready";
                MessageBox.Show(ex.Message, "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                OpenMenu.Enabled = GroupPlayback.Enabled = PlaybackMenu.Enabled = true;
                await renderTask;
            }
        }
Ejemplo n.º 4
0
        private void OnStartButtonClick(object sender, EventArgs e)
        {
            string filename  = "";
            string directory = "";
            string err       = "";

            int format  = FormatSelector.SelectedIndex;
            int freq    = int.Parse(FrequencySelector.SelectedItem.ToString().Split(' ').First());
            int channel = StereoRadio.Checked ? 2 : 1;

            if (charts.Length == 1)
            {
                var saveDialog = new SaveFileDialog();
                saveDialog.FileName = string.Format("{0} - {1}", charts[0].Artist, charts[0].Title);

                if (format == 0)
                {
                    saveDialog.FileName += ".mp3";
                    saveDialog.Filter    = "MP3 - MPEG-1 Audio Layer 3|*.mp3";
                }
                else if (format == 1)
                {
                    saveDialog.FileName += ".ogg";
                    saveDialog.Filter    = "OGG - Vorbis Audio|*.ogg";
                }
                else
                {
                    saveDialog.FileName += ".wav";
                    saveDialog.Filter    = "WAV - Waveform Audio|*.wav";
                }

                if (saveDialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                filename = saveDialog.FileName;
            }
            else if (charts.Length > 1)
            {
                var browserDialog = new FolderBrowserDialog();
                browserDialog.ShowNewFolderButton = true;

                if (browserDialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                directory = browserDialog.SelectedPath;
            }

            LoadingForm loader = null;

            loader = new LoadingForm(async() =>
            {
                float progress = 0;
                loader.SetStatus("Initializing..");

                foreach (var chart in charts)
                {
                    try
                    {
                        loader.SetStatus(string.Format("Prerendering {0}..", chart.Title));

                        var fullChart = await ChartDecoder.DecodeAsync(chart.Filename, 2);
                        var data      = await Prerender(fullChart, format, channel, freq);

                        if (charts.Length == 1)
                        {
                            File.WriteAllBytes(filename, data);
                        }
                        else if (charts.Length > 1)
                        {
                            filename = string.Format("{0} - {1}", chart.Artist, chart.Title);
                            if (format == 0)
                            {
                                filename += ".mp3";
                            }
                            else if (format == 1)
                            {
                                filename += ".ogg";
                            }
                            else
                            {
                                filename += ".wav";
                            }

                            filename = string.Format("{0}{1}{2}",
                                                     directory,
                                                     Path.DirectorySeparatorChar,
                                                     filename
                                                     );

                            File.WriteAllBytes(filename, data);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (charts.Length == 1)
                        {
                            err = ex.Message;
                            loader.DialogResult = DialogResult.Cancel;
                            loader.Close();
                        }
                    }
                    finally
                    {
                        progress++;
                        loader.SetProgress((progress / charts.Length) * 100f);
                    }
                }

                loader.Close();
            });

            if (loader.ShowDialog() == DialogResult.Abort)
            {
                if (charts.Length == 1)
                {
                    MessageBox.Show("Failed to prerender the chart into file\n." + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else if (!string.IsNullOrEmpty(directory))
                {
                    MessageBox.Show("Failed to render following charts:\n." + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                MessageBox.Show("Prerender has been completed successfully.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            Close();
        }