コード例 #1
0
        public GenDiffConfig(SongCacheItem item,
                             bool copyTextEvents, bool copyGuitarToBass,
                             bool selectedDiffOnly, bool selectedTrackOnly,
                             bool generate108Events)
        {
            Generate108Events = generate108Events;
            CopyTextEvents    = copyTextEvents;

            if (item != null)
            {
                ProcessingSong        = true;
                EnableProGuitarHard   = item.AutoGenGuitarHard;
                EnableProGuitarMedium = item.AutoGenGuitarMedium;
                EnableProGuitarEasy   = item.AutoGenGuitarEasy;

                EnableProBassHard   = item.AutoGenBassHard;
                EnableProBassMedium = item.AutoGenBassMedium;
                EnableProBassEasy   = item.AutoGenBassEasy;

                CopyGuitarToBass = item.CopyGuitarToBass;
            }
            else
            {
                ProcessingSong   = false;
                CopyGuitarToBass = copyGuitarToBass;
            }

            SelectedDifficultyOnly = selectedDiffOnly;
            SelectedTrackOnly      = selectedTrackOnly;
        }
コード例 #2
0
        public bool AddNewSongToLibrary(bool silent)
        {
            ClearDTAFileProperties();

            var songName = "";

            if (FileNameG5.IsNotEmpty())
            {
                songName = FileNameG5.GetFileNameWithoutExtension();
            }

            if (songName.IsEmpty() && FileNamePro.IsNotEmpty())
            {
                songName = FileNamePro.GetFileNameWithoutExtension();
            }

            if (songName.IsEmpty())
            {
                if (!silent)
                {
                    MessageBox.Show("Cannot find song name in package");
                }
                return false;
            }

            foreach (var sc in SongList)
            {
                if (sc.SongName.EqualsEx(songName) || sc.DTASongShortName.EqualsEx(songName) ||
                    (sc.G5FileName.IsNotEmpty() && sc.G5FileName.GetFileName().EqualsEx(FileNameG5.GetFileName())) ||
                    (sc.G6FileName.IsNotEmpty() && sc.G6FileName.GetFileName().EqualsEx(FileNamePro.GetFileName())))
                {
                    SongList.SelectedSong = sc;
                    return OpenSongCacheItem(SongList.SelectedSong);
                }
            }

            var i = new SongCacheItem()
            {
                G5FileName = FileNameG5,
                G6FileName = FileNamePro,
                G6ConFile = "",
                Description = songName,
                SongName = songName,
                CopyGuitarToBass = false,
                HasBass = true,
                CacheSongID = GetNextSongID(),
            };

            SongList.AddSong(i);

            if (OpenSongCacheItem(i))
            {
                if (FindDTAInformation(i))
                {
                    UpdateSongCacheItem(i);
                }
            }

            return OpenSongCacheItem(SongList.SelectedSong);
        }
コード例 #3
0
        public void UpdateSongCacheItem(SongCacheItem sc)
        {
            if (sc != null)
            {
                sc.G5FileName = textBoxSongLibG5MidiFileName.Text;
                sc.G6FileName = textBoxSongLibProMidiFileName.Text;
                sc.G6ConFile = textBoxSongLibConFile.Text;

                sc.Description = textBox24.Text;

                sc.HasBass = checkBoxSongLibHasBass.Checked;
                sc.HasGuitar = checkBoxSongLibHasGuitar.Checked;
                sc.CopyGuitarToBass = checkBoxSongLibCopyGuitar.Checked;
                sc.IsComplete = checkBoxSongLibIsComplete.Checked;
                sc.IsFinalized = checkBoxSongLibIsFinalized.Checked;

                sc.GuitarTuning[0] = textBox37.Text;
                sc.GuitarTuning[1] = textBox38.Text;
                sc.GuitarTuning[2] = textBox39.Text;
                sc.GuitarTuning[3] = textBox40.Text;
                sc.GuitarTuning[4] = textBox41.Text;
                sc.GuitarTuning[5] = textBox42.Text;

                sc.BassTuning[0] = textBox43.Text;
                sc.BassTuning[1] = textBox44.Text;
                sc.BassTuning[2] = textBox45.Text;
                sc.BassTuning[3] = textBox46.Text;
                sc.BassTuning[4] = textBox47.Text;
                sc.BassTuning[5] = textBox48.Text;

                sc.DTABassDifficulty = comboProBDifficulty.SelectedIndex;
                sc.DTAGuitarDifficulty = comboProGDifficulty.SelectedIndex;
                sc.DTASongID = textBoxCONSongID.Text;
                sc.DTASongShortName = textBoxCONShortName.Text;

                sc.SongMP3Location = textBoxSongPropertiesMP3Location.Text;

                sc.SongMP3PlaybackOffset = textBoxSongPropertiesMP3StartOffset.Text.ToInt();
                sc.EnableSongMP3Playback = checkBoxSongPropertiesEnableMP3Playback.Checked;

                sc.SongMidiPlaybackVolume = this.trackBarMidiVolume.Value;
                sc.SongMP3PlaybackVolume = this.trackBarMP3Volume.Value;
                sc.EnableSongMidiPlayback = this.checkBoxEnableMidiPlayback.Checked;

                enableMidiPlayback(sc.EnableSongMidiPlayback);
                enableMP3Playback(sc.EnableSongMP3Playback);

                sc.AutoGenGuitarHard = checkBoxAutoGenGuitarHard.Checked;
                sc.AutoGenGuitarMedium = checkBoxAutoGenGuitarMedium.Checked;
                sc.AutoGenGuitarEasy = checkBoxAutoGenGuitarEasy.Checked;

                sc.AutoGenBassHard = checkBoxAutoGenBassHard.Checked;
                sc.AutoGenBassMedium = checkBoxAutoGenBassMedium.Checked;
                sc.AutoGenBassEasy = checkBoxAutoGenBassEasy.Checked;

                SongList.UpdateSongCacheItem(sc);

                UpdateEditorPropertiesForSong();
            }
        }
コード例 #4
0
 public void UpdateCONFileProperties(SongCacheItem sc)
 {
     if (sc != null)
     {
         if (SaveProCONFile(sc, false, false))
         {
             OpenProCONFile(sc, true);
         }
     }
 }
