Beispiel #1
0
        public void SimpsonsText()
        {
            var result = Rtttl.TryParse("Simpsons:d=4,o=5,b=160:32p,c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g",
                                        out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Name.Should().Be("Simpsons");
            rtttl.Settings.Should()
            .BeEquivalentTo(new
            {
                Duration       = Duration.Four,
                Scale          = Scale.Five,
                BeatsPerMinute = 160
            });
            rtttl.Notes.Should().BeEquivalentTo(new[]
            {
                new Note(Pitch.Pause, Duration.ThirtyTwo, null, false), //32p,
                new Note(Pitch.C, null, Scale.Six, true),               //c.6,
                new Note(Pitch.E, null, Scale.Six, false),              //e6,
                new Note(Pitch.FSharp, null, Scale.Six, false),         //f#6,
                new Note(Pitch.A, Duration.Eight, Scale.Six, false),    //8a6,
                new Note(Pitch.G, null, Scale.Six, true),               //g.6,
                new Note(Pitch.E, null, Scale.Six, false),              //e6,
                new Note(Pitch.C, null, Scale.Six, false),              //c6,
                new Note(Pitch.A, Duration.Eight, null, false),         //8a,
                new Note(Pitch.FSharp, Duration.Eight, null, false),    //8f#,
                new Note(Pitch.FSharp, Duration.Eight, null, false),    //8f#,
                new Note(Pitch.FSharp, Duration.Eight, null, false),    //8f#,
                new Note(Pitch.G, Duration.Two, null, false),           //2g
            }, options => options.WithStrictOrdering());
        }
Beispiel #2
0
        public void OnlyInvalidScaleSettingText(string scale)
        {
            var result = Rtttl.TryParse($":o={scale}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(false);
            rtttl.Should().BeNull();
        }
Beispiel #3
0
        public void OnlyInvalidDurationSettingText(string duration)
        {
            var result = Rtttl.TryParse($":d={duration}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(false);
            rtttl.Should().BeNull();
        }
Beispiel #4
0
        public void OnlyInvalidBeatsPerMinuteSettingText(string bpm)
        {
            var result = Rtttl.TryParse($":b={bpm}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(false);
            rtttl.Should().BeNull();
        }
        public void OnlySingleInvalidNoteWithTrailingJunkText(string note)
        {
            var result = Rtttl.TryParse($"::{note}", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(false);
            rtttl.Should().BeNull();
        }
        public void OnlySingleNotesWithSpaces(string note, Pitch pitch, Duration?duration, Scale?scale, bool dotted)
        {
            var result = Rtttl.TryParse($"::{note}", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Notes.Should().HaveCount(1)
            .And.BeEquivalentTo(
                new Note(pitch, duration, scale, dotted));
        }
        public void OnlySingleNotePitchText(string note, Pitch expectedPitch)
        {
            var result = Rtttl.TryParse($"::{note}", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Notes.Should().HaveCount(1)
            .And.BeEquivalentTo(new
            {
                Pitch = expectedPitch
            });
        }
Beispiel #8
0
        static void Main(string[] args)
        {
            var song = args[0];

            if (!Rtttl.TryParse(song, out var rtttl))
            {
                Console.WriteLine($"Failed to parse song: {song}");
                return;
            }

            Console.WriteLine($"Playing: {rtttl.Name}");

            rtttl.PlayWithConsoleBeep();
        }
Beispiel #9
0
        public void OnlyBeatsPerMinuteSettingText(string bpm, int expectedbpm)
        {
            var result = Rtttl.TryParse($":b={bpm}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Name.Should().BeEmpty();
            rtttl.Settings.Should()
            .BeEquivalentTo(new
            {
                Duration       = Duration.Four,
                Scale          = Scale.Six,
                BeatsPerMinute = expectedbpm
            });
        }
Beispiel #10
0
        public void OnlyScaleSettingText(string scale, Scale expectedScale)
        {
            var result = Rtttl.TryParse($":o={scale}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Name.Should().BeEmpty();
            rtttl.Settings.Should()
            .BeEquivalentTo(new
            {
                Duration       = Duration.Four,
                Scale          = expectedScale,
                BeatsPerMinute = 63
            });
        }
Beispiel #11
0
        public void OnlyDurationSettingText(string duration, Duration expectedDuration)
        {
            var result = Rtttl.TryParse($":d={duration}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Name.Should().BeEmpty();
            rtttl.Settings.Should()
            .BeEquivalentTo(new
            {
                Duration       = expectedDuration,
                Scale          = Scale.Six,
                BeatsPerMinute = 63
            });
        }
Beispiel #12
0
        public void MultipleSettingText(string settingsText, Duration duration, Scale scale, int beatsPerMinute)
        {
            var result = Rtttl.TryParse($":{settingsText}:", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Name.Should().BeEmpty();
            rtttl.Settings.Should()
            .BeEquivalentTo(new
            {
                Duration       = duration,
                Scale          = scale,
                BeatsPerMinute = beatsPerMinute
            });
        }
        public void OnlyNameText()
        {
            var result = Rtttl.TryParse("HauntHouse::", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Name.Should().Be("HauntHouse");
            rtttl.Settings.Should()
            .BeEquivalentTo(new
            {
                Duration       = Duration.Four,
                Scale          = Scale.Six,
                BeatsPerMinute = 63
            });
        }
Beispiel #14
0
        static void Main(string[] args)
        {
            // https://github.com/dotnet/iot/blob/main/Documentation/raspi-pwm.md
            Console.WriteLine("Hello PWM!");
            using var pwm = PwmChannel.Create(0, 0, 700);

            var rtttls = new [] {
                "Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6",
                "Super Mario - Main Theme:d=4,o=5,b=125:a,8f.,16c,16d,16f,16p,f,16d,16c,16p,16f,16p,16f,16p,8c6,8a.,g,16c,a,8f.,16c,16d,16f,16p,f,16d,16c,16p,16f,16p,16a#,16a,16g,2f,16p,8a.,8f.,8c,8a.,f,16g#,16f,16c,16p,8g#.,2g,8a.,8f.,8c,8a.,f,16g#,16f,8c,2c6",
                "Muppets:d=4,o=5,b=250:c6,c6,a,b,8a,b,g,p,c6,c6,a,8b,8a,8p,g.,p,e,e,g,f,8e,f,8c6,8c,8d,e,8e,8e,8p,8e,g,2p,c6,c6,a,b,8a,b,g,p,c6,c6,a,8b,a,g.,p,e,e,g,f,8e,f,8c6,8c,8d,e,8e,d,8d,c",
                "Looney:d=4,o=5,b=140:32p,c6,8f6,8e6,8d6,8c6,a.,8c6,8f6,8e6,8d6,8d#6,e.6,8e6,8e6,8c6,8d6,8c6,8e6,8c6,8d6,8a,8c6,8g,8a#,8a,8f"
            }
            .Select(song => (prased: Rtttl.TryParse(song, out var rtttl), rtttl: rtttl) switch
            {
                (true, _)x => x.rtttl !,
                (false, _) => throw new InvalidOperationException()
            })
        public void OnlyMultipleNotes()
        {
            var notes  = "a,2e,d#,b4,2a4,2e.";
            var result = Rtttl.TryParse($"::{notes}", out var rtttl);

            using var _ = new AssertionScope();
            result.Should().Be(true);
            rtttl !.Notes.Should().HaveCount(6)
            .And.BeEquivalentTo(new[]
            {
                new Note(Pitch.A, null, null, false),
                new Note(Pitch.E, Duration.Two, null, false),
                new Note(Pitch.DSharp, null, null, false),
                new Note(Pitch.B, null, Scale.Four, false),
                new Note(Pitch.A, Duration.Two, Scale.Four, false),
                new Note(Pitch.E, Duration.Two, null, true)
            },
                                options => options.WithStrictOrdering());
        }