예제 #1
0
 def testMultiVoice(self):
   tunes, exceptions = abc_parser.parse_abc_tunebook_file(
       os.path.join(tf.resource_loader.get_data_files_path(),
                    'testdata/zocharti_loch.abc'))
   self.assertEqual(0, len(tunes))
   self.assertEqual(1, len(exceptions))
   self.assertTrue(isinstance(exceptions[0], abc_parser.MultiVoiceException))
예제 #2
0
 def testMultiVoice(self):
     tunes, exceptions = abc_parser.parse_abc_tunebook_file(
         os.path.join(tf.resource_loader.get_data_files_path(),
                      'testdata/zocharti_loch.abc'))
     self.assertEqual(0, len(tunes))
     self.assertEqual(1, len(exceptions))
     self.assertTrue(isinstance(exceptions[0], abc_parser.MultiVoiceError))
예제 #3
0
 def testMultiVoice(self):
     tunes, exceptions = abc_parser.parse_abc_tunebook_file(
         os.path.join(tf.resource_loader.get_data_files_path(),
                      'testdata/zocharti_loch.abc'))
     self.assertEmpty(tunes)
     self.assertLen(exceptions, 1)
     self.assertIsInstance(exceptions[0], abc_parser.MultiVoiceError)
예제 #4
0
    def compare_directory(self, directory):
        self.maxDiff = None  # pylint: disable=invalid-name

        files_in_dir = tf.gfile.ListDirectory(directory)
        files_parsed = 0
        for file_in_dir in files_in_dir:
            if not file_in_dir.endswith('.abc'):
                continue
            abc = os.path.join(directory, file_in_dir)
            midis = {}
            ref_num = 1
            while True:
                midi = re.sub(r'\.abc$',
                              str(ref_num) + '.mid',
                              os.path.join(directory, file_in_dir))
                if not tf.gfile.Exists(midi):
                    break
                midis[ref_num] = midi
                ref_num += 1

            print('parsing {}: {}'.format(files_parsed, abc))
            tunes, exceptions = abc_parser.parse_abc_tunebook_file(abc)
            files_parsed += 1
            self.assertEqual(len(tunes), len(midis) - len(exceptions))

            for tune in tunes.values():
                expanded_tune = sequences_lib.expand_section_groups(tune)
                midi_ns = midi_io.midi_file_to_sequence_proto(
                    midis[tune.reference_number])
                # abc2midi adds a 1-tick delay to the start of every note, but we don't.
                tick_length = ((1 / (midi_ns.tempos[0].qpm / 60)) /
                               midi_ns.ticks_per_quarter)
                for note in midi_ns.notes:
                    note.start_time -= tick_length
                    # For now, don't compare velocities.
                    note.velocity = 90
                if len(midi_ns.notes) != len(expanded_tune.notes):
                    pdb.set_trace()
                    self.assertProtoEquals(midi_ns, expanded_tune)
                for midi_note, test_note in zip(midi_ns.notes,
                                                expanded_tune.notes):
                    try:
                        self.assertProtoEquals(midi_note, test_note)
                    except Exception as e:  # pylint: disable=broad-except
                        print(e)
                        pdb.set_trace()
                self.assertEqual(midi_ns.total_time, expanded_tune.total_time)
예제 #5
0
  def compare_directory(self, directory):
    self.maxDiff = None  # pylint: disable=invalid-name

    files_in_dir = tf.gfile.ListDirectory(directory)
    files_parsed = 0
    for file_in_dir in files_in_dir:
      if not file_in_dir.endswith('.abc'):
        continue
      abc = os.path.join(directory, file_in_dir)
      midis = {}
      ref_num = 1
      while True:
        midi = re.sub(r'\.abc$', str(ref_num) + '.mid',
                      os.path.join(directory, file_in_dir))
        if not tf.gfile.Exists(midi):
          break
        midis[ref_num] = midi
        ref_num += 1

      print('parsing {}: {}'.format(files_parsed, abc))
      tunes, exceptions = abc_parser.parse_abc_tunebook_file(abc)
      files_parsed += 1
      self.assertEqual(len(tunes), len(midis) - len(exceptions))

      for tune in tunes.values():
        expanded_tune = sequences_lib.expand_section_groups(tune)
        midi_ns = midi_io.midi_file_to_sequence_proto(
            midis[tune.reference_number])
        # abc2midi adds a 1-tick delay to the start of every note, but we don't.
        tick_length = ((1 / (midi_ns.tempos[0].qpm / 60)) /
                       midi_ns.ticks_per_quarter)
        for note in midi_ns.notes:
          note.start_time -= tick_length
          # For now, don't compare velocities.
          note.velocity = 90
        if len(midi_ns.notes) != len(expanded_tune.notes):
          pdb.set_trace()
          self.assertProtoEquals(midi_ns, expanded_tune)
        for midi_note, test_note in zip(midi_ns.notes, expanded_tune.notes):
          try:
            self.assertProtoEquals(midi_note, test_note)
          except Exception as e:  # pylint: disable=broad-except
            print(e)
            pdb.set_trace()
        self.assertEqual(midi_ns.total_time, expanded_tune.total_time)