コード例 #5
0
        public void SetSelectedSongItem(SongCacheItem sc)
        {
            trackEditorG5.ViewLyrics = settings.GetValueBool("View Lyrics in G5 Editor", true);

            CloseG5Track();
            CloseProTrack();

            if (sc != null)
            {
                SelectedSong = sc;

                var i = SongList.IndexOf(sc);
                SongList.SelectedSong = sc;

                settings.SetValue("lastSelectedSongItem", sc.ToString());
                label37.Text = sc.SongName;

                textBoxSongLibG5MidiFileName.SetValueSuspend(sc.G5FileName).ScrollToEnd();

                textBoxSongLibProMidiFileName.SetValueSuspend(sc.G6FileName).ScrollToEnd();
                textBoxSongLibConFile.SetValueSuspend(sc.G6ConFile).ScrollToEnd();
                textBox24.SetValueSuspend(sc.Description).ScrollToEnd();

                checkBoxSongLibHasBass.SetValueSuspend(sc.HasBass);
                checkBoxSongLibHasGuitar.SetValueSuspend(sc.HasGuitar);
                checkBoxSongLibCopyGuitar.SetValueSuspend(sc.CopyGuitarToBass);
                checkBoxSongLibIsComplete.SetValueSuspend(sc.IsComplete);
                checkBoxSongLibIsFinalized.SetValueSuspend(sc.IsFinalized);

                textBox37.SetValueSuspend(sc.GuitarTuning[0]);
                textBox38.SetValueSuspend(sc.GuitarTuning[1]);
                textBox39.SetValueSuspend(sc.GuitarTuning[2]);
                textBox40.SetValueSuspend(sc.GuitarTuning[3]);
                textBox41.SetValueSuspend(sc.GuitarTuning[4]);
                textBox42.SetValueSuspend(sc.GuitarTuning[5]);

                textBox43.SetValueSuspend(sc.BassTuning[0]);
                textBox44.SetValueSuspend(sc.BassTuning[1]);
                textBox45.SetValueSuspend(sc.BassTuning[2]);
                textBox46.SetValueSuspend(sc.BassTuning[3]);
                textBox47.SetValueSuspend(sc.BassTuning[4]);
                textBox48.SetValueSuspend(sc.BassTuning[5]);

                comboProBDifficulty.SetValueSuspend(sc.DTABassDifficulty);
                comboProGDifficulty.SetValueSuspend(sc.DTAGuitarDifficulty);
                textBoxCONSongID.SetValueSuspend(sc.DTASongID);
                textBoxCONShortName.SetValueSuspend(sc.DTASongShortName);

                FileNameG5 = sc.G5FileName;
                FileNamePro = sc.G6FileName;

                textBoxSongPropertiesMP3StartOffset.SetValueSuspend(sc.SongMP3PlaybackOffset.ToStringEx());
                textBoxSongPropertiesMP3Location.SetValueSuspend(sc.SongMP3Location).ScrollToEnd();

                if (mp3Player.PlayingMP3File)
                {
                    mp3Player.Stop();
                }

                this.trackBarMidiVolume.SetValueSuspend(sc.SongMidiPlaybackVolume);
                this.trackBarMP3Volume.SetValueSuspend(sc.SongMP3PlaybackVolume);

                checkBoxEnableMidiPlayback.SetValueSuspend(sc.EnableSongMidiPlayback);
                checkBoxSongPropertiesEnableMP3Playback.SetValueSuspend(sc.EnableSongMP3Playback);

                enableMidiPlayback(checkBoxEnableMidiPlayback.Checked);
                enableMP3Playback(checkBoxSongPropertiesEnableMP3Playback.Checked);

                ApplyMidiVolumeChange(sc.SongMidiPlaybackVolume);
                ApplyMP3VolumeChange(sc.SongMP3PlaybackVolume);

                checkBoxAutoGenGuitarHard.SetValueSuspend(sc.AutoGenGuitarHard);
                checkBoxAutoGenGuitarMedium.SetValueSuspend(sc.AutoGenGuitarMedium);
                checkBoxAutoGenGuitarEasy.SetValueSuspend(sc.AutoGenGuitarEasy);

                checkBoxAutoGenBassHard.SetValueSuspend(sc.AutoGenBassHard);
                checkBoxAutoGenBassMedium.SetValueSuspend(sc.AutoGenBassMedium);
                checkBoxAutoGenBassEasy.SetValueSuspend(sc.AutoGenBassEasy);

                RefreshTracks();

            }
            else if (SelectedSong != null)
            {
                SelectedSong = null;
                SongList.SelectedSong = null;

                PUEExtensions.TryExec(delegate()
                {
                    if (mp3Player.PlayingMP3File)
                    {
                        mp3Player.Stop();
                    }
                });

                listBoxSongLibrary.SelectedItems.Clear();

                label37.Text = "None Selected";
                textBoxSongLibG5MidiFileName.Text = "";

                textBoxSongLibProMidiFileName.Text = "";

                textBoxSongLibConFile.Text = "";

                textBox24.Text = "";

                checkBoxSongLibHasBass.Checked = false;
                checkBoxSongLibHasGuitar.Checked = false;
                checkBoxSongLibCopyGuitar.Checked = false;
                checkBoxSongLibIsComplete.Checked = false;
                checkBoxSongLibIsFinalized.Checked = false;

                textBox37.Text = "";
                textBox38.Text = "";
                textBox39.Text = "";
                textBox40.Text = "";
                textBox41.Text = "";
                textBox42.Text = "";

                textBox43.Text = "";
                textBox44.Text = "";
                textBox45.Text = "";
                textBox46.Text = "";
                textBox47.Text = "";
                textBox48.Text = "";

                comboProBDifficulty.SelectedIndex = 0;
                comboProGDifficulty.SelectedIndex = 0;
                textBoxCONSongID.Text = "";
                textBoxCONShortName.Text = "";

                FileNameG5 = "";
                FileNamePro = "";

                textBoxSongPropertiesMP3Location.Text = "";

                if (settings.GetValueBool("Keep Midi Playback Selection", false) == false)
                {
                    textBoxSongPropertiesMP3StartOffset.Text = "";
                    checkBoxSongPropertiesEnableMP3Playback.Checked = false;
                    checkBoxEnableMidiPlayback.Checked = true;
                    this.trackBarMidiVolume.Value = 100;
                    this.trackBarMP3Volume.Value = 100;
                }
                if (settings.GetValueBool("Keep Auto Gen Difficulty Selection", false) == false)
                {
                    checkBoxAutoGenGuitarHard.Checked = false;
                    checkBoxAutoGenGuitarMedium.Checked = false;
                    checkBoxAutoGenGuitarEasy.Checked = false;

                    checkBoxAutoGenBassHard.Checked = false;
                    checkBoxAutoGenBassMedium.Checked = false;
                    checkBoxAutoGenBassEasy.Checked = false;
                }
                RefreshTracks();
            }
        }
コード例 #6
0
        public bool SaveSongCacheItem(SongCacheItem item, bool silent)
        {
            var ret = false;
            try
            {
                if (item != null)
                {
                    UpdateSongCacheItem(item);
                    item.IsDirty = false;

                    ret = SaveProFile(item.G6FileName, silent);
                }
                else
                {
                    ret = true;
                }
            }
            catch { }
            return ret;
        }
コード例 #7
0
        public bool SaveProCONFile(SongCacheItem sc, bool silent, bool batch, bool saveAs = false)
        {
            bool ret = false;
            if (sc == null)
                return ret;
            try
            {

                var fileName = saveAs ? "" : sc.G6ConFile;

                if (fileName.IsEmpty())
                {
                    var f = GetShortFileNameFromG5(sc);
                    if (f.IsNotEmpty())
                    {
                        f += Utility.DefaultCONFileExtension;
                    }
                    fileName = ShowSaveFileDlg("Save CON Package",
                        DefaultConFileLocation,
                        DefaultConFileLocation.PathCombine(f));

                    if (fileName.IsNotEmpty())
                    {
                        sc.G6ConFile = fileName;
                        textBoxSongLibConFile.Text = sc.G6ConFile;
                    }
                }

                if (fileName.IsNotEmpty())
                {
                    byte[] proTrack = null;

                    using (var ms = EditorPro.Sequence.Save())
                    {
                        ms.Seek(0, SeekOrigin.Begin);
                        using (var bw = new BinaryReader(ms))
                        {
                            proTrack = bw.ReadBytes((int)ms.Length);
                        }
                    }
                    if (proTrack == null || proTrack.Length == 0)
                    {
                        if (!silent)
                            MessageBox.Show("Unable to retrieve pro midi file");
                        return ret;
                    }

                    byte[] existingCON = null;

                    if (fileName.FileExists())
                    {
                        existingCON = ReadFileBytes(fileName);
                    }

                    var config = new Package.CreateProConfig()
                    {
                        TitleID = Utility.RockBand3TitleID,
                        existingCONFile = existingCON,
                        proMidiFileName = sc.G6FileName.GetFileName(),
                        midFileContents = proTrack,
                        displayTitle = sc.Description,
                        description = sc.Description,
                        songShortName = sc.DTASongShortName,
                        song_id = sc.DTASongID,
                        guitarDifficulty = InstrumentDifficultyUtil.MapDifficulty((InstrumentDifficulty)sc.DTAGuitarDifficulty),
                        bassDifficulty = InstrumentDifficultyUtil.MapDifficulty((InstrumentDifficulty)sc.DTABassDifficulty),
                    };

                    var con = Package.CreateRB3Pro(config);

                    if (con != null && con.Length > 0)
                    {
                        if (batch == false || (batch == true && !checkBoxSmokeTest.Checked))
                        {
                            if (!TryWriteFile(fileName, con))
                            {
                                if (!silent)
                                    MessageBox.Show("Cannot write file");
                            }
                        }

                        var pk = Package.Load(fileName);

                        if (pk == null)
                        {
                            if (!silent)
                                MessageBox.Show("Validate package failed");
                        }
                        else
                        {
                            ret = true;

                            if (settings.GetValueBool("Save plus.mid with con", false))
                            {
                                try
                                {
                                    var plusFileName = fileName.GetFolderName() +
                                        sc.G6FileName.GetFileNameWithoutExtension() +
                                        "_plus.mid";
                                    TryWriteFile(plusFileName, ReadFileBytes(sc.G6FileName));
                                }
                                catch { }
                            }
                        }
                    }
                    else
                    {
                        if (!silent)
                            MessageBox.Show("Cannot create CON Package");
                    }
                }
            }
            catch { Debug.WriteLine("crypto error"); }
            return ret;
        }
