Exemple #1
0
        static void PrintChordNotesOnInstrument(StringedInstrument instrument, ICollection <Note> notes)
        {
            var builder        = new StringBuilder();
            var maxNumberFrets = instrument.Strings.Max(str => str.NumberOfFrets);
            var fretRange      = Enumerable.Range(0, maxNumberFrets);

            builder.AppendLine(GetSpacedString <int>(fretRange));
            builder.AppendLine(new String('-', maxNumberFrets * 4));
            foreach (var _string in instrument.Strings)
            {
                var notesInString = _string.PossibleNotes();
                for (var noteIndex = 0; noteIndex < notesInString.Length; noteIndex++)
                {
                    if (!notes.Contains(notesInString[noteIndex]))
                    {
                        notesInString[noteIndex] = Note.Rest;
                    }
                }
                //builder.Append("|");
                //builder.Append(String.Join<Note>(" | ", notesInString));
                //builder.AppendLine("|");
                builder.AppendLine(GetSpacedString <Note>(notesInString));
            }
            Console.WriteLine(builder.ToString());
        }
        // Todo: Write more in-depth tests, possibly abstract out a testing function.
        static void Main(string[] args)
        {
            StringedInstrument guitar  = new StringedInstrument("guitar", 6, 22, new string[] { "E", "A", "D", "G", "B", "E" });
            StringedInstrument bass    = new StringedInstrument("bass", 4, 22, new string[] { "E", "A", "D", "G" });
            StringedInstrument ukulele = new StringedInstrument("ukulele", 4, 20, new string[] { "C", "G", "E", "A" });

            Console.WriteLine("Tests:");

            // Basic Testing.
            Console.WriteLine(guitar.name == "guitar");
            Console.WriteLine(guitar.stringCount == 6);
            Console.WriteLine(guitar.tuning[0] == "E");
            Console.WriteLine(guitar.playNote(0, 0) == "E");
            guitar.changeStringTuning(0, "F");
            Console.WriteLine(guitar.playNote(0, 0) == "F");

            Console.WriteLine(ukulele.name == "ukulele");
            Console.WriteLine(ukulele.stringCount == 4);
            Console.WriteLine(ukulele.tuning[1] == "G");
            Console.WriteLine(ukulele.playNote(1, 4) == "B");
            ukulele.changeStringTuning(2, "F");
            Console.WriteLine(ukulele.playNote(2, 0) == "F");

            Console.WriteLine(bass.name == "bass");
            Console.WriteLine(bass.stringCount == 4);
            Console.WriteLine(bass.tuning[3] == "G");
            Console.WriteLine(bass.playNote(3, 13) == "G#");
            bass.changeStringTuning(0, "D");
            Console.WriteLine(bass.playNote(0, 1) == "D#");

            // Verify all strings changed.
            guitar.changeAllTuning(new string[] { "D", "A", "D#", "B", "G", "F#" });
            Console.WriteLine(guitar.tuning[0] == "D");
            Console.WriteLine(guitar.tuning[1] == "A");
            Console.WriteLine(guitar.tuning[2] == "D#");
            Console.WriteLine(guitar.tuning[3] == "B");
            Console.WriteLine(guitar.tuning[4] == "G");
            Console.WriteLine(guitar.tuning[5] == "F#");

            // Reset all tunings to standard.
            guitar.changeAllTuning(new string[] { "E", "A", "D", "G", "B", "E" });
            bass.changeAllTuning(new string[] { "E", "A", "D", "G" });
            ukulele.changeAllTuning(new string[] { "C", "G", "E", "A" });

            // Basic note/octave testing.
            Console.WriteLine(guitar.playNote(2, 2) == bass.playNote(0, 0));
            Console.WriteLine(guitar.playNote(3, 1) == bass.playNote(3, 13));
            Console.WriteLine(guitar.playNote(5, 17) == ukulele.playNote(3, 0));
            Console.WriteLine(bass.playNote(1, 9) == ukulele.playNote(2, 2));
            Console.WriteLine(bass.playNote(2, 5) == ukulele.playNote(1, 0));
        }
        public void GuitarWithStandardTuningProducesCorrectNotes()
        {
            var guitar = new StringedInstrument(
                new List <InstrumentString>()
            {
                InstrumentString.For(Note.E, 20),
                InstrumentString.For(Note.A, 20),
                InstrumentString.For(Note.D, 20),
                InstrumentString.For(Note.G, 20),
                InstrumentString.For(Note.B, 20),
                InstrumentString.For(Note.E, 20),
            });

            var bottomEStringNotes = String.Join <Note>(" ", guitar.Strings.ElementAt(0).PossibleNotes());

            Assert.Equal("E F F# G G# A A# B C C# D D# E F F# G G# A A# B", bottomEStringNotes);

            var aStringNotes = String.Join <Note>(" ", guitar.Strings.ElementAt(1).PossibleNotes());

            Assert.Equal("A A# B C C# D D# E F F# G G# A A# B C C# D D# E", aStringNotes);

            var dStringNotes = String.Join <Note>(" ", guitar.Strings.ElementAt(2).PossibleNotes());

            Assert.Equal("D D# E F F# G G# A A# B C C# D D# E F F# G G# A", dStringNotes);

            var gStringNotes = String.Join <Note>(" ", guitar.Strings.ElementAt(3).PossibleNotes());

            Assert.Equal("G G# A A# B C C# D D# E F F# G G# A A# B C C# D", gStringNotes);

            var bStringNotes = String.Join <Note>(" ", guitar.Strings.ElementAt(4).PossibleNotes());

            Assert.Equal("B C C# D D# E F F# G G# A A# B C C# D D# E F F#", bStringNotes);

            var topEStringNotes = String.Join <Note>(" ", guitar.Strings.ElementAt(5).PossibleNotes());

            Assert.Equal("E F F# G G# A A# B C C# D D# E F F# G G# A A# B", topEStringNotes);
        }