예제 #6
0
    def testParseEnglishAbc(self):
        tunes, exceptions = abc_parser.parse_abc_tunebook_file(
            os.path.join(tf.resource_loader.get_data_files_path(),
                         'testdata/english.abc'))
        self.assertEqual(1, len(tunes))
        self.assertEqual(2, len(exceptions))
        self.assertTrue(
            isinstance(exceptions[0], abc_parser.VariantEndingError))
        self.assertTrue(isinstance(exceptions[1], abc_parser.PartError))

        expected_metadata1 = testing_lib.parse_test_proto(
            music_pb2.NoteSequence, """
        ticks_per_quarter: 220
        source_info: {
          source_type: SCORE_BASED
          encoding_type: ABC
          parser: MAGENTA_ABC
        }
        reference_number: 1
        sequence_metadata {
          title: "Dusty Miller, The; Binny's Jig"
          artist: "Trad."
          composers: "Trad."
        }
        key_signatures {
          key: G
        }
        section_annotations {
          time: 0.0
          section_id: 0
        }
        section_annotations {
          time: 6.0
          section_id: 1
        }
        section_annotations {
          time: 12.0
          section_id: 2
        }
        section_groups {
          sections {
            section_id: 0
          }
          num_times: 2
        }
        section_groups {
          sections {
            section_id: 1
          }
          num_times: 2
        }
        section_groups {
          sections {
            section_id: 2
          }
          num_times: 2
        }
        """)
        expected_expanded_metadata1 = testing_lib.parse_test_proto(
            music_pb2.NoteSequence, """
        ticks_per_quarter: 220
        source_info: {
          source_type: SCORE_BASED
          encoding_type: ABC
          parser: MAGENTA_ABC
        }
        reference_number: 1
        sequence_metadata {
          title: "Dusty Miller, The; Binny's Jig"
          artist: "Trad."
          composers: "Trad."
        }
        key_signatures {
          key: G
        }
        section_annotations {
          time: 0.0
          section_id: 0
        }
        section_annotations {
          time: 6.0
          section_id: 0
        }
        section_annotations {
          time: 12.0
          section_id: 1
        }
        section_annotations {
          time: 18.0
          section_id: 1
        }
        section_annotations {
          time: 24.0
          section_id: 2
        }
        section_annotations {
          time: 30.0
          section_id: 2
        }
        """)
        self.compare_to_abc2midi_and_metadata('testdata/english1.mid',
                                              expected_metadata1,
                                              expected_expanded_metadata1,
                                              tunes[1])
예제 #7
0
  def testParseEnglishAbc(self):
    tunes, exceptions = abc_parser.parse_abc_tunebook_file(
        os.path.join(tf.resource_loader.get_data_files_path(),
                     'testdata/english.abc'))
    self.assertEqual(1, len(tunes))
    self.assertEqual(2, len(exceptions))
    self.assertTrue(isinstance(exceptions[0],
                               abc_parser.VariantEndingException))
    self.assertTrue(isinstance(exceptions[1], abc_parser.PartException))

    expected_metadata1 = common_testing_lib.parse_test_proto(
        music_pb2.NoteSequence,
        """
        ticks_per_quarter: 220
        source_info: {
          source_type: SCORE_BASED
          encoding_type: ABC
          parser: MAGENTA_ABC
        }
        reference_number: 1
        sequence_metadata {
          title: "Dusty Miller, The; Binny's Jig"
          artist: "Trad."
          composers: "Trad."
        }
        key_signatures {
          key: G
        }
        section_annotations {
          time: 0.0
          section_id: 0
        }
        section_annotations {
          time: 6.0
          section_id: 1
        }
        section_annotations {
          time: 12.0
          section_id: 2
        }
        section_groups {
          sections {
            section_id: 0
          }
          num_times: 2
        }
        section_groups {
          sections {
            section_id: 1
          }
          num_times: 2
        }
        section_groups {
          sections {
            section_id: 2
          }
          num_times: 2
        }
        """)
    expected_expanded_metadata1 = common_testing_lib.parse_test_proto(
        music_pb2.NoteSequence,
        """
        ticks_per_quarter: 220
        source_info: {
          source_type: SCORE_BASED
          encoding_type: ABC
          parser: MAGENTA_ABC
        }
        reference_number: 1
        sequence_metadata {
          title: "Dusty Miller, The; Binny's Jig"
          artist: "Trad."
          composers: "Trad."
        }
        key_signatures {
          key: G
        }
        section_annotations {
          time: 0.0
          section_id: 0
        }
        section_annotations {
          time: 6.0
          section_id: 0
        }
        section_annotations {
          time: 12.0
          section_id: 1
        }
        section_annotations {
          time: 18.0
          section_id: 1
        }
        section_annotations {
          time: 24.0
          section_id: 2
        }
        section_annotations {
          time: 30.0
          section_id: 2
        }
        """)
    self.compareToAbc2midiAndMetadata(
        'testdata/english1.mid', expected_metadata1,
        expected_expanded_metadata1, tunes[1])
예제 #8
0
 def testMultiVoice(self):
     tunes, exceptions = abc_parser.parse_abc_tunebook_file(
         os.path.join(testing_lib.get_testdata_dir(), 'zocharti_loch.abc'))
     self.assertEmpty(tunes)
     self.assertLen(exceptions, 1)
     self.assertIsInstance(exceptions[0], abc_parser.MultiVoiceError)