コード例 #8
0
        public bool CheckCONPackageDTA(SongCacheItem item, bool silent)
        {
            bool ret = false;

            if (item == null)
                return ret;
            List<string> fileErrors = new List<string>();
            try
            {
                if (string.IsNullOrEmpty(item.G6FileName))
                {
                    fileErrors.Add("Guitar Midi file name missing");
                }
                if (string.IsNullOrEmpty(item.G6ConFile))
                {
                    fileErrors.Add("Missing CON File");
                }
                else
                {
                    var pk = Package.Load(ReadFileBytes(item.G6ConFile));
                    CheckConPackage(pk, ref fileErrors, item);

                }
            }
            catch (Exception ex)
            {
                if (silent)
                {
                    WriteBatchResult("Unhandled exception processing: " + item.ToString());
                }
                else
                {
                    MessageBox.Show("Unhandled exception : " + ex.Message);
                }
            }

            if (fileErrors.Count > 0)
            {
                if (silent)
                {
                    WriteBatchResult("Errors in - " + item.ToString());
                }
            }
            else
            {
                ret = true;
            }
            var sb = new StringBuilder();
            foreach (string s in fileErrors)
            {
                if (silent)
                {
                    WriteBatchResult(s);
                }
                else
                {
                    sb.AppendLine(s);
                }
            }

            RefreshTracks();

            if (!silent)
            {
                if (fileErrors.Count > 0)
                {
                    OpenNotepad(Encoding.ASCII.GetBytes(sb.ToString()));
                }
                else
                {
                    MessageBox.Show("Check OK");
                }
            }

            return ret;
        }
コード例 #9
0
        public bool OpenSongCacheItem(SongCacheItem item)
        {
            bool ret = false;
            try
            {
                EditorPro.ClearSelection();
                ClearDTAFileProperties();

                var oldOffset = EditorPro.HScrollValue;
                if (oldOffset < 0)
                    oldOffset = 0;

                SetSelectedSongItem(item);

                if (item != null)
                {
                    if (item.G5FileName.FileExists())
                    {
                        try
                        {
                            ret = EditorG5.LoadMidi5(item.G5FileName, ReadFileBytes(item.G5FileName), true);
                        }
                        catch { }
                    }
                    if (item.G6FileName.FileExists())
                    {
                        var v = EditorPro.LoadMidi17(item.G6FileName, ReadFileBytes(item.G6FileName), false);
                        if (ret != true)
                            ret = v;
                    }

                    SetEditorDifficulty(GuitarDifficulty.Expert);

                    listBoxSongLibrary.SelectedItem = item;

                    SongList.SelectedSong = listBoxSongLibrary.SelectedItem as SongCacheItem;

                    if (EditorPro.IsLoaded)
                    {
                        if (EditorPro.HScrollMaximum > oldOffset)
                        {
                            EditorPro.HScrollValue = oldOffset;
                        }
                    }
                }
            }
            catch { }

            UpdateEditorPropertiesForSong();

            return ret;
        }
コード例 #10
0
        public Package OpenProCONFile(SongCacheItem sc, bool silent)
        {
            if (string.IsNullOrEmpty(sc.G6ConFile))
            {
                return null;
            }
            var ret = Package.Load(sc.G6ConFile);
            if (ret == null)
                return ret;

            var upgrades = ret.GetFile("songs_upgrades", "upgrades.dta");
            if (upgrades == null)
            {
                if (!silent)
                    MessageBox.Show("upgrades.dta file missing");
                return null;
            }

            PackageFile proMid = GetProMidFromPackage(ret);

            if (proMid == null)
            {
                if (!silent)
                    MessageBox.Show("Invalid pro midi file in upgrades.dta");
            }

            return ret;
        }
コード例 #11
0
        public string GetShortFileNameFromG5(SongCacheItem sc)
        {
            string g5fileName = sc.G5FileName;
            if (string.IsNullOrEmpty(g5fileName))
            {
                return string.Empty;
            }

            if (!File.Exists(g5fileName))
                return string.Empty;

            if (!string.IsNullOrEmpty(g5fileName))
            {
                return Path.GetFileNameWithoutExtension(g5fileName);
            }
            return string.Empty;
        }
