Example #1
0
 def test_dottt(self):
     t = mpd.music_to_tracklist(r"\staff { c4 r4. c4 }")
     self.assertEqual(t[0].str_repr(), "n48 d1/4 o48 d3/8 n48 d1/4 o48")
     t = mpd.music_to_tracklist(r"\staff { c4 r4.. c4 }")
     self.assertEqual(t[0].str_repr(), "n48 d1/4 o48 d7/16 n48 d1/4 o48")
     t = mpd.music_to_tracklist(r"\staff { c4.. c16 }")
     self.assertEqual(t[0].str_repr(), "n48 d7/16 o48 n48 d1/16 o48")
Example #2
0
 def test_dottt(self):
     t = mpd.music_to_tracklist(r"\staff { c4 r4. c4 }")
     self.assertEquals(t[0].str_repr(), "n48 d1/4 o48 d3/8 n48 d1/4 o48")
     t = mpd.music_to_tracklist(r"\staff { c4 r4.. c4 }")
     self.assertEquals(t[0].str_repr(), "n48 d1/4 o48 d7/16 n48 d1/4 o48")
     t = mpd.music_to_tracklist(r"\staff { c4.. c16 }")
     self.assertEquals(t[0].str_repr(), "n48 d7/16 o48 n48 d1/16 o48")
Example #3
0
 def test_parse_times_do_not_nest(self):
     s = "\\staff { c4 \\times 3/2 { \\times 3/2 { c4 c4 } } }\n"
     try:
         mpd.music_to_tracklist(s)
     except ParseError as e:
         self._check(e, s, '\\times 3/2 {')
         self.assertEqual((e.m_linepos1, e.m_linepos2), (25, 37))
     else:
         self.assertFalse("No exception raised!")
Example #4
0
 def test_parse_addvoice_before_staff(self):
     s = "   \\addvoice { \n" \
         "  c4 d }"
     try:
         mpd.music_to_tracklist(s)
     except ParseError as e:
         self._check(e, s, '\\addvoice')
         self.assertEqual((e.m_linepos1, e.m_linepos2), (3, 12))
     else:
         self.assertFalse("No exception raised!")
Example #5
0
 def test_parse_err1(self):
     s = "\\staff{ c4 < d < e \n" \
         "}"
     try:
         mpd.music_to_tracklist(s)
     except ParseError as e:
         self._check(e, s, '<')
         self.assertEqual((e.m_linepos1, e.m_linepos2), (15, 16))
     else:
         self.assertFalse("No exception raised!")
Example #6
0
 def test_track2(self):
     self.do_file("""
     header { random_transpose = no }
     question { music = music("\staff{ c'' }"
                             + "\\addvoice{ e' }"
                             + "\staff{ c }")
     }
     """)
     self.p._idx = 0
     mpd.music_to_tracklist(self.p.get_question()['music'].get_mpd_music_string(self.p))
Example #7
0
 def test_parse_err3(self):
     s = "\\staff{ \n" \
         "  c4 d > \times 3/2"
     try:
         mpd.music_to_tracklist(s)
     except ParseError as e:
         self._check(e, s, '>')
         self.assertEqual((e.m_linepos1, e.m_linepos2), (7, 8))
     else:
         self.assertFalse("No exception raised!")
Example #8
0
 def test_parse_brace_not_allowed(self):
     s = "\\staff{ c4 { e \n" \
         "}"
     try:
         mpd.music_to_tracklist(s)
     except ParseError as e:
         self._check(e, s, '{')
         self.assertEqual((e.m_linepos1, e.m_linepos2), (11, 12))
     else:
         self.assertFalse("No exception raised!")
Example #9
0
 def test_track2(self):
     self.do_file("""
     header { random_transpose = no }
     question { music = music("\staff{ c'' }"
                             + "\\addvoice{ e' }"
                             + "\staff{ c }")
     }
     """)
     self.p._idx = 0
     mpd.music_to_tracklist(
         self.p.get_question()['music'].get_mpd_music_string(self.p))
Example #10
0
 def test_track3_2(self):
     self.p = lessonfile.QuestionsLessonfile()
     self.p.parse_string(r"""
     header { random_transpose = no }
     question { music = music("\staff{ c''1 c''1 }"
                             + "\staff{ r4 r g2 g1 }"
                             + "\staff{ r4 r r c c1}")
     }
     """)
     self.p._idx = 0
     tracklist = mpd.music_to_tracklist(self.p.get_question()['music'].get_mpd_music_string(self.p))
     track_fasit = ["n72 d1/1 o72 n72 d1/1 o72",
                    "d1/2 n55 d1/2 o55 n55 d1/1 o55",
                    "d3/4 n48 d1/4 o48 n48 d1/1 o48"]
     for idx, correct in enumerate(track_fasit):
         self.assertEquals(tracklist[idx].str_repr(), correct)
     for idx in range(3):
         tracklist[idx].prepend_patch(idx + 1)
         track_fasit[idx] = "p%i " % (idx + 1) + track_fasit[idx]
     for idx, correct in enumerate(track_fasit):
         self.assertEquals(tracklist[idx].str_repr(), correct)
     self.assertEquals(MidiEventStream(*tracklist).str_repr(details=1),
       "p0:1 v0:100 n0:72 d1/2 "
       "p1:2 v1:100 n1:55 d1/4 "
       "p2:3 v2:100 n2:48 d1/4 "
       "o72 o55 o48 "
       "n0:72 n1:55 n2:48 d1/1 "
       "o72 o55 o48")
