Exemplo n.º 1
0
def analysis(compositions):
    midi_intervals = utils.get_music_data_attrib(compositions, 'intervals_midi', 'extend')
    nested_midi_intervals = utils.get_music_data_attrib(compositions, 'intervals_midi', 'append')
    simple_intervals = [abs(x) % 12 for x in midi_intervals]
    chromatic_intervals = utils.get_music_data_attrib(compositions, 'intervals')
    adjacent_intervals = []
    for seq in nested_midi_intervals:
        adjacent_intervals.extend(get_adjacent_intervals(seq))

    basic_stats = utils.aux_basic_stats(midi_intervals, 'Intervals number', False)

    categorized_midi_intervals = list(map(get_category, midi_intervals))
    categorized_nested_midi_intervals = [list(map(get_category, s)) for s in nested_midi_intervals]

    coll_freq_dic = utils.special_counter(categorized_midi_intervals, True)

    if midi_intervals and chromatic_intervals:
        args = {
            'frequency_scatter': frequency_scatter(midi_intervals),
            'frequency_basic_scatter': frequency_scatter(simple_intervals),
            'basic_stats': basic_stats,
            'frequency_pie': frequency_pie(midi_intervals),
            'chromatic_frequency_pie': frequency_pie(chromatic_intervals),
            'chromatic_leaps_frequency_pie': chromatic_leaps_frequency_pie(chromatic_intervals),
            'histogram': utils.histogram(midi_intervals, 10, ['Intervals', 'Ocurrences'], False, True),
            'distribution_amount': utils.distribution(midi_intervals, basic_stats, True),
            'category_frequency_pie': frequency_pie(list(map(get_category, midi_intervals))),
            'adjacent_frequency_pie': frequency_pie(adjacent_intervals),
            'adjacent_frequency_bubble': make_adjacent_chart(adjacent_intervals),
            'pitch_class_distance': utils.frequency_distance_scatter(compositions, categorized_nested_midi_intervals, coll_freq_dic),
        }
    else:
        args = {}

    return args
Exemplo n.º 2
0
def analysis(compositions):
    durations = utils.get_music_data_attrib(compositions, 'durations', 'extend')
    nested_durations = utils.get_music_data_attrib(compositions, 'durations', 'append')
    piece_durations = utils.get_music_data_attrib(compositions, 'total_duration', 'append')
    basic_stats_duration = utils.aux_basic_stats(durations, 'Durations number', False)
    basic_stats_piece_duration = utils.aux_basic_stats(piece_durations, 'Durations number', False)

    coll_freq_dic = utils.special_counter(durations, True)

    if durations and piece_durations:
        args = {
            'basic_stats_duration': basic_stats_duration,
            'note_frequency_scatter': frequency_scatter(durations),
            'note_frequency_pie': frequency_pie(durations),
            'note_histogram': utils.histogram(durations, 10, ['Durations', 'Ocurrences'], False, True),
            'note_distribution_amount': utils.distribution(durations, basic_stats_duration, True),
            'basic_stats_piece_duration': basic_stats_piece_duration,
            'piece_frequency_scatter': frequency_scatter(piece_durations),
            'piece_frequency_pie': frequency_pie(piece_durations),
            'piece_histogram': utils.histogram(piece_durations, 10, ['Durations', 'Ocurrences'], False, True),
            'piece_distribution_amount': utils.distribution(piece_durations, basic_stats_duration, True),
            'frequency_distance': utils.frequency_distance_scatter(compositions, nested_durations, coll_freq_dic),
        }
    else:
        args = {}

    return args
Exemplo n.º 3
0
def analysis(compositions):

    # intervals
    midi_intervals = utils.get_music_data_attrib(compositions, 'intervals_midi', 'extend')
    nested_midi_intervals = utils.get_music_data_attrib(compositions, 'intervals_midi', 'append')

    # durations
    dur = utils.get_music_data_attrib(compositions, 'durations', 'extend')
    nested_dur = utils.get_music_data_attrib(compositions, 'durations', 'append')

    # contour
    contour_list = utils.get_music_data_attrib(compositions, 'contour', 'append')

    tests = [midi_intervals,
             nested_midi_intervals,
             dur,
             nested_dur,
             contour_list]

    if all(tests):
        # intervals
        cat_intervals = list(map(intervals.get_category, midi_intervals))
        cat_nested_intervals = [list(map(intervals.get_category, s)) for s in nested_midi_intervals]
        coll_freq_intervals = utils.special_counter(cat_intervals, True)

        # durations
        coll_freq_durations = utils.special_counter(dur, True)

        # contour
        freq_dist_args = {}
        for size in range(2, 5):
            split_seq = list(map(tuple, contour.split_and_translate_nested(contour_list, size)))
            split_seq_nested = [list(map(tuple, contour.split_and_translate(c, size))) for c in contour_list]
            coll_freq_dic = contour.get_frequency(split_seq, size)
            freq_dist_sc = utils.frequency_distance_scatter(compositions, split_seq_nested, coll_freq_dic, True)
            freq_dist_args.update({'contour_{}_distance'.format(size): freq_dist_sc})

        freq_data = [
            ['Duration', nested_dur, coll_freq_durations],
            ['Interval', cat_nested_intervals, coll_freq_intervals],
        ]

        args = {
            'intervals_distance': utils.frequency_distance_scatter(compositions, cat_nested_intervals, coll_freq_intervals, True),
            'durations_distance': utils.frequency_distance_scatter(compositions, nested_dur, coll_freq_durations, True),
            'id_distance': utils.frequency_distance_scatter_group(compositions, freq_data, True),
        }
        args.update(freq_dist_args)
    else:
        args = {}

    return args
