public string NameFromStrings(TuningStrings tuning, bool flats = true)
        {
            var t         = tuning.ToArray();
            var noteNames = String.Empty;

            switch (GetTuningFamily(t))
            {
            case TuningFamily.Standard:
                noteNames = string.Format("{0} Standard", NoteName(tuning, 0, flats));
                break;

            case TuningFamily.Drop:
                noteNames = string.Format("{0} Drop {1}", NoteName(tuning, 5, true), NoteName(tuning, 0, flats));
                break;

            case TuningFamily.Open:
                break;

            default:
                for (Byte s = 0; s < 6; s++)
                {
                    noteNames += NoteName(tuning, s, flats);
                }
                break;
            }
            return(noteNames);
        }
Example #2
0
        private void SetTuningCombo(TuningStrings tuningStrings, bool isBass = false)
        {
            //Detect tuning
            TuningDefinition tuning = TuningDefinitionRepository.Instance().SelectAny(tuningStrings, currentGameVersion);

            //Create tuning
            if (tuning == null)
            {
                using (var form = new TuningForm()) {
                    tuning             = new TuningDefinition();
                    tuning.Tuning      = tuningStrings;
                    tuning.Custom      = true;
                    tuning.GameVersion = currentGameVersion;
                    tuning.Name        = tuning.UIName = tuning.NameFromStrings(tuningStrings, isBass);

                    form.Tuning = tuning;
                    form.IsBass = isBass;
                    if (DialogResult.OK != form.ShowDialog())
                    {
                        return;
                    }

                    FillTuningCombo();
                }
            }
            //Set tuning
            tuningComboBox.SelectedItem = tuning;
        }