Example #11
0
 def test_track3(self):
     self.do_file("""
     header { random_transpose = no }
     question { music = music("\staff{ c''1 c''1 }"
                             + "\\addvoice{ r4 e'2. e'1 }"
                             + "\staff{ r4 r g2 g1 }"
                             + "\\addvoice{ r4 r r c c1}")
     }
     """)
     self.p._idx = 0
     tracklist = mpd.music_to_tracklist(self.p.get_question()['music'].get_mpd_music_string(self.p))
     track_fasit = ["n72 d1/1 o72 n72 d1/1 o72",
                    "d1/4 n64 d3/4 o64 n64 d1/1 o64",
                    "d1/2 n55 d1/2 o55 n55 d1/1 o55",
                    "d3/4 n48 d1/4 o48 n48 d1/1 o48"]
     for idx, correct in enumerate(track_fasit):
         self.assertEqual(tracklist[idx].str_repr(), correct)
     for idx in range(4):
         tracklist[idx].prepend_patch(idx + 1)
         track_fasit[idx] = "p%i " % (idx + 1) + track_fasit[idx]
     for idx, correct in enumerate(track_fasit):
         self.assertEqual(tracklist[idx].str_repr(), correct)
     self.assertEqual(
         MidiEventStream(*tracklist).str_repr(details=1),
         "p0:1 p1:2 p2:3 p3:4 v0:100 n0:72 d1/4 "
         "v1:100 n1:64 d1/4 "
         "v2:100 n2:55 d1/4 "
         "v3:100 n3:48 d1/4 "
         "o72 o64 o55 o48 "
         "n0:72 n1:64 n2:55 n3:48 d1/1 "
         "o72 o64 o55 o48")
Example #12
0
 def test_parse_times_do_not_nest(self):
     s = "\\staff { c4 \\times 3/2 { \\times 3/2 { c4 c4 } } }\n"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '\\times 3/2 {')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (25, 37))
Example #13
0
 def test_track3_2(self):
     self.do_file(r"""
     header { random_transpose = no }
     question { music = music("\staff{ c''1 c''1 }"
                             + "\staff{ r4 r g2 g1 }"
                             + "\staff{ r4 r r c c1}")
     }
     """)
     self.p._idx = 0
     tracklist = mpd.music_to_tracklist(
         self.p.get_question()['music'].get_mpd_music_string(self.p))
     track_fasit = [
         "n72 d1/1 o72 n72 d1/1 o72", "d1/2 n55 d1/2 o55 n55 d1/1 o55",
         "d3/4 n48 d1/4 o48 n48 d1/1 o48"
     ]
     for idx, correct in enumerate(track_fasit):
         self.assertEquals(tracklist[idx].str_repr(), correct)
     for idx in range(3):
         tracklist[idx].prepend_patch(idx + 1)
         track_fasit[idx] = "p%i " % (idx + 1) + track_fasit[idx]
     for idx, correct in enumerate(track_fasit):
         self.assertEquals(tracklist[idx].str_repr(), correct)
     self.assertEquals(
         MidiEventStream(*tracklist).str_repr(details=1),
         "p0:1 p1:2 p2:3 v0:100 n0:72 d1/2 "
         "v1:100 n1:55 d1/4 "
         "v2:100 n2:48 d1/4 "
         "o72 o55 o48 "
         "n0:72 n1:55 n2:48 d1/1 "
         "o72 o55 o48")
Example #14
0
 def test_parse_times_do_not_nest(self):
     s = "\\staff { c4 \\times 3/2 { \\times 3/2 { c4 c4 } } }\n"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '\\times 3/2 {')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (25, 37))
Example #15
0
 def test_parse_addvoice_before_staff(self):
     s = "   \\addvoice { \n" \
         "  c4 d }"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '\\addvoice')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (3, 12))
Example #16
0
 def test_parse_err1(self):
     s = "\\staff{ c4 < d < e \n" \
         "}"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '<')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (15, 16))
Example #17
0
 def test_parse_err1(self):
     s = "\\staff{ c4 < d < e \n" \
         "}"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '<')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (15, 16))
Example #18
0
 def test_parse_err3(self):
     s = "\\staff{ \n" \
         "  c4 d > \times 3/2"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '>')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (7, 8))
Example #19
0
 def test_parse_brace_not_allowed(self):
     s = "\\staff{ c4 { e \n" \
         "}"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '{')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (11, 12))
Example #20
0
 def test_parse_addvoice_before_staff(self):
     s = "   \\addvoice { \n" \
         "  c4 d }"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '\\addvoice')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (3, 12))
Example #21
0
 def test_parse_brace_not_allowed(self):
     s = "\\staff{ c4 { e \n" \
         "}"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '{')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (11, 12))