コード例 #12
0
        public bool FindSongID(SongCacheItem sc, out string songID, out string songShortName,
            out string gDiff, out string bDiff)
        {
            songID = string.Empty;
            songShortName = string.Empty;
            gDiff = string.Empty;
            bDiff = string.Empty;
            bool foundDiff = false;
            bool foundSongID = false;
            try
            {
                if (string.IsNullOrEmpty(songID))
                {

                    string fileFolder = sc.G5FileName;
                    songShortName = GetShortFileNameFromG5(sc);
                    if (string.IsNullOrEmpty(fileFolder))
                    {
                        if (!string.IsNullOrEmpty(textBoxCONShortName.Text))
                        {
                            songShortName = textBoxCONShortName.Text;
                        }
                        else
                        {
                            songShortName = textBox24.Text;
                        }
                        if (!string.IsNullOrEmpty(songShortName))
                        {
                            fileFolder = sc.G6FileName;
                        }
                    }

                    if (string.IsNullOrEmpty(fileFolder) ||
                        string.IsNullOrEmpty(songShortName))
                    {
                        return false;
                    }

                    var fileDirectory = Path.GetDirectoryName(fileFolder);
                    for (int x = 0; x < 3; x++)
                    {
                        var songsDTAPath = Path.Combine(fileDirectory, "songs.dta");
                        var upgradesDTAPath = Path.Combine(fileDirectory, "upgrades.dta");

                        if (File.Exists(songsDTAPath) || File.Exists(upgradesDTAPath))
                        {
                            if (File.Exists(songsDTAPath) == false)
                            {
                                songsDTAPath = upgradesDTAPath;

                                if (!ParseUpgradesDTAForSongName(upgradesDTAPath, out songShortName))
                                {
                                    break;
                                }
                            }

                            try
                            {
                                var sids = DTAFile.FromBytes(ReadFileBytes(songsDTAPath)).GetSongIDs();
                                var ssn = songShortName;
                                var sid = sids.FirstOrDefault(s => s.SongShortName.EqualsEx(ssn));
                                if (sid != null)
                                {
                                    songID = sid.Value;
                                    if (songID.IsNotEmpty())
                                    {
                                        foundSongID = true;
                                    }
                                }
                            }
                            catch { }
                            if (!foundSongID && songsDTAPath.FileExists())
                            {
                                if (ParseSongsDTAForSongID(songShortName, songsDTAPath.ReadFileBytes(), out songID))
                                {
                                    foundSongID = true;
                                }
                            }

                            if (!foundDiff)
                            {
                                if (ParseSongsDTAForDifficulty(songShortName, songsDTAPath, out gDiff, out bDiff))
                                {
                                    foundDiff = true;
                                }
                            }

                            break;
                        }
                        try
                        {
                            var dinfo = Directory.GetParent(fileDirectory);
                            if (dinfo != null && dinfo.Exists)
                            {
                                fileDirectory = dinfo.FullName;
                            }
                        }
                        catch { break; }
                    }

                }

                if (string.IsNullOrEmpty(songID) && !string.IsNullOrEmpty(songShortName))
                {
                    using (var ms = new MemoryStream(Package.GetSongIDList()))
                    {
                        using (var sr = new StreamReader(ms))
                        {
                            while (!sr.EndOfStream)
                            {
                                var line = sr.ReadLine().Trim();
                                var c = line.IndexOf(';');
                                if (c != -1)
                                {
                                    line = line.Substring(0, c).Trim(' ', '(', ')', '\'');
                                }
                                var i = line.IndexOf(" - ");
                                if (i != -1)
                                {
                                    var lineName = line.Substring(0, i).Trim();
                                    var lineID = line.Substring(i + 3).Trim();

                                    if (string.Compare(lineName, songShortName, StringComparison.OrdinalIgnoreCase) == 0)
                                    {
                                        songID = lineID;
                                        songShortName = lineName;
                                        foundSongID = true;
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch { }
            return foundSongID || foundDiff;
        }
コード例 #13
0
        public bool FindDTAInformation(SongCacheItem sc)
        {
            bool ret = false;
            try
            {
                string songid, songshortname, gDiff, bDiff;
                if (FindSongID(sc, out songid, out songshortname, out gDiff, out bDiff))
                {
                    ret = true;
                    textBoxCONSongID.Text = songid;
                    sc.DTASongID = textBoxCONSongID.Text;
                    textBoxCONShortName.Text = songshortname;
                    sc.DTASongShortName = textBoxCONShortName.Text;

                    comboProGDifficulty.SelectedIndex = (int)InstrumentDifficultyUtil.MapDifficulty(gDiff);

                    comboProBDifficulty.SelectedIndex = (int)InstrumentDifficultyUtil.MapDifficulty(bDiff);

                    if (comboProGDifficulty.SelectedIndex == 0 &&
                        comboProGDifficulty.SelectedIndex == 0)
                    {
                        comboProGDifficulty.SelectedIndex = 2;
                        comboProBDifficulty.SelectedIndex = 2;
                    }

                    sc.DTAGuitarDifficulty = comboProGDifficulty.SelectedIndex;
                    sc.DTABassDifficulty = comboProBDifficulty.SelectedIndex;
                }
            }
            catch { }
            return ret;
        }
コード例 #14
0
        public bool CopySongToUSB(SongCacheItem item)
        {
            bool ret = false;
            try
            {
                bool opened = false;
                if (SelectedUSB == null)
                    return ret;

                if (SelectedUSB.IsOpen == false)
                {
                    OpenSelectedUSB();
                    opened = SelectedUSB.Open();
                }

                var folder = SelectedUSBFolderEntry;
                var contents = SelectedUSBContents;

                if (!string.IsNullOrEmpty(item.G6ConFile))
                {
                    if (File.Exists(item.G6ConFile))
                    {
                        try
                        {
                            var fileName = Path.GetFileName(item.G6ConFile);
                            if (!string.IsNullOrEmpty(fileName))
                            {
                                bool overwrite = false;
                                if (contents != null)
                                {
                                    foreach (var c in contents.Files)
                                    {
                                        if (string.Compare(c.Name, fileName, true) == 0)
                                        {
                                            overwrite = true;
                                            break;
                                        }
                                    }
                                }

                                bool success = false;
                                if (overwrite)
                                {
                                    success = folder.AddFile(fileName, item.G6ConFile, AddType.Replace);
                                }
                                else
                                {
                                    success = folder.AddFile(fileName, item.G6ConFile, AddType.Inject);
                                }

                                if (!success)
                                {
                                    WriteBatchResult("Unable to write file to usb: " + fileName);
                                }
                                else
                                {
                                    ret = success;
                                }
                            }
                        }
                        catch
                        {
                            WriteBatchResult("Exception writing to usb");
                            ret = false;
                        }
                    }
                }
                if (opened)
                {
                    SelectedUSB.Close();
                }
            }
            catch { }
            return ret;
        }
コード例 #15
0
        public bool CheckConPackage(Package pk, ref List<string> fileErrors, SongCacheItem item)
        {
            try
            {

                if (pk == null)
                {
                    fileErrors.Add("Cannot open CON File");
                    return false;
                }

                PackageFile upgradeDTA = null;
                try
                {
                    upgradeDTA = pk.GetFile("songs_upgrades", "upgrades.dta");
                }
                catch
                {
                    fileErrors.Add("error extracting upgrades.dta");
                    return false;
                }

                if (upgradeDTA == null)
                {
                    fileErrors.Add("Cannot find DTA file in package");
                    return false;
                }

                string upgradeFileData = string.Empty;
                try
                {
                    upgradeFileData = Encoding.ASCII.GetString(upgradeDTA.Data);
                }
                catch
                {
                    fileErrors.Add("error reading upgrades.dta");
                }

                if (string.IsNullOrEmpty(upgradeFileData))
                {
                    fileErrors.Add("upgrades.dta file is empty");
                }
                else
                {

                    string dtaSongID = string.Empty;
                    try
                    {
                        var songIDList = LoadDTAFile(upgradeDTA.Data);
                        if (songIDList.Any())
                        {
                            songIDList.GetSongIDs().FirstOrDefault().GetIfNotNull(x => dtaSongID = x.Value);
                        }
                    }
                    catch { }

                    if (dtaSongID.IsEmpty())
                    {
                        fileErrors.Add("song id missing in upgrades.dta");
                    }
                    else
                    {

                        var g6D = InstrumentDifficulty.INVALID;
                        try
                        {
                            g6D = InstrumentDifficultyUtil.DTAGetGuitarDifficulty(upgradeDTA.Data);
                        }
                        catch { }

                        if (g6D == InstrumentDifficulty.INVALID)
                        {
                            fileErrors.Add("invalid guitar difficulty in upgrades.dta");
                        }

                        var g6B = InstrumentDifficulty.INVALID;
                        try
                        {
                            g6B = InstrumentDifficultyUtil.DTAGetBassDifficulty(upgradeDTA.Data);
                        }
                        catch { }

                        if (g6B == InstrumentDifficulty.INVALID)
                        {
                            fileErrors.Add("invalid bass difficulty in upgrades.dta");
                        }

                        if (!pk.GetFiles("songs_upgrades", ".mid|.midi").Any())
                        {
                            fileErrors.Add("No \".mid\" file found in package");
                        }

                        string shortName = string.Empty;
                        try
                        {
                            shortName = DTAGetSongShortName(upgradeDTA.Data);
                        }
                        catch { }

                        if (shortName.IsEmpty())
                        {
                            fileErrors.Add("Song Name Missing from DTA");
                        }
                        else
                        {

                            string proName = DTAGetProFileName(upgradeDTA.Data);

                            if (proName.IsEmpty())
                            {
                                fileErrors.Add("Missing pro file name in upgrades.dta");
                            }
                            else
                            {
                                proName = proName.Trim('"');

                                var s = proName.Split('/');

                                if (s == null || s.Length != 2 || s[0] != "songs_upgrades")
                                {
                                    fileErrors.Add("Invalid path to pro mid file in upgrades.dta: " + proName);
                                }
                                else
                                {
                                    var proMid = pk.GetFile("songs_upgrades", s[1]);

                                    if (proMid == null)
                                    {
                                        fileErrors.Add("pro midi file set in upgrades.dta not found in package");
                                    }
                                    else
                                    {
                                        var sq = proMid.Data.LoadSequence();
                                        if (sq != null)
                                        {
                                            if (!sq.IsFileTypePro())
                                            {
                                                fileErrors.Add("Unable to open pro midi file from package");
                                            }
                                            else
                                            {

                                                fileErrors.AddRange(VerifySongData(proName, sq, item));

                                            }
                                        }
                                    }
                                }
                            }
                        }

                    }
                }

            }
            catch { }

            return fileErrors.Count == 0;
        }
コード例 #16
0
        public bool RebuildCONFileProperties(SongCacheItem sc)
        {
            bool ret = false;
            try
            {
                if (sc != null)
                {
                    SaveProMidi();

                    if (SaveProCONFile(sc, true, false))
                    {
                        if (OpenProCONFile(sc, true) != null)
                        {
                            ret = true;
                        }
                    }
                }
            }
            catch { }
            return ret;
        }
コード例 #17
0
        private void LoadSettingConfiguration()
        {
            if (settings == null)
            {
                settings = new SettingMgr();
            }
            settings.LoadSettings();

            checkBoxAutoSelectNext.Checked = settings.GetValueBool("checkBoxAutoSelectNext", true);
            checkBatchOpenWhenCompleted.Checked = settings.GetValueBool("checkBatchOpenWhenCompleted", true);
            checkBoxBatchCopyUSB.Checked = settings.GetValueBool("checkBoxBatchCopyUSB", false);
            checkBatchCopyTextEvents.Checked = settings.GetValueBool("checkBatchCopyTextEvents", true);
            checkBatchGenerateTrainersIfNone.Checked = settings.GetValueBool("checkBatchGenerateTrainersIfNone", true);

            textBoxUSBFolder.Text = settings.GetValue("textBoxUSBFolder");

            DefaultConFileLocation = settings.GetValue("textBoxDefaultCONFileLocation");
            DefaultMidiFileLocationG5 = settings.GetValue("textBoxDefaultMidi5FileLocation");
            DefaultMidiFileLocationPro = settings.GetValue("textBoxDefaultMidiProFileLocation");
            checkBoxShow108.Checked = settings.GetValueBool("checkBoxShow108", false);

            textBoxZoom.Text = settings.GetValue("textBoxZoom", textBoxZoom.Text);
            Utility.timeScalarZoomSpeed = settings.GetValue("timeScalarZoomSpeed", Utility.timeScalarZoomSpeed.ToStringEx()).ToDouble(10);

            checkUseDefaultFolders.Checked = settings.GetValueBool("useDefaultFolders", true);
            checkBoxInitSelectedTrackOnly.Checked = settings.GetValueBool("checkBoxInitSelectedTrackOnly", false);
            checkBoxInitSelectedDifficultyOnly.Checked = settings.GetValueBool("checkBoxInitSelectedDifficultyOnly", false);

            checkKeepSelection.Checked = settings.GetValueBool("checkKeepSelection", true);
            checkBoxClearAfterNote.Checked = settings.GetValueBool("checkBoxClearAfterNote", false);
            checkRealtimeNotes.Checked = settings.GetValueBool("checkRealtimeNotes", false);
            checkTwoNotePowerChord.Checked = settings.GetValueBool("checkTwoNotePowerChord", false);
            checkThreeNotePowerChord.Checked = settings.GetValueBool("checkThreeNotePowerChord", false);
            checkChordMode.Checked = settings.GetValueBool("checkChordMode", false);
            checkScrollToSelection.Checked = settings.GetValueBool("checkScrollToSelection", true);
            checkKBQuickEdit.Checked = settings.GetValueBool("checkKBQuickEdit", true);
            checkIndentBString.Checked = settings.GetValueBool("checkIndentBString", false);
            checkBoxSearchByNoteType.Checked = settings.GetValueBool("checkBoxSearchByNoteType", true);
            checkBoxSearchByNoteStrum.Checked = settings.GetValueBool("checkBoxSearchByNoteStrum", true);
            checkBoxSearchByNoteFret.Checked = settings.GetValueBool("checkBoxSearchByNoteFret", true);
            checkBoxKeepLengths.Checked = settings.GetValueBool("checkBoxSetLengths5", true);
            checkMatchBeat.Checked = settings.GetValueBool("checkMatchBeat", true);
            checkBoxMatchLengths.Checked = settings.GetValueBool("checkBoxMatchLengths", true);
            checkBoxMatchLength6.Checked = settings.GetValueBool("checkBoxMatchLength6", true);
            checkBoxMatchSpacing.Checked = settings.GetValueBool("checkBoxMatchSpacing", true);
            checkBoxMatchForwardOnly.Checked = settings.GetValueBool("checkBoxMatchForwardOnly", false);
            checkBoxFirstMatchOnly.Checked = settings.GetValueBool("checkBoxFirstMatchOnly", false);
            checkBoxShowMidiChannelEdit.Checked = settings.GetValueBool("checkBoxShowMidiChannelEdit", true);

            textBoxTempoNumerator.Text = settings.GetValue("textBoxTempoNumerator", "4");
            textBoxTempoDenominator.Text = settings.GetValue("textBoxTempoDenominator", "4");

            checkBoxUseCurrentChord.Checked = settings.GetValueBool("checkUseCurrentChord", true);
            checkBoxAllowOverwriteChord.Checked = settings.GetValueBool("checkAllowOverwriteChord", true);
            textBoxPlaceNoteFret.Text = settings.GetValue("textBoxPlaceNoteFret", "0");

            checkBoxGridSnap.Checked = settings.GetValueBool("checkBoxGridSnap", true);
            checkSnapToCloseG5.Checked = settings.GetValueBool("checkSnapToCloseG5", true);

            checkBoxCreateArpeggioHelperNotes.Checked = settings.GetValueBool("checkBoxCreateArpeggioHelperNotes", true);

            checkViewNotesGridPro.Checked = settings.GetValueBool("checkViewNotesGrid", true);
            checkViewNotesGrid5Button.Checked = settings.GetValueBool("checkViewNotesGrid5", true);
            textBoxCopyAllCONFolder.Text = settings.GetValue("textBoxCopyAllCONFolder");
            textBoxMinimumNoteWidth.Text = settings.GetValue("textBoxMinimumNoteWidth", "0");
            textBoxCopyAllProFolder.Text = settings.GetValue("textBoxCopyAllProFolder");
            textBoxCopyAllG5MidiFolder.Text = settings.GetValue("textBoxCopyAllG5MidiFolder");
            checkBoxMidiPlaybackScroll.Checked = settings.GetValueBool("checkBoxMidiPlaybackScroll", true);
            CheckMinimumNoteWidth();
            SetGridScalar(settings.GetValue("gridScalar", "0.25"));
            textBoxScrollToSelectionOffset.Text = settings.GetValue("textBoxScrollToSelectionOffset", Utility.ScollToSelectionOffset.ToString());
            checkBoxMultiSelectionSongList.Checked = settings.GetValueBool("checkBoxMultiSelectionSongList", false);
            checkBoxSkipGenIfEasyNotes.Checked = settings.GetValueBool("checkBoxSkipGenIfEasyNotes", false);
            checkGenDiffCopyGuitarToBass.Checked = settings.GetValueBool("checkGenDiffCopyGuitarToBass", true);
            checkBoxLoadLastSongStartup.Checked = settings.GetValueBool("checkBoxLoadLastSongStartup", true);
            resetTime = settings.GetValueInt("textClearHoldBox", 1);
            textClearHoldBox.Text = resetTime.ToString();
            checkBoxEnableMidiInput.Checked = settings.GetValueBool("checkBoxEnableMidiInput", false);
            checkBoxEnableClearTimer.Checked = settings.GetValueBool("checkBoxEnableClearTimer", true);
            checkBoxPlayMidiStrum.Checked = settings.GetValueBool("checkBoxPlayMidiStrum", false);
            checkBoxClearIfNoFrets.Checked = settings.GetValueBool("checkBoxClearIfNoFrets", true);
            checkBoxChordStrum.Checked = settings.GetValueBool("checkBoxChordStrum", false);
            checkBoxMidiInputStartup.Checked = settings.GetValueBool("checkBoxMidiInputStartup", true);
            checkView5Button.Checked = settings.GetValueBool("checkView5Button", true);

            Utility.NoteCloseWidth = settings.GetValueInt("textBoxNoteCloseDist", 8);
            textBoxNoteCloseDist.Text = Utility.NoteCloseWidth.ToString();
            checkBoxBatchCheckCON.Checked = settings.GetValueBool("checkBoxBatchCheckCON", true);
            checkBoxBatchGenerateDifficulties.Checked = settings.GetValueBool("checkBoxBatchGenerateDifficulties", true);
            checkBoxBatchGuitarBassCopy.Checked = settings.GetValueBool("checkBoxBatchGuitarBassCopy", true);
            checkBoxBatchRebuildCON.Checked = settings.GetValueBool("checkBoxBatchRebuildCON", true);

            checkBoxMatchAllFrets.Checked = settings.GetValueBool("checkBoxMatchAllFrets", true);
            checkBoxCompressAllInDefaultCONFolder.Checked = settings.GetValueBool("checkBoxCompressAllInDefaultCONFolder", true);

            textBoxCompressAllZipFile.Text = settings.GetValue("textBoxCompressAllZipFile");
            checkBoxRenderMouseSnap.Checked = settings.GetValueBool("checkBoxRenderMouseSnap", false);

            checkBoxSnapToCloseNotes.Checked = settings.GetValueBool("checkBoxSnapToCloseNotes", true);

            Utility.NoteSnapDistance = settings.GetValueInt("textBoxNoteSnapDistance", 4);
            Utility.GridSnapDistance = settings.GetValueInt("textBoxGridSnapDistance", 4);
            textBoxNoteSnapDistance.Text = Utility.NoteSnapDistance.ToString();
            textBoxGridSnapDistance.Text = Utility.GridSnapDistance.ToString();

            RefreshMidiInputList();
            CheckMidiInputVisibility();
            UpdateProperties(true);

            comboNoteEditorCopyPatternPreset.Items.Clear();
            comboNoteEditorCopyPatternPreset.SelectedIndex = -1;
            foreach (XmlNode node in XMLUtil.GetNodeList(settings.XMLRoot, "searchPatterns/searchPattern"))
            {
                var preset = new CopyPatternPreset()
                {
                    ID = XMLUtil.GetNodeValueInt(node, "@ID"),
                    Name = XMLUtil.GetNodeValue(node, "@Name") ?? "",
                    ForwardOnly = XMLUtil.GetNodeValueBool(node, "@ForwardOnly"),
                    MatchLengths5 = XMLUtil.GetNodeValueBool(node, "@MatchLengths5"),
                    MatchLengths6 = XMLUtil.GetNodeValueBool(node, "@MatchLengths6"),
                    MatchSpacing = XMLUtil.GetNodeValueBool(node, "@MatchSpacing"),
                    MatchBeat = XMLUtil.GetNodeValueBool(node, "@MatchBeat"),
                    KeepLengths = XMLUtil.GetNodeValueBool(node, "@KeepLengths"),
                    FirstMatchOnly = XMLUtil.GetNodeValueBool(node, "@FirstMatchOnly"),
                    RemoveExisting = XMLUtil.GetNodeValueBool(node, "@RemoveExisting", true),

                };

                comboNoteEditorCopyPatternPreset.Items.Add(preset);
            }

            if (comboNoteEditorCopyPatternPreset.Items.Count > 0)
            {
                comboNoteEditorCopyPatternPreset.SelectedIndex = 0;
            }

            SongList = new SongCacheList(listBoxSongLibrary);

            var snglist = XMLUtil.GetNodeList(settings.XMLRoot, "docLib/song");
            if (snglist != null)
            {
                var lst = new List<SongCacheItem>();

                foreach (XmlNode song in snglist)
                {

                    var sc = new SongCacheItem();
                    sc.SongName = XMLUtil.GetNodeValue(song, "@name");
                    sc.G5FileName = XMLUtil.GetNodeValue(song, "@G5FileName");
                    sc.G6FileName = XMLUtil.GetNodeValue(song, "@G6FileName");
                    sc.G6ConFile = XMLUtil.GetNodeValue(song, "@G6ConFile");
                    sc.Description = XMLUtil.GetNodeValue(song, "@Description");

                    sc.HasBass = XMLUtil.GetNodeValueBool(song, "@HasBass");
                    sc.HasGuitar = XMLUtil.GetNodeValueBool(song, "@HasGuitar");
                    sc.CopyGuitarToBass = XMLUtil.GetNodeValueBool(song, "@CopyGuitarToBass");
                    sc.IsComplete = XMLUtil.GetNodeValueBool(song, "@IsComplete");
                    sc.IsFinalized = XMLUtil.GetNodeValueBool(song, "@IsFinalized");

                    sc.GuitarTuning[0] = XMLUtil.GetNodeValue(song, "@GuitarLowE", "0");
                    sc.GuitarTuning[1] = XMLUtil.GetNodeValue(song, "@GuitarA", "0");
                    sc.GuitarTuning[2] = XMLUtil.GetNodeValue(song, "@GuitarD", "0");
                    sc.GuitarTuning[3] = XMLUtil.GetNodeValue(song, "@GuitarG", "0");
                    sc.GuitarTuning[4] = XMLUtil.GetNodeValue(song, "@GuitarB", "0");
                    sc.GuitarTuning[5] = XMLUtil.GetNodeValue(song, "@GuitarHighE", "0");

                    sc.BassTuning[0] = XMLUtil.GetNodeValue(song, "@BassLowE", "0");
                    sc.BassTuning[1] = XMLUtil.GetNodeValue(song, "@BassA", "0");
                    sc.BassTuning[2] = XMLUtil.GetNodeValue(song, "@BassD", "0");
                    sc.BassTuning[3] = XMLUtil.GetNodeValue(song, "@BassG", "0");
                    sc.BassTuning[4] = XMLUtil.GetNodeValue(song, "@BassB", "0");
                    sc.BassTuning[5] = XMLUtil.GetNodeValue(song, "@BassHighE", "0");

                    sc.DTABassDifficulty = XMLUtil.GetNodeValueInt(song, "@DTABassDifficulty", 0);
                    sc.DTAGuitarDifficulty = XMLUtil.GetNodeValueInt(song, "@DTAGuitarDifficulty", 0);
                    sc.DTASongID = XMLUtil.GetNodeValue(song, "@DTASongID");
                    sc.DTASongShortName = XMLUtil.GetNodeValue(song, "@DTASongShortName");

                    sc.SongMP3Location = XMLUtil.GetNodeValue(song, "@SongMP3Location", "");
                    sc.SongMP3PlaybackOffset = XMLUtil.GetNodeValue(song, "@SongMP3PlaybackOffset", "").ToInt();
                    sc.EnableSongMP3Playback = XMLUtil.GetNodeValueBool(song, "@EnableSongMP3Playback", false);

                    sc.EnableSongMidiPlayback = XMLUtil.GetNodeValueBool(song, "@EnableSongMidiPlayback", true);
                    sc.SongMP3PlaybackVolume = XMLUtil.GetNodeValueInt(song, "@SongMP3PlaybackVolume", 100);
                    sc.SongMidiPlaybackVolume = XMLUtil.GetNodeValueInt(song, "@SongMidiPlaybackVolume", 100);

                    sc.AutoGenGuitarHard = XMLUtil.GetNodeValueBool(song, "@AutoGenGuitarHard", true);
                    sc.AutoGenGuitarMedium = XMLUtil.GetNodeValueBool(song, "@AutoGenGuitarMedium", true);
                    sc.AutoGenGuitarEasy = XMLUtil.GetNodeValueBool(song, "@AutoGenGuitarEasy", true);

                    sc.AutoGenBassHard = XMLUtil.GetNodeValueBool(song, "@AutoGenBassHard", true);
                    sc.AutoGenBassMedium = XMLUtil.GetNodeValueBool(song, "@AutoGenBassMedium", true);
                    sc.AutoGenBassEasy = XMLUtil.GetNodeValueBool(song, "@AutoGenBassEasy", true);

                    var sid = XMLUtil.GetNodeValue(song, "@CacheSongID");
                    if (!string.IsNullOrEmpty(sid))
                    {
                        int songid = sid.ToInt();
                        if (!songid.IsNull())
                        {
                            sc.CacheSongID = songid;
                        }
                        else
                        {
                            sc.CacheSongID = GetNextSongID();
                        }
                    }

                    sc.IsDirty = false;

                    try
                    {
                        if (string.IsNullOrEmpty(sc.DTASongID) && !string.IsNullOrEmpty(sc.G5FileName))
                        {
                            FindDTAInformation(sc);
                        }
                    }
                    catch { }

                    lst.Add(sc);

                }
                lst.Sort();
                SongList.AddRange(lst);
                SongList.PopulateList();
            }
            CheckNotesGridSelection();
            CheckNoteChannelVisibility();

            PostLoadSettings();
        }
コード例 #18
0
        List<string> VerifySongData(string midiTrackName, Sequence midiSequence, SongCacheItem songCacheItem)
        {
            var fileErrors = new List<string>();
            try
            {
                if (midiSequence.FirstOrDefault() == null)
                {
                    fileErrors.Add("No Tracks");
                }
                else
                {
                    var proTracks = midiSequence.Skip(1).ToList();
                    foreach (var track in proTracks)
                    {
                        if (track.Name != null && track.Name == "(no name)")
                        {
                            fileErrors.Add("******** Missing Track Name: " + (track.Name ?? ""));
                        }
                        else if (track.Name.IsProTrackName() == false)
                        {
                            fileErrors.Add("Invalid Track Name: " + (track.Name ?? ""));
                        }
                    }
                }
                foreach (var track in midiSequence)
                {
                    if (track.Name.IsEmpty())
                    {
                        fileErrors.Add("Null track name");
                    }
                    else if (track.Name.IsProTrackName() && midiSequence.IndexOf(track) == 0)
                    {
                        fileErrors.Add("Tempo must be first track");
                    }
                }

                var tracks = midiSequence.GetGuitarBassTracks().ToList();
                bool foundGuitarTrack = tracks.Any(x => x.Name.IsGuitarTrackName());
                bool foundBassTrack = tracks.Any(x => x.Name.IsBassTrackName());
                bool foundGuitar22 = tracks.Any(x => x.Name.IsGuitarTrackName22());
                bool foundBass22 = tracks.Any(x => x.Name.IsBassTrackName22());
                bool foundGuitar17 = tracks.Any(x => x.Name.IsGuitarTrackName17());
                bool foundBass17 = tracks.Any(x => x.Name.IsBassTrackName17());

                if (foundGuitarTrack == false)
                {
                    fileErrors.Add("No pro guitar track in midi file: " + midiTrackName);
                }
                if (foundBassTrack == false && (songCacheItem != null && songCacheItem.HasBass == true))
                {
                    fileErrors.Add("No pro bass track in midi file: " + midiTrackName);
                }

                if (foundGuitar22 == true && foundGuitar17 == false)
                {
                    fileErrors.Add("No 17 fret pro guitar track in file: " + midiTrackName);
                }
                if (foundBass22 == true && foundBass17 == false)
                {
                    fileErrors.Add("No 17 fret pro bass track in file: " + midiTrackName);
                }

                foreach (var currentTrack in tracks)
                {

                    var currentTrackName = currentTrack.Name ?? "(no name)";

                    if (!EditorPro.SetTrack6(midiSequence, currentTrack, GuitarDifficulty.Expert))
                    {
                        fileErrors.Add(currentTrackName + " Failed to set track ");
                        continue;
                    }

                    var metaNames = currentTrack.Meta.Where(x => x.MetaType == MetaType.TrackName).ToList();

                    if (!metaNames.Any())
                    {
                        fileErrors.Add("Contains Invalid track with no name");
                    }
                    else if (metaNames.Count() > 1)
                    {
                        fileErrors.Add(metaNames.First().Text + " Contains Extra track names:");
                        foreach (var en in metaNames)
                        {
                            fileErrors.Add(en.Text);
                        }
                    }

                    foreach (var diff in Utility.GetDifficultyIter())
                    {

                        EditorPro.CurrentDifficulty = diff;

                        var chords = EditorPro.Messages.Chords.ToList();
                        if (!chords.Any())
                        {
                            fileErrors.Add(currentTrackName + " No Chords Created !! " + diff);
                            continue;
                        }
                        if (diff.IsExpert())
                        {

                            if (EditorG5.IsLoaded)
                            {
                                var copyGuitarToBass = (songCacheItem != null && songCacheItem.CopyGuitarToBass == true);
                                if (currentTrackName.IsBassTrackName() && !copyGuitarToBass &&
                                    EditorG5.GetTrack(GuitarTrack.BassTrackName5) != null)
                                {
                                    EditorG5.SetTrack(GuitarTrack.BassTrackName5, diff);
                                }
                                else if (EditorG5.GetTrack(GuitarTrack.GuitarTrackName5) != null)
                                {
                                    EditorG5.SetTrack(GuitarTrack.GuitarTrackName5, diff);
                                }

                                if (EditorG5.Messages.BigRockEndings.Any() &&
                                    !EditorPro.Messages.BigRockEndings.Any())
                                {
                                    fileErrors.Add(currentTrackName + " Big Rock Ending in 5 button but not pro");
                                }

                                var solo5 = EditorG5.Messages.Solos.ToList();
                                var solo6 = EditorPro.Messages.Solos.ToList();

                                var missing5 = solo5.Where(x => !solo6.Any(sx => sx.TickPair == x.TickPair)).ToList();
                                if (missing5.Any())
                                {
                                    fileErrors.Add(currentTrackName + " Not all solos created ");
                                    fileErrors.AddRange(missing5.Select(m => m.TickPair.ToString()));
                                }

                                var power5 = EditorG5.Messages.Powerups.ToList();
                                var power6 = EditorPro.Messages.Powerups.ToList();

                                var missingpower5 = power5.Where(x => !power6.Any(sx => sx.TickPair == x.TickPair)).ToList();
                                if (missingpower5.Any())
                                {
                                    fileErrors.Add(currentTrackName + " Not all powerups snapped ");
                                    fileErrors.Add("Editor G5");
                                    fileErrors.AddRange(power5.Select(m => "    " + (missingpower5.Contains(m) ? " Missing->" : "") + m.TickPair.ToString()));
                                    fileErrors.Add("Editor G6");
                                    fileErrors.AddRange(power6.Select(m => "    " + m.TickPair.ToString()));
                                }

                            }

                            var handPositions = EditorPro.Messages.HandPositions.ToList();
                            if (!handPositions.Any())
                            {
                                fileErrors.Add(currentTrackName + " does not have hand position events (108) " + diff);
                            }
                            else
                            {
                                if (chords.First().DownTick < handPositions.First().DownTick)
                                {
                                    fileErrors.Add("108 hand position event occurs too late on track: " + (currentTrackName) + " " + diff);
                                }
                            }

                            if (chords.First().DownTick < 10)
                            {
                                fileErrors.Add("first chord is too soon in track: " + (currentTrackName) + " " + diff);
                            }

                            var tempotrack = EditorPro.GuitarTrack.GetTempoTrack();
                            if (tempotrack == null)
                            {
                                fileErrors.Add(currentTrackName + " no tempo track found");
                            }

                            if (!EditorPro.Messages.TimeSignatures.Any())
                            {
                                fileErrors.Add(currentTrackName + " Time signature missing from tempo track.");
                            }

                            if (!EditorPro.Messages.Tempos.Any())
                            {
                                fileErrors.Add(currentTrackName + " Tempo missing from tempo track.");
                            }
                        }

                        if (songCacheItem != null)
                        {
                            if (songCacheItem.CopyGuitarToBass == false)
                            {
                                if (currentTrackName.IsBassTrackName())
                                {

                                    var notesOver4 = chords.Where(c => c.Notes.Any(x=> x.NoteString > 3)).ToList();
                                    if (notesOver4.Any())
                                    {
                                        fileErrors.Add(currentTrackName + " " + notesOver4.Count + " Chords using more than 4 strings on bass: " + diff);
                                        fileErrors.AddRange(notesOver4.Select(m => m.ToString()));
                                    }
                                }
                            }
                        }

                        var noteAligns = chords.Where(x => x.Notes.NotesAligned == false).ToList();
                        if (noteAligns.Any())
                        {
                            fileErrors.Add(currentTrackName + " " + noteAligns.Count + " Note times not snapped: " + diff);
                            fileErrors.AddRange(noteAligns.Select(m => m.ToString()));
                        }

                        var modAligns = chords.Where(chord => chord.Modifiers.Any(modifier => modifier.TickPair != chord.TickPair)).ToList();
                        if (modAligns.Any())
                        {

                            fileErrors.Add(currentTrackName + " " + modAligns.Count + " Modifier times not snapped: " + diff);
                            fileErrors.AddRange(modAligns.Select(m => m.ToString() + " " + m.TickPair.ToString()));
                        }

                        var overlaps = chords.Take(chords.Count - 1).Where(x => x.UpTick > x.NextChord.DownTick).ToList();

                        if (overlaps.Any())
                        {
                            fileErrors.Add(currentTrackName + " " + overlaps.Count + " Overlapping notes found: " + diff);
                            fileErrors.AddRange(overlaps.Select(m => m.ToString()));
                        }

                        if (Utility.GetArpeggioData1(diff).IsNotNull())
                        {
                            var arpeggios = EditorPro.Messages.Arpeggios.ToList();
                            var arpeggioMissingChords = arpeggios.Where(x => chords.AnyBetweenTick(x.TickPair) == false).ToList();
                            if (arpeggioMissingChords.Any())
                            {
                                fileErrors.Add(currentTrackName + " " + arpeggioMissingChords.Count + " Arpeggios found with no chords: " + diff);
                                fileErrors.AddRange(arpeggioMissingChords.Select(m => m.ToString()));
                            }
                        }

                        if (diff.IsExpert())
                        {
                            var sstrem = EditorPro.Messages.SingleStringTremelos.ToList();
                            var modWithNoNotes = sstrem.Where(x => chords.AnyBetweenTick(x.TickPair) == false).ToList();

                            if (modWithNoNotes.Any())
                            {
                                fileErrors.Add(currentTrackName + " " + modWithNoNotes.Count + " Single string tremelo with no notes: " + diff);
                                fileErrors.AddRange(modWithNoNotes.Select(m => m.ToString()));
                            }
                        }

                        if (diff.IsExpert())
                        {
                            var trem = EditorPro.Messages.MultiStringTremelos.ToList();
                            var modWithNoNotes = trem.Where(x => chords.AnyBetweenTick(x.TickPair) == false).ToList();
                            if (modWithNoNotes.Any())
                            {
                                fileErrors.Add(currentTrackName + " " + modWithNoNotes.Count + " Multi string tremelo with no notes: " + diff);
                                fileErrors.AddRange(modWithNoNotes.Select(m => m.ToString()));
                            }
                        }

                        {
                            var powerups = EditorPro.Messages.Powerups.ToList();
                            var modWithNoNotes = powerups.Where(x => chords.AnyBetweenTick(x.TickPair) == false).ToList();

                            if (modWithNoNotes.Any())
                            {
                                fileErrors.Add(currentTrackName + " " + modWithNoNotes.Count + " Powerup with no notes: " + diff);
                                fileErrors.AddRange(modWithNoNotes.Select(m => m.ToString()));
                            }
                        }

                        var over17 = chords.Where(x => x.HighestFret > 17);
                        if (currentTrackName.IsProTrackName17() && over17.Any())
                        {
                            fileErrors.Add(currentTrackName + " Notes above 17 on Mustang chart: " + diff);
                            fileErrors.AddRange(over17.Select(m => m.ToString()));
                        }
                        var chordMix = chords.Where(x => x.Notes.Any(n => n.IsXNote) && x.Notes.Any(n => n.IsXNote) == false);
                        if (chordMix.Any())
                        {
                            fileErrors.Add(currentTrackName + " Mix of mute and non mute: " + diff);
                            fileErrors.AddRange(chordMix.Select(m => m.ToString()));
                        }

                        var numZero = chords.Count(x => x.HighestFret == 0);
                        var numNonZero = chords.Count(x => x.HighestFret != 0);

                        if (numNonZero == 0)
                        {
                            fileErrors.Add(currentTrackName + " No notes set: " + diff);
                        }

                        var shortChords = chords.Where(x => x.TickLength < 8);
                        if (shortChords.Any())
                        {
                            fileErrors.Add(currentTrackName + " invalid chord length found: " + diff);

                            shortChords.ForEach(x => fileErrors.Add("  " + x.ToString()));

                        }

                        var invStrum = chords.Where(x =>
                            (x.HasHighStrum && !x.HighStrumNotes.Any()) ||
                            (x.HasMidStrum && !x.MidStrumNotes.Any()) ||
                            (x.HasLowStrum && !x.LowStrumNotes.Any())
                            ).ToList();

                        if (invStrum.Any())
                        {
                            fileErrors.Add(currentTrackName + " " + diff + " strum marker missing notes");
                            fileErrors.AddRange(invStrum.Select(m => m.ToString()));
                        }

                    }
                }//end for each track

            }
            catch (Exception ex)
            {
                fileErrors.Add("Exception while checking file: " + ex.Message);
            }
            return fileErrors;
        }