Exemplo n.º 1
0
    def test_MajorThird_set_musicality(self):
        fileloader.load(constants.TEST_MIDI + 'linear_motion.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        trans = transforms.MajorThirdScalarTransform(6 * config.resolution, sequence)
        self.assertEqual(trans.intrinsic_musicality, vars.MAJOR_THIRD_SCALAR_CONTINUES_LINEARITY)
Exemplo n.º 2
0
    def test_MinorThirdScalarTransform_is_applicable(self):
        fileloader.load(constants.TEST_MIDI + 'min3_scalar.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('C-')
        ks_detector.detect_and_set_key_signatures()

        self.assertTrue(transforms.MinorThirdScalarTransform.applicable_at(0, sequence))
        self.assertFalse(transforms.MinorThirdScalarTransform.applicable_at(2, sequence))
Exemplo n.º 3
0
    def test_WholeStepNeighborTransform_is_applicable(self):
        fileloader.load(constants.TEST_MIDI + 'neighbor.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        self.assertTrue(transforms.WholeStepNeighborTransform.applicable_at(0, sequence))
        self.assertTrue(
            transforms.WholeStepNeighborTransform.applicable_at(2 * config.resolution, sequence))
Exemplo n.º 4
0
    def test__Beat_last_beat(self):
        fileloader.load(constants.TEST_MIDI + 'mixed_meter.mid', False)

        third_measure = 2
        last_beat = 5
        second_beat = 1

        self.assertTrue(
            time.measure(third_measure).beat(last_beat).last_beat())
        self.assertFalse(
            time.measure(third_measure).beat(second_beat).last_beat())
Exemplo n.º 5
0
    def test_WholeStepNeighborTransform_intermediate_pitch(self):
        fileloader.load(constants.TEST_MIDI + 'neighbor.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        trans = transforms.WholeStepNeighborTransform(0, sequence)
        whole_step_above = sequence[0].midi() + 2

        self.assertEqual(trans.intermediate_pitch, whole_step_above)
Exemplo n.º 6
0
    def test_MajorThirdScalarTransform_intermediate_pitch(self):
        fileloader.load(constants.TEST_MIDI + 'maj3_scalar.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        trans = transforms.MajorThirdScalarTransform(0, sequence)
        pitch_should_be = sequence[0].midi() + 2

        self.assertEqual(trans.intermediate_pitch, pitch_should_be)
Exemplo n.º 7
0
    def test_ArpeggialTransform_is_applicable(self):
        fileloader.load(constants.TEST_MIDI + 'arpeggial.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('C')
        config.chord_progression[5 * config.resolution] = chords.parse('A-')
        ks_detector.detect_and_set_key_signatures()

        self.assertTrue(transforms.ArpeggialTransform.applicable_at(0, sequence))
        self.assertTrue(
            transforms.ArpeggialTransform.applicable_at(4 * config.resolution, sequence))
Exemplo n.º 8
0
    def test_ArpeggialTransform_intermediate_pitch(self):
        fileloader.load(constants.TEST_MIDI + 'arpeggial.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        trans = transforms.ArpeggialTransform(0, sequence)
        major_third_above = sequence[0].midi() + 4

        self.assertEqual(trans.intermediate_pitch, major_third_above)
Exemplo n.º 9
0
    def test_ApproachTransform_intermediate_pitch(self):
        fileloader.load(constants.TEST_MIDI + 'approach.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('A')
        config.chord_progression[config.resolution] = chords.parse('D')
        ks_detector.detect_and_set_key_signatures()

        trans = transforms.ApproachTransform(0, sequence)
        c_sharp_below = sequence[0].midi() - 8

        self.assertEqual(trans.intermediate_pitch, c_sharp_below)
Exemplo n.º 10
0
    def test__JoinTransform_crosses_bar_line(self):
        fileloader.load(constants.TEST_MIDI + '2beat_join.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        over_bar_line = transforms.JoinTransform(2, config.resolution * 3, sequence)
        inside_bar = transforms.JoinTransform(2, config.resolution * 2, sequence)

        self.assertTrue(over_bar_line.crosses_bar_line())
        self.assertFalse(inside_bar.crosses_bar_line())
Exemplo n.º 11
0
    def test__get_all_transforms_minimal(self):
        fileloader.load(constants.TEST_MIDI + 'maj3_scalar.mid', False)
        chords.write('C')

        alto = sequences.alto()

        g4 = sequences.Note(alto, 0, 96, pitches.MIDI_VALUES['G4'])
        b4 = sequences.Note(alto, 96, 192, pitches.MIDI_VALUES['B4'])

        alto.add_entities(g4, b4)

        self.assertEqual(124, len(transforms.get_all_transforms(0, 96, 4)))
Exemplo n.º 12
0
    def test__is_syncopation(self):
        fileloader.load(constants.TEST_MIDI + '2beat_join.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        syncopation = transforms.JoinTransform(2, config.resolution, sequence)
        nonsyncopated = transforms.JoinTransform(2, 0, sequence)

        self.assertTrue(syncopation.is_syncopation())
        self.assertFalse(nonsyncopated.is_syncopation())
Exemplo n.º 13
0
    def test_ArpeggialTransform_set_musicality(self):
        fileloader.load(constants.TEST_MIDI + 'arpeggial.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('C')
        config.chord_progression[5 * config.resolution] = chords.parse('A-')
        ks_detector.detect_and_set_key_signatures()

        weaker_trans = transforms.ArpeggialTransform(0, sequence)
        stronger_trans = transforms.ArpeggialTransform(config.resolution * 4, sequence)

        self.assertEqual(weaker_trans.intrinsic_musicality, vars.ARPEGGIAL_SAME_CHORD)
        self.assertEqual(stronger_trans.intrinsic_musicality, vars.ARPEGGIAL_NEW_CHORD)
Exemplo n.º 14
0
    def test__Sequence_note_duration_count(self):
        fileloader.load(constants.TEST_MIDI + 'linear_motion.mid', False)
        sequence = sequences.soprano()

        number_of_sixteenths = 2
        number_of_eighths = 5

        duration_count = sequence.note_duration_count()

        self.assertEqual(duration_count.get(constants.SIXTEENTH_NOTE, 0),
                         number_of_sixteenths)
        self.assertEqual(duration_count.get(constants.EIGHTH_NOTE, 0),
                         number_of_eighths)
Exemplo n.º 15
0
    def test__Sequence_add_entities_splits(self):
        fileloader.load(constants.TEST_MIDI + 'entities.mid', False)
        sequence = sequences.soprano()

        new_entity_start = 480
        new_entity_end = 576

        note = sequences.Rest(sequence, new_entity_start, new_entity_end)
        sequence.add_entities(note)

        self.assertEqual(new_entity_start,
                         sequence.entities().values()[3].end())
        self.assertEqual(new_entity_end,
                         sequence.entities().values()[5].start())
Exemplo n.º 16
0
    def test_MajorThirdScalarTransform_Neighbor_synergy(self):
        fileloader.load(constants.TEST_MIDI + 'neighbor.mid', False)
        sequence = sequences.soprano
        scalar_sequence = sequences.RootSequence(read_pattern(constants.TEST_MIDI + 'maj3_scalar.mid')[0])

        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        scalar_trans = transforms.MajorThirdScalarTransform(0, scalar_sequence)
        dom_neighbor_trans = transforms.HalfStepNeighborTransform(0, sequence)
        subdom_neighbor_trans = transforms.HalfStepNeighborTransform(config.resolution * 4, sequence)

        self.assertEqual(scalar_trans.synergy(dom_neighbor_trans), vars.EIGHTH_NOTE_DOMINANT)
        self.assertEqual(scalar_trans.synergy(subdom_neighbor_trans), vars.EIGHTH_NOTE_SUBDOMINANT)
Exemplo n.º 17
0
    def test__Sequence_add_entities_consumes(self):
        fileloader.load(constants.TEST_MIDI + 'entities.mid', False)
        sequence = sequences.soprano()

        new_entity_start = 144
        new_entity_end = 528

        note = sequences.Note(sequence, new_entity_start, new_entity_end,
                              pitches.Pitch(61))
        sequence.add_entities(note)

        self.assertEqual(new_entity_start,
                         sequence.entities().values()[1].end())
        self.assertEqual(new_entity_end,
                         sequence.entities().values()[3].start())
Exemplo n.º 18
0
    def loadSession(self, sess, basefilename):
        logging.debug('Loading session')

        self.sourcesWidget.removeAllFiles()

        if 'relative' in sess:
            self.act_session_relative.setChecked(sess['relative'])

        if 'files' in sess:
            from os.path import normpath, join, dirname

            for f in sess['files']:
                if basefilename:
                    filename = normpath(
                        join(dirname(basefilename), f['filename']))
                sheets = []

                try:
                    book = fileloader.load(filename)
                except:
                    log.warnException()
                    continue

                for s in f['sheets']:
                    c = s['enabled']
                    i = s['index']

                    sheet = book.getSheet(i)
                    if 'xformula' in s:
                        sheet.xFormula.setStrValue(s['xformula'])
                    if 'yformula' in s:
                        sheet.yFormula.setStrValue(s['yformula'])
                    if 'xrange' in s: sheet.xRange.setStrValue(s['xrange'])
                    if 'errors' in s: sheet.errors = s['errors']
                    sheets.append((sheet, c))

                logging.debug('Add file: %s' % filename)
                self.sourcesWidget.show()
                self.sourcesWidget.addFile(filename, f.get('enabled', True),
                                           f.get('expanded', True), sheets)

        if 'graph' in sess:
            graph = sess['graph']
            if 'range' in graph:
                self.graphWidget.setRange(QRectF(*graph['range']))

        if 'tools' in sess:
            tools = sess['tools']
            for tw in self.toolWidgets:
                if tw.tool.name in tools:
                    try:
                        tw.restoreState(tools[tw.tool.name])
                    except:
                        log.warnException()

        if 'cur_tool' in sess:
            for tw in self.toolWidgets:
                if tw.tool.name == sess['cur_tool']:
                    tw.raise_()
                    self.curTool = tw.tool
Exemplo n.º 19
0
    def test_MajorThirdScalarTransform_Scalar_synergy(self):
        fileloader.load(constants.TEST_MIDI + 'maj3_scalar.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        scalar_trans = transforms.MajorThirdScalarTransform(0, sequence)
        same_trans = transforms.MajorThirdScalarTransform(0, sequence)
        join = transforms.JoinTransform(2, 0, sequence)
        join3 = transforms.JoinTransform(3, 0, sequence)

        self.assertEqual(scalar_trans.synergy(same_trans), vars.EIGHTH_NOTE_SAME)
        self.assertEqual(scalar_trans.synergy(join), 0.0)
        self.assertEqual(join.synergy(join), vars.JOIN_SAME)
        self.assertEqual(join.synergy(join3), 0.0)
Exemplo n.º 20
0
    def test__flicker_avoidance_score(self):
        fileloader.load(constants.TEST_MIDI + 'flicker.mid', False)
        sequence = sequences.soprano()

        c = pitches.MIDI_VALUES['C5']
        e = pitches.MIDI_VALUES['E5']

        beat2 = time.beat_at_index(2)
        beat3 = time.beat_at_index(3)

        self.assertEqual(
            1 * vars.FLICKER_COEF,
            note_picker.flicker_avoidance_score(c, beat2, sequence))
        self.assertEqual(
            2 * vars.FLICKER_COEF,
            note_picker.flicker_avoidance_score(e, beat3, sequence))
Exemplo n.º 21
0
    def test_ApproachTransform_is_applicable(self):
        fileloader.load(constants.TEST_MIDI + 'approach.mid', False)
        sequence = sequences.soprano

        config.chord_progression[0] = chords.parse('A')
        config.chord_progression[config.resolution] = chords.parse('D')
        config.chord_progression[config.resolution * 4] = chords.parse('E')
        config.chord_progression[config.resolution * 5] = chords.parse('F')
        config.chord_progression[config.resolution * 6] = chords.parse('A')
        ks_detector.detect_and_set_key_signatures()

        self.assertTrue(transforms.ApproachTransform.applicable_at(0, sequence))
        self.assertTrue(
            transforms.ApproachTransform.applicable_at(4 * config.resolution, sequence))
        self.assertFalse(
            transforms.ApproachTransform.applicable_at(6 * config.resolution, sequence))
Exemplo n.º 22
0
    def test__motion_tendency_score(self):
        fileloader.load(constants.TEST_MIDI + 'quarter_arpeg.mid', False)

        zero_tendency = sequences.AccompanimentSequence(
            config.song_length, parts.BASS, {'motion_tendency': 0.0})
        no_tendency = sequences.AccompanimentSequence(config.song_length,
                                                      parts.BASS)
        max_tendency = sequences.AccompanimentSequence(
            config.song_length, parts.BASS, {'motion_tendency': 1.0})

        beat_0_pitch = 59
        beat_2_pitch = 62

        beat_0_entity = sequences.Note(zero_tendency, 0, 96, beat_0_pitch)
        beat_2_entity = sequences.Note(zero_tendency, 192, 288, beat_2_pitch)

        zero_tendency.add_entities(beat_0_entity, beat_2_entity)
        no_tendency.add_entities(beat_0_entity, beat_2_entity)
        max_tendency.add_entities(beat_0_entity, beat_2_entity)

        # start of midi clip, no motion, return 0
        self.assertEqual(
            0.0,
            note_picker.motion_tendency_score(beat_0_pitch,
                                              time.beat_at_index(0),
                                              zero_tendency))

        # same note as last beat
        self.assertEqual(
            0.25,
            note_picker.motion_tendency_score(beat_0_pitch,
                                              time.beat_at_index(1),
                                              zero_tendency))

        # client doesn't care either way
        self.assertEqual(
            0.0,
            note_picker.motion_tendency_score(beat_0_pitch,
                                              time.beat_at_index(1),
                                              no_tendency))

        # client much prefers motion
        self.assertEqual(
            0.25,
            note_picker.motion_tendency_score(beat_2_pitch,
                                              time.beat_at_index(1),
                                              max_tendency))
Exemplo n.º 23
0
    def test__ChordProgression_chords_in_measure(self):
        fileloader.load(constants.TEST_MIDI + 'mixed_meter.mid', False)

        measure_0 = time.measure(0)
        measure_1 = time.measure(1)
        measure_3 = time.measure(3)

        chords.write('C')
        chords.write('A-', measure=0, beat=1)
        chords.write('E-', measure=0, beat=2)
        chords.write('G', measure=0, beat=3)
        chords.write('G', measure=3, beat=0)
        chords.write('C', measure=3, beat=3)

        self.assertEqual(4, len(chords.in_measure(measure_0)))
        self.assertEqual(0, len(chords.in_measure(measure_1)))
        self.assertEqual(2, len(chords.in_measure(measure_3)))
Exemplo n.º 24
0
    def test_ApproachTransform_set_musicality(self):
        fileloader.load(constants.TEST_MIDI + 'approach.mid', False)
        sequence = sequences.soprano
        
        config.chord_progression[0] = chords.parse('A')
        config.chord_progression[config.resolution] = chords.parse('D')
        config.chord_progression[config.resolution * 5] = chords.parse('F')
        config.chord_progression[config.resolution * 6] = chords.parse('A')
        ks_detector.detect_and_set_key_signatures()
        ks = config.key_signatures

        weaker_trans = transforms.ApproachTransform(11 * config.resolution, sequence)
        stronger_trans = transforms.ApproachTransform(0, sequence)
        strong_trans = transforms.ApproachTransform(4 * config.resolution, sequence)

        self.assertEqual(vars.APPROACH_DEFAULT_MUSICALITY, weaker_trans.intrinsic_musicality)
        self.assertEqual(vars.APPROACH_NEW_CHORD_ROOT, stronger_trans.intrinsic_musicality)
        self.assertEqual(vars.APPROACH_KEY_CHANGE, strong_trans.intrinsic_musicality)
Exemplo n.º 25
0
    def test__root_tendency_score(self):
        fileloader.load(constants.TEST_MIDI + 'quarter_arpeg.mid', False)

        chords.write('G')
        chords.write('E-', beat=2)

        g = 55
        e = 64

        beat1 = time.beat_at_index(0)
        beat2 = time.beat_at_index(1)
        beat3 = time.beat_at_index(2)

        self.assertEqual(vars.FIRST_BEAT_BASS_ROOT,
                         note_picker.bass_note_tendency_score(g, beat1))
        self.assertEqual(vars.BASS_ROOT_SAME_CHORD,
                         note_picker.bass_note_tendency_score(g, beat2))
        self.assertEqual(vars.BASS_NOTE_NEW_CHORD,
                         note_picker.bass_note_tendency_score(e, beat3))
Exemplo n.º 26
0
def download(source, output):
    # source e o link para o arquivo
    # target e onde o arquivo vai ser gravado no disk(incluindo nome do arquivo e extensao)
    ff = fileloader.load(source, target='@' + os.getcwd() + '/' + output)

    # Se download
    if ff.valid:
        print '[*] Download {0}'.format(ff.source)
    else:
        print '[X] Failed to download {0}'.format(ff.source)
        exit()
Exemplo n.º 27
0
    def test__get_all_transforms(self):
        fileloader.load(constants.TEST_MIDI + 'maj3_scalar.mid', False)
        chords.write('C')

        alto = sequences.alto()
        tenor = sequences.tenor()
        bass = sequences.bass()

        g4_alto = sequences.Note(alto, 0, 96, pitches.MIDI_VALUES['G4'])
        b4_alto = sequences.Note(alto, 96, 192, pitches.MIDI_VALUES['B4'])
        e4_tenor = sequences.Note(tenor, 0, 96, pitches.MIDI_VALUES['E4'])
        g4_tenor = sequences.Note(tenor, 96, 192, pitches.MIDI_VALUES['G4'])
        c4_bass = sequences.Note(bass, 0, 96, pitches.MIDI_VALUES['C4'])
        e4_bass = sequences.Note(bass, 96, 192, pitches.MIDI_VALUES['E4'])

        alto.add_entities(g4_alto, b4_alto)
        tenor.add_entities(e4_tenor, g4_tenor)
        bass.add_entities(c4_bass, e4_bass)

        t = transforms.get_all_transforms(0, 96, 3)
        e = 1
Exemplo n.º 28
0
    def test__EighthNoteTransform_causes_flickering(self):
        fileloader.load(constants.TEST_MIDI + 'flicker.mid', False)
        sequence = sequences.soprano

        c = config

        config.chord_progression[0] = chords.parse('C')
        ks_detector.detect_and_set_key_signatures()

        transform1 = transforms.WholeStepNeighborTransform((1 * config.resolution * 4) +
                                                           (1 * config.resolution), sequence)

        transform2 = transforms.HalfStepNeighborTransform((2 * config.resolution * 4) +
                                                          (1 * config.resolution), sequence)

        transform3 = transforms.HalfStepNeighborTransform((2 * config.resolution * 4) +
                                                          (1 * config.resolution), sequence)

        self.assertTrue(transform1.causes_flickering())
        self.assertTrue(transform2.causes_flickering())
        self.assertTrue(transform3.causes_flickering())
Exemplo n.º 29
0
    def test__get_motion_score(self):
        fileloader.load(constants.TEST_MIDI + 'parallel1.mid', False)
        soprano = sequences.soprano()
        tenor = sequences.RootSequence(
            read_pattern(constants.TEST_MIDI + 'parallel2.mid')[0])

        irrelevant_pitch = 11

        # [0] = alto, [1] = tenor, [2] = bass
        candidate = pitches.MIDI_VALUES['D5'], pitches.MIDI_VALUES[
            'A5'], irrelevant_pitch,

        self.assertEqual(
            0.0,
            note_picker.parallel_motion_score(candidate, time.beat_at_index(0),
                                              soprano, sequences.alto(), tenor,
                                              sequences.bass()))
        self.assertEqual(
            vars.PARALLEL_MOVEMENT,
            note_picker.parallel_motion_score(candidate, time.beat_at_index(1),
                                              soprano, sequences.alto(), tenor,
                                              sequences.bass()))
Exemplo n.º 30
0
    def importFiles(self, filenames):
        for filename in filenames:
            try:
                f = fileloader.load(filename)
            except fileloader.UnsupportedFileException as ex:
                logging.error('Unsupported file: %s %s' %
                              (ex.mimetype, ex.filename))
                continue
            self.addFile(filename, True, True, [(s, True) for s in f])

        if self.curTool == self.toolIAD:
            self.toolIAD.mode = 'orig'

        self.update()
        self.sourcesDockWidget.raise_()