Example #22
0
 def test_parse_err3(self):
     s = "\\staff{ \n" \
         "  c4 d > \times 3/2"
     try:
         t = mpd.music_to_tracklist(s)
     except ParseError, e:
         self._check(e, s, '>')
         self.assertEquals((e.m_linepos1, e.m_linepos2), (7, 8))
Example #23
0
def play_music3(music, tempo, instrument, start=None, end=None):
    """
    Either a tuple (patch, velocity) or a tuple of 6:
    (patch1, velocity1, p2, v2, p3, v3)
    """
    if len(instrument) == 2:
        instrument = instrument * 3
    tracklist = mpd.music_to_tracklist(music, start, end)
    tracklist[0].prepend_patch(instrument[4])
    tracklist[0].prepend_volume(instrument[5])
    a, b = tempo
    # FIXME the bpm api is wrong. We set the tempo to one track, and it works for all.
    tracklist[0].prepend_bpm(a, b)
    for track in tracklist[:-1][1:]:
        track.prepend_patch(instrument[2])
        track.prepend_volume(instrument[3])
    tracklist[-1].prepend_patch(instrument[0])
    tracklist[-1].prepend_volume(instrument[1])
    soundcard.synth.play_track(*tracklist)
Example #24
0
 def test_track3_1(self):
     self.do_file("""
     header { random_transpose = no }
     question { music = music("\staff{ c''1 c''1 }"
                             + "\staff{ r4 r g2 g1 }")
     }
     """)
     self.p._idx = 0
     tracklist = mpd.music_to_tracklist(self.p.get_question()['music'].get_mpd_music_string(self.p))
     track_fasit = ["n72 d1/1 o72 n72 d1/1 o72",
                    "d1/2 n55 d1/2 o55 n55 d1/1 o55"]
     for idx, correct in enumerate(track_fasit):
         self.assertEquals(tracklist[idx].str_repr(), correct)
     for idx in range(2):
         tracklist[idx].prepend_patch(idx + 1)
         track_fasit[idx] = "p%i " % (idx + 1) + track_fasit[idx]
     for idx, correct in enumerate(track_fasit):
         self.assertEquals(tracklist[idx].str_repr(), correct)
     self.assertEquals(MidiEventStream(*tracklist).str_repr(details=1),
       "p0:1 p1:2 v0:100 n0:72 d1/2 v1:100 n1:55 d1/2 o72 o55 n0:72 n1:55 d1/1 o72 o55")
Example #25
0
 def test_times(self):
     t = mpd.music_to_tracklist(r"\staff{ \times 2/3{c8 d e} }")
     self.assertEqual(
         t[0].str_repr(),
         "n48 d1/12 o48 n50 d1/12 o50 n52 d1/12 o52")
     parse_to_score_object(r"\staff{ \times 2/3{c8 d e} }")
Example #26
0
 def test_whitespace_at_end(self):
     s = "   \\staff { \n" \
         "  c4 d } \n" \
         "\t \n"
     mpd.music_to_tracklist(s)
Example #27
0
 def on_play_first(self, _o):
     t = self.m_buf.get_text(self.m_buf.get_start_iter(),
                             self.m_buf.get_end_iter(), True)
     tr = mpd.music_to_tracklist(t, mpd.Rat(0, 1), mpd.Rat(1, 8))
     soundcard.synth.play_track(*tr)
Example #28
0
 def test_rest(self):
     # cmp to 1 because this is one track
     self.assertEquals(len(mpd.music_to_tracklist(r"\staff {r}")), 1)
Example #29
0
 def test_dotted_rest(self):
     self.assertEquals(len(mpd.music_to_tracklist(r"\staff {r4.}")), 1)
     self.assertEquals(len(mpd.music_to_tracklist(r"\staff {r4..}")), 1)
Example #30
0
 def test_times(self):
     t = mpd.music_to_tracklist(r"\staff{ \times 2/3{c8 d e} }")
     self.assertEquals(t[0].str_repr(),
                       "n48 d1/12 o48 n50 d1/12 o50 n52 d1/12 o52")
     score = parse_to_score_object(r"\staff{ \times 2/3{c8 d e} }")
Example #31
0
 def test_whitespace_at_end(self):
     s = "   \\staff { \n" \
         "  c4 d } \n" \
         "\t \n"
     t = mpd.music_to_tracklist(s)
Example #32
0
 def test_dotted_rest(self):
     self.assertEqual(len(mpd.music_to_tracklist(r"\staff {r4.}")), 1)
     self.assertEqual(len(mpd.music_to_tracklist(r"\staff {r4..}")), 1)
Example #33
0
 def test_rest(self):
     # cmp to 1 because this is one track
     self.assertEqual(len(mpd.music_to_tracklist(r"\staff {r}")), 1)
Example #34
0
 def on_play_first(self, _o):
     t = self.m_buf.get_text(self.m_buf.get_start_iter(),
                             self.m_buf.get_end_iter(), True)
     tr = mpd.music_to_tracklist(t, mpd.Rat(0, 1), mpd.Rat(1, 8))
     soundcard.synth.play_track(*tr)