Exemple #1
0
    def testSomeMeasuresNotEqual(self):
        a = etree.Element('score')
        a_part = etree.SubElement(a, 'part')
        measure = etree.SubElement(a_part, 'measure')
        attributes = etree.SubElement(measure, 'attributes')
        etree.SubElement(attributes, 'divisions').text = '24'
        etree.SubElement(etree.SubElement(a_part, 'measure'), 'note')
        a_part = etree.SubElement(a, 'part')
        etree.SubElement(etree.SubElement(a_part, 'measure'), 'note')
        etree.SubElement(a_part, 'measure')

        b = etree.Element('score')
        b_part = etree.SubElement(b, 'part')
        measure = etree.SubElement(b_part, 'measure')
        attributes = etree.SubElement(measure, 'attributes')
        etree.SubElement(attributes, 'divisions').text = '24'
        etree.SubElement(measure, 'note')
        etree.SubElement(etree.SubElement(b_part, 'measure'), 'note')
        b_part = etree.SubElement(b, 'part')
        etree.SubElement(b_part, 'measure')
        etree.SubElement(etree.SubElement(b_part, 'measure'), 'note')

        pd_testing.assert_frame_equal(
            musicxml.musicxml_similarity(a, b),
            pd.DataFrame([0.0, 1.0, 0.0, 0.0, 0.25],
                         columns=[musicxml.OVERALL_SCORE],
                         index=pd.MultiIndex.from_tuples(
                             [(0, 0), (0, 1), (1, 0), (1, 1), ('total', '')],
                             names=['staff', 'measure'])))
Exemple #2
0
 def testIdentical(self):
     filename = six.text_type(
         os.path.join(resource_loader.get_data_files_path(),
                      '../testdata/IMSLP00747.golden.xml'))
     score = etree.fromstring(open(filename, 'rb').read())
     similarity = musicxml.musicxml_similarity(score, score)
     self.assertGreater(len(similarity), 1)
     self.assertEqual(similarity['overall_score']['total'][0], 1.0)
Exemple #3
0
    def testMoreChangesLessSimilar(self):
        filename = six.text_type(
            os.path.join(resource_loader.get_data_files_path(),
                         '../testdata/TWO_MEASURE_SAMPLE.xml'))
        score = etree.fromstring(open(filename, 'rb').read())
        score2 = copy.deepcopy(score)
        durations2 = score2.findall('part/measure/note/duration')
        # Change the duration of one note by +1
        durations2[0].text = str(int(durations2[0].text) + 1)
        score3 = copy.deepcopy(score2)
        octaves3 = score3.findall('part/measure/note/pitch/octave')
        # Change the octave of another note by +1
        octaves3[1].text = str(int(octaves3[1].text) + 1)
        similarity11 = musicxml.musicxml_similarity(score, score)
        similarity12 = musicxml.musicxml_similarity(score, score2)
        similarity13 = musicxml.musicxml_similarity(score, score3)

        # Score 2 should be less similar than 1 to itself
        self.assertLess(similarity12['overall_score']['total'][0],
                        similarity11['overall_score']['total'][0])
        # Score 3 should be less similar than 2 to 1
        self.assertLess(similarity13['overall_score']['total'][0],
                        similarity12['overall_score']['total'][0])
Exemple #4
0
 def testEmptyMeasures(self):
     a = etree.Element('score')
     a_part = etree.SubElement(a, 'part')
     measure = etree.SubElement(a_part, 'measure')
     attributes = etree.SubElement(measure, 'attributes')
     etree.SubElement(attributes, 'divisions').text = '24'
     etree.SubElement(a_part, 'measure')
     etree.SubElement(a_part, 'measure')
     b = etree.Element('score')
     b_part = etree.SubElement(b, 'part')
     measure = etree.SubElement(b_part, 'measure')
     attributes = etree.SubElement(measure, 'attributes')
     etree.SubElement(attributes, 'divisions').text = '24'
     etree.SubElement(b_part, 'measure')
     etree.SubElement(b_part, 'measure')
     similarity = musicxml.musicxml_similarity(a, b)
     self.assertEqual(len(similarity), 4)
     self.assertEqual(similarity['overall_score']['total'][0], 1.0)
Exemple #5
0
 def evaluate(self, ground_truth):
   expected = file_io.read_file_to_string(ground_truth.ground_truth_filename)
   score = self.omr.run(
       page_spec.filename for page_spec in ground_truth.page_spec)
   actual = conversions.score_to_musicxml(score)
   return musicxml.musicxml_similarity(actual, expected)