Exemplo n.º 4
0
def analysis(compositions, size=2):
    duration_ambitus = cluster_duration_ambitus.get_duration_ambitus(compositions, True, False)
    contour_list = utils.get_music_data_attrib(compositions, 'contour', 'append')

    a = numpy.array(duration_ambitus[1:])
    b = cluster_contour.get_contour_frequency(contour_list, size, True)
    c = cluster_intervals_frequency.get_interval_frequency(compositions)
    d = cluster_durations_frequency.get_duration_frequency(compositions)

    array = numpy.column_stack((a, b, c, d))

    min_pts = 10
    if array.shape[0] < 10:
        min_pts = 0

    reachability_plot = utils.make_reachability_plot(array, min_pts)
    cluster_table = utils.make_clusters(compositions, array, min_pts)

    if array.any():
        args = {
            'reachability_plot': reachability_plot,
            'cluster_table': cluster_table,
            'size': size,
        }
    else:
        args = {}

    return args
Exemplo n.º 5
0
def make_general_chain(compositions, attrib, order=1):
    nested_seq = utils.get_music_data_attrib(compositions, attrib, 'append')
    if nested_seq:
        spl = split_nested_sequences(nested_seq, order)
        chain_str, map_str = markov_print(*make_markov_chain(spl))

        args = {
            'chain': chain_str,
            'map': map_str,
        }
    else:
        args = {}

    return args
Exemplo n.º 6
0
def generate_contour_chain(compositions, order=1):
    contour_list = utils.get_music_data_attrib(compositions, 'contour', 'append')

    if contour_list:
        cseg_map, cseg_chain = markov_chain_contour(contour_list, order, True)

        args = {
            'cseg_map': cseg_map,
            'cseg_chain': cseg_chain,
        }
    else:
        args = {}

    return args
Exemplo n.º 7
0
def analysis(compositions):
    ambitus_list = utils.get_music_data_attrib(compositions, 'ambitus', 'append')

    if ambitus_list:
        basic_stats = utils.aux_basic_stats(ambitus_list, 'Pieces number', False)
        dist_value = utils.distribution(ambitus_list, basic_stats, False)

        args = {
            'basic_stats': basic_stats,
            'frequency': frequency(ambitus_list),
            'histogram': utils.histogram(ambitus_list, 10, ['Ambitus', 'Pieces'], False, True),
            'distribution_value': dist_value,
            'distribution_amount': utils.distribution(ambitus_list, basic_stats, True),
            'frequency_pie': frequency_pie(ambitus_list),
            'boxplot': utils.boxplot(basic_stats),
        }
        return args
    else:
        return {}
def analysis(compositions, size=2):
    contour_list = utils.get_music_data_attrib(compositions, 'contour', 'append')
    array = get_contour_frequency(contour_list, size, True)

    min_pts = 10
    if array.shape[0] < 10:
        min_pts = 0

    reachability_plot = utils.make_reachability_plot(array, min_pts)
    cluster_table = utils.make_clusters(compositions, array, min_pts)

    if array.any():
        args = {
            'reachability_plot': reachability_plot,
            'cluster_table': cluster_table,
            'size': size,
        }
    else:
        args = {}

    return args
Exemplo n.º 9
0
def analysis(compositions):
    size = 4
    contour_list = utils.get_music_data_attrib(compositions, 'contour', 'append')

    if contour_list:
        basic_stats = utils.aux_basic_stats(contour_list, 'Contour number', True)
        repetition_scatter_data = repetition_scatter(contour_list)
        repetition_seq = repetition_index(contour_list)
        repetition_stats = utils.aux_basic_stats(repetition_seq, 'Pieces Number', False)
        dist_value = utils.distribution(repetition_seq, repetition_stats, False)
        dist_amount = utils.distribution(repetition_seq, repetition_stats, True)


        freq_dist_args = {}
        for size in range(2, 5):
            split_seq = list(map(tuple, split_and_translate_nested(contour_list, size)))
            split_seq_nested = [list(map(tuple, split_and_translate(c, size))) for c in contour_list]
            coll_freq_dic = get_frequency(split_seq, size)
            freq_dist_sc = utils.frequency_distance_scatter(compositions, split_seq_nested, coll_freq_dic)
            freq_dist_args.update({'frequency_distance_{}'.format(size): freq_dist_sc})


        args = {
            'basic_stats': basic_stats,
            'repetition_stats': repetition_stats,
            'frequency_pie_2': frequency_pie(contour_list, 2),
            'frequency_pie_3': frequency_pie(contour_list, 3),
            'frequency_pie_4': frequency_pie(contour_list, 4),
            'repetition_scatter': repetition_scatter_data,
            'distribution_value': dist_value,
            'distribution_amount': dist_amount,
            'histogram': utils.histogram(repetition_seq, 10, ['Index', 'Pieces'], False, True),
        }
        args.update(freq_dist_args)
    else:
        args = {}
        
    return args