Example #3
0
        public static string TuningToName(string tolkenTuning, List <TuningDefinition> tuningXml = null)
        {
            var           jObj       = JObject.Parse(tolkenTuning);
            TuningStrings songTuning = jObj.ToObject <TuningStrings>();

            return(TuningToName(songTuning, tuningXml));
        }
        public string NameFromStrings(TuningStrings tuning, bool isBass, bool inBem = true)
        {
            List <Int32>  Notes     = new List <Int32>();
            List <String> NoteNames = new List <String>();

            String[] notesNames   = new String[] { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
            String[] notesNamesHi = new String[] { "C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B" };
            for (Byte s = 0; s < 6; s++)
            {
                Notes.Add(Sng2014FileWriter.GetMidiNote(tuning.ToShortArray(), s, 0, isBass, 0));
            }
            foreach (var mNote in Notes)
            {
                if (inBem)
                {
                    NoteNames.Add(notesNamesHi[mNote % 12]);       //oct = mNote / 12 - 1
                }
                else
                {
                    NoteNames.Add(notesNames[mNote % 12]);  //oct = mNote / 12 - 1
                }
            }
            return(String.Format("{0}{1}{2}{3}{4}{5}", NoteNames[0], NoteNames[1], NoteNames[2],
                                 NoteNames[3], NoteNames[4], NoteNames[5]));
        }
Example #5
0
        public static string TuningToName(string tolkenTuning, List <TuningDefinition> tuningXml = null)
        {
            var           jObj       = JObject.Parse(tolkenTuning);
            TuningStrings songTuning = jObj.ToObject <TuningStrings>();

            // 2X speed hack ... use preloaded TuningDefinitionRepository
            if (tuningXml == null)
            {
                tuningXml = TuningDefinitionRepository.Instance.LoadTuningDefinitions(GameVersion.RS2014);
            }

            foreach (var tuning in tuningXml)
            {
                if (tuning.Tuning.String0 == songTuning.String0 &&
                    tuning.Tuning.String1 == songTuning.String1 &&
                    tuning.Tuning.String2 == songTuning.String2 &&
                    tuning.Tuning.String3 == songTuning.String3 &&
                    tuning.Tuning.String4 == songTuning.String4 &&
                    tuning.Tuning.String5 == songTuning.String5)
                {
                    return(tuning.UIName);
                }
            }

            return("Other");
        }
Example #6
0
        public void NameFromStringsTest()
        {
            string tName = string.Empty;
            var    t     = new TuningDefinition();
            var    Estd  = new TuningStrings(new Int16[] { 0, 0, 0, 0, 0, 0 });

            tName = t.NameFromStrings(Estd, false);
            Assert.AreEqual("E Standard", tName);

            var Ebstd = new TuningStrings(new Int16[] { -1, -1, -1, -1, -1, -1 });

            tName = t.NameFromStrings(Ebstd, true);
            Assert.AreEqual("Eb Standard", tName);

            var EbstdB = new TuningStrings(new Int16[] { -1, -1, -1, -1 }); //TODO: support bass

            tName = t.NameFromStrings(EbstdB, true);
            //Assert.AreEqual("Eb Standard", tName);

            var Ccstd = new TuningStrings(new Int16[] { -3, -3, -3, -3, -3, -3 });

            tName = t.NameFromStrings(Ccstd, false);
            Assert.AreEqual("C# Standard", tName);

            var DropEb = new TuningStrings(new Int16[] { -3, -1, -1, -1, -1, -1 });

            tName = t.NameFromStrings(DropEb, true);
            Assert.AreEqual("Eb Drop Db", tName);

            var DropA = new TuningStrings(new Int16[] { 5, 7, 7, 7, 7, 7 });

            tName = t.NameFromStrings(DropA, false);
            Assert.AreEqual("B Drop A", tName);
        }
        public TuningDefinition(TuningStrings tStrings, GameVersion rsVersion, string name = "", bool custom = true)
        {
            Custom      = custom;
            Tuning      = tStrings;
            GameVersion = rsVersion;

            UIName = Name = !string.IsNullOrEmpty(name) ? name : NameFromStrings(tStrings);
        }
        static string NoteName(TuningStrings tuning, byte s, bool flats = false)
        {
            String[] notesNamesHi = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
            String[] notesNamesLo = { "C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B" };

            var id = Sng2014FileWriter.GetMidiNote(tuning.ToArray(), s, 0, false, 0) % 12;

            return(flats ? notesNamesLo[id] : notesNamesHi[id]);
        }
Example #9
0
        public AttributesHeader2014(string arrangementFileName, Arrangement arrangement, DLCPackageData info, Platform platform)
        {
            IsVocal     = arrangement.ArrangementType == Sng.ArrangementType.Vocal;
            SongContent = (IsVocal) ? null : Song2014.LoadFromFile(arrangement.SongXml.File);
            var dlcName = info.Name.ToLower();

            var albumUrn = String.Format(URN_TEMPLATE, TagValue.Image.GetDescription(), TagValue.DDS.GetDescription(), String.Format("album_{0}", dlcName));
            var jsonUrn  = String.Format(URN_TEMPLATE, TagValue.Database.GetDescription(), TagValue.JsonDB.GetDescription(), String.Format("{0}_{1}", dlcName, arrangementFileName));

            //FILL ATTRIBUTES
            this.AlbumArt              = albumUrn;
            ArrangementName            = arrangement.Name.ToString();
            DLC                        = true;
            DLCKey                     = info.Name;
            LeaderboardChallengeRating = 0;
            ManifestUrn                = jsonUrn;
            MasterID_RDV               = arrangement.MasterId;
            PersistentID               = arrangement.Id.ToString().Replace("-", "").ToUpper();
            Shipping                   = true;
            SKU                        = "RS2";
            SongKey                    = info.Name;

            if (!IsVocal)
            {
                AlbumName      = AlbumNameSort = info.SongInfo.Album;
                ArtistName     = info.SongInfo.Artist;
                CentOffset     = arrangement.TuningPitch != 0 ? TuningFrequency.Frequency2Cents(arrangement.TuningPitch) : 0.0;
                ArtistNameSort = info.SongInfo.ArtistSort;
                CapoFret       = (arrangement.Sng2014.Metadata.CapoFretId == 0xFF) ? CapoFret = 0 : Convert.ToDecimal(arrangement.Sng2014.Metadata.CapoFretId);
                DNA_Chords     = arrangement.Sng2014.DNACount[(int)DNAId.Chord];
                DNA_Riffs      = arrangement.Sng2014.DNACount[(int)DNAId.Riff];
                DNA_Solo       = arrangement.Sng2014.DNACount[(int)DNAId.Solo];
                NotesEasy      = arrangement.Sng2014.NoteCount[0];
                NotesMedium    = arrangement.Sng2014.NoteCount[1];
                NotesHard      = arrangement.Sng2014.NoteCount[2];
                EasyMastery    = NotesEasy / NotesHard;
                MediumMastery  = NotesMedium / NotesHard;
                Representative = Convert.ToInt32(!arrangement.BonusArr);
                RouteMask      = (int)arrangement.RouteMask;

                // TODO this is not quite it but much closer
                SongDiffEasy   = SongContent.SongLength / NotesEasy;
                SongDiffMed    = SongContent.SongLength / NotesMedium;
                SongDiffHard   = SongContent.SongLength / NotesHard;
                SongDifficulty = SongDiffHard;

                SongLength   = (double?)Math.Round(SongContent.SongLength, 3, MidpointRounding.AwayFromZero);
                SongName     = info.SongInfo.SongDisplayName;
                SongNameSort = info.SongInfo.SongDisplayNameSort;
                SongYear     = info.SongInfo.SongYear;

                var tunDef = TuningDefinitionRepository.Instance().Select(arrangement.Tuning, platform.version);
                Tuning = tunDef.Tuning;
            }
        }
Example #10
0
        // .SequenceEqual, .Equals, "==", .GetHashCode do not produce accurate results
        // for objects ... the following works as expected for objects
        public static bool TuningEquals(TuningStrings x, TuningStrings y)
        {
            if (x == null || y == null)
            {
                return(false);
            }

            return(x.String0 == y.String0 && x.String1 == y.String1 &&
                   x.String2 == y.String2 && x.String3 == y.String3 &&
                   x.String4 == y.String4 && x.String5 == y.String5);
        }
Example #11
0
 public ArrangementTuning(TuningStrings tuning, int centsOffset, int capoFret)
 {
     String0     = tuning.String0;
     String1     = tuning.String1;
     String2     = tuning.String2;
     String3     = tuning.String3;
     String4     = tuning.String4;
     String5     = tuning.String5;
     CentsOffset = centsOffset;
     CapoFret    = capoFret;
 }
Example #12
0
        public static TuningStrings Convert2Bass(TuningStrings guitarTuning)
        {
            TuningStrings bassTuning = new TuningStrings();

            bassTuning.String0 = guitarTuning.String0;
            bassTuning.String1 = guitarTuning.String1;
            bassTuning.String2 = guitarTuning.String2;
            bassTuning.String3 = guitarTuning.String3;
            bassTuning.String4 = 0;
            bassTuning.String5 = 0;

            return(bassTuning);
        }
        public static TuningStrings Convert2Bass(TuningStrings guitarTuning)
        {
            var bassTuning = new TuningStrings
            {
                String0 = guitarTuning.String0,
                String1 = guitarTuning.String1,
                String2 = guitarTuning.String2,
                String3 = guitarTuning.String3,
                String4 = 0,
                String5 = 0
            };

            return(bassTuning);
        }
Example #14
0
        public TuningDefinition SelectAny(TuningStrings tuningStrings, GameVersion gameVersion)
        {
            var g = Select(tuningStrings, gameVersion);
            var b = SelectForBass(tuningStrings, gameVersion);

            if (ReferenceEquals(g, b))
            {
                return(g);
            }
            else
            {
                return(b);
            }
        }
        public TuningDefinition Detect(TuningStrings tuning, GameVersion gameVersion, bool addreload = false)
        {
            var t = Instance.Select(tuning, gameVersion);

            // if unknown tuning then register it at tunung definition
            if (t == null)
            {
                t = new TuningDefinition(tuning, gameVersion);
                // only add full(guitar one) arrangement tunings to the TuningDefinitionRepository
                if (addreload)
                {
                    Add(t, true);
                }
            }
            return(t);
        }
Example #16
0
        public void TuningStringsEqualsTest()
        {
            //Object\regular equality
            var expected = new TuningStrings(new Int16[] { -2, 0, 0, 0, 0, 0 });
            var actual   = new TuningStrings(new Int16[] { 0, 0, 0, 0, 0, 0 });

            Assert.AreNotEqual(expected, actual);

            //LINQ equality
            var list = new List <TuningStrings> {
                expected, expected, actual
            };
            var distinct = list.Union(new List <TuningStrings> {
                actual, actual, expected
            }).ToList();

            if (list.Count == distinct.Count)
            {
                Assert.Fail();
            }
        }
        public static string TuningToName(TuningStrings songTuning, GameVersion gameVersion = GameVersion.RS2014, List <TuningDefinition> tuningXml = null)
        {
            // speed hack ... use preloaded TuningDefinitionRepository if available
            if (tuningXml == null)
            {
                tuningXml = TuningDefinitionRepository.Instance.LoadTuningDefinitions(gameVersion);
            }

            foreach (var tuning in tuningXml)
            {
                if (tuning.Tuning.String0 == songTuning.String0 &&
                    tuning.Tuning.String1 == songTuning.String1 &&
                    tuning.Tuning.String2 == songTuning.String2 &&
                    tuning.Tuning.String3 == songTuning.String3 &&
                    tuning.Tuning.String4 == songTuning.String4 &&
                    tuning.Tuning.String5 == songTuning.String5)
                {
                    return(tuning.UIName);
                }
            }

            return("Other");
        }
Example #18
0
        private static string GetTuningName(TuningStrings tuning, bool isBass, int capo, bool inBem = true)
        {
            List <Int32>  Notes     = new List <Int32>();
            List <String> NoteNames = new List <String>();

            String[] notesNames   = new String[] { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
            String[] notesNamesHi = new String[] { "C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B" };
            for (Byte s = 0; s < (isBass ? 4 : 6); s++)
            {
                Notes.Add(Sng2014FileWriter.GetMidiNote(tuning.ToShortArray(), s, 0, isBass, capo));
            }
            foreach (var mNote in Notes)
            {
                if (inBem)
                {
                    NoteNames.Add(notesNamesHi[mNote % 12]);        //oct = mNote / 12 - 1
                }
                else
                {
                    NoteNames.Add(notesNames[mNote % 12]);  //oct = mNote / 12 - 1
                }
            }
            return(String.Join(" ", NoteNames));
        }
Example #19
0
        public AttributesHeader2014(string arrangementFileName, Arrangement arrangement, DLCPackageData info, Platform platform)
        {
            IsVocal     = arrangement.ArrangementType == Sng.ArrangementType.Vocal;
            SongContent = (IsVocal) ? null : Song2014.LoadFromFile(arrangement.SongXml.File);
            var dlcName = info.Name.ToLower();

            var albumUrn = String.Format(URN_TEMPLATE, TagValue.Image.GetDescription(), TagValue.DDS.GetDescription(), String.Format("album_{0}", dlcName));
            var jsonUrn  = String.Format(URN_TEMPLATE, TagValue.Database.GetDescription(), TagValue.JsonDB.GetDescription(), String.Format("{0}_{1}", dlcName, arrangementFileName));

            //FILL ATTRIBUTES
            this.AlbumArt              = albumUrn;
            JapaneseVocal             |= arrangement.Name == Sng.ArrangementName.JVocals;
            ArrangementName            = IsVocal ? Sng.ArrangementName.Vocals.ToString() : arrangement.Name.ToString(); //HACK: weird vocals stuff
            DLC                        = true;
            DLCKey                     = info.Name;
            LeaderboardChallengeRating = 0;
            ManifestUrn                = jsonUrn;
            MasterID_RDV               = arrangement.MasterId;
            PersistentID               = arrangement.Id.ToString().Replace("-", "").ToUpper();
            Shipping                   = true;
            SKU                        = "RS2";
            SongKey                    = info.Name;

            if (!IsVocal)
            {
                AlbumName      = AlbumNameSort = info.SongInfo.Album;
                ArtistName     = info.SongInfo.Artist;
                CentOffset     = (!arrangement.TuningPitch.Equals(0)) ? TuningFrequency.Frequency2Cents(arrangement.TuningPitch) : 0.0;
                ArtistNameSort = info.SongInfo.ArtistSort;
                CapoFret       = (arrangement.Sng2014.Metadata.CapoFretId == 0xFF) ? CapoFret = 0 : Convert.ToDecimal(arrangement.Sng2014.Metadata.CapoFretId);
                DNA_Chords     = arrangement.Sng2014.DNACount[(int)DNAId.Chord];
                DNA_Riffs      = arrangement.Sng2014.DNACount[(int)DNAId.Riff];
                DNA_Solo       = arrangement.Sng2014.DNACount[(int)DNAId.Solo];
                NotesEasy      = arrangement.Sng2014.NoteCount[0];
                NotesMedium    = arrangement.Sng2014.NoteCount[1];
                NotesHard      = arrangement.Sng2014.NoteCount[2];
                EasyMastery    = NotesEasy / NotesHard;
                MediumMastery  = NotesMedium / NotesHard;
                Metronome      = (int?)arrangement.Metronome;
                Representative = Convert.ToInt32(!arrangement.BonusArr);
                RouteMask      = (int)arrangement.RouteMask;

                // TODO use ManifestFunctions.GetSongDifficulty() method (fix generation alghorythm)
                SongDiffEasy   = SongContent.SongLength / NotesEasy;
                SongDiffMed    = SongContent.SongLength / NotesMedium;
                SongDiffHard   = SongContent.SongLength / NotesHard;
                SongDifficulty = SongDiffHard;

                SongLength   = (double?)Math.Round(SongContent.SongLength, 3, MidpointRounding.AwayFromZero);
                SongName     = info.SongInfo.SongDisplayName;
                SongNameSort = info.SongInfo.SongDisplayNameSort;
                SongYear     = info.SongInfo.SongYear;

                //Detect tuning
                var tuning = TuningDefinitionRepository.Instance().SelectAny(SongContent.Tuning, platform.version);
                if (tuning == null)
                {
                    tuning        = new TuningDefinition();
                    tuning.Tuning = SongContent.Tuning;
                    tuning.Name   = tuning.UIName = arrangement.Tuning;
                    if (String.IsNullOrEmpty(tuning.Name))
                    {
                        tuning.Name = tuning.UIName = tuning.NameFromStrings(arrangement.TuningStrings, arrangement.ArrangementType == RocksmithToolkitLib.Sng.ArrangementType.Bass);
                    }
                    tuning.Custom      = true;
                    tuning.GameVersion = GameVersion.RS2014;
                    TuningDefinitionRepository.Instance().Add(tuning, true);
                }
                Tuning = tuning.Tuning;
            }
        }
 public IEnumerable <TuningDefinition> Select(TuningStrings tuningStrings)
 {
     return(List.OfType <TuningDefinition>().Where(s => s.Tuning.ToArray().SequenceEqual(tuningStrings.ToArray())));
 }
        public TuningDefinition SelectAny(TuningStrings tuningStrings, GameVersion gameVersion)
        {
            var g = Select(tuningStrings, gameVersion);

            return(g); //Accurate compare, no mercy for bass.
        }
 public TuningDefinition SelectForBass(TuningStrings tuningStrings, GameVersion gameVersion)
 {
     return(List.FirstOrDefault <TuningDefinition>(s => s.Tuning.ToBassArray().SequenceEqual(tuningStrings.ToBassArray()) && s.GameVersion == gameVersion));
 }
 public IEnumerable <TuningDefinition> Select(TuningStrings tuningStrings)
 {
     return(List.Where(s => s.Tuning.Equals(tuningStrings)));
 }