Ejemplo n.º 1
0
    def __call__(self):
        r'''Fits meters.

        Returns meter list.
        '''
        import abjad
        selected_kernels = []
        current_offset = abjad.Offset(0)
        while current_offset < self.ordered_offsets[-1]:
            kernel_scores = []
            kernels = self._get_kernels(selected_kernels)
            offset_counter = self._get_offset_counter_at(current_offset)
            if not offset_counter:
                winning_kernel = self.longest_kernel
                if selected_kernels:
                    winning_kernel = selected_kernels[-1]
            else:
                for kernel in kernels:
                    if self.maximum_run_length and \
                        1 < len(kernels) and \
                        self.maximum_run_length <= len(selected_kernels):
                        last_n_kernels = \
                            selected_kernels[-self.maximum_run_length:]
                        if len(set(last_n_kernels)) == 1:
                            if kernel == last_n_kernels[-1]:
                                continue
                    initial_score = kernel(offset_counter)
                    lookahead_score = self._get_lookahead_score(
                        current_offset,
                        kernel,
                        kernels,
                    )
                    score = initial_score + lookahead_score
                    kernel_score = self.KernelScore(
                        kernel=kernel,
                        score=score,
                    )
                    kernel_scores.append(kernel_score)
                kernel_scores.sort(key=lambda kernel_score: kernel_score.score)
                winning_kernel = kernel_scores[-1].kernel
            selected_kernels.append(winning_kernel)
            current_offset += winning_kernel.duration
        selected_meters = (self.kernels[_] for _ in selected_kernels)
        selected_meters = abjad.MeterList(selected_meters)
        return selected_meters
Ejemplo n.º 2
0
 def time_signatures(self):
     """It returns time signatures based on timespan list."""
     permitted_meters = abjad.MeterList(
         [
             (5, 4),
             (9, 8),
             (4, 4),
             (7, 8),
             (3, 4),
             (5, 8),
             (2, 4),
             (3, 8),
             # (5, 16),
             # (1, 4),
             # (3, 16),
             # (1, 8),
         ])
     fitted_meters = abjad.Meter.fit_meters(
         argument=self, meters=permitted_meters,  # maximum_run_length=1
     )
     time_signatures = [_.implied_time_signature for _ in fitted_meters]
     return time_signatures
Ejemplo n.º 3
0
    rhythm_timespan_list, )

offset_counter = abjad.OffsetCounter(rhythm_timespan_list)

counter_path = f"""{pathlib.Path(__file__).parent}/segment_01_offset_counter.pdf"""
persisted_counter = abjad.persist.as_pdf(offset_counter,
                                         counter_path,
                                         scale=0.70)

permitted_meters = abjad.MeterList([
    (5, 4),
    (9, 8),
    (4, 4),
    (7, 8),
    (3, 4),
    (5, 8),
    (2, 4),
    (3, 8),
    (5, 16),
    (1, 4),
    # (3, 16),
    # (1, 8),
])

fitted_meters = abjad.Meter.fit_meters(argument=offset_counter,
                                       meters=permitted_meters,
                                       maximum_run_length=1)

time_signatures = [abjad.TimeSignature(_) for _ in fitted_meters]

time_signatures.append(abjad.TimeSignature((1, 8)))  # for ending skip
Ejemplo n.º 4
0
import abjad

from adumbration.materials.timespans.segment_14.make_timespans import (
    rhythm_timespan_list, )

offset_counter = abjad.OffsetCounter(rhythm_timespan_list)

permitted_meters = abjad.MeterList([
    # (9, 4),
    # (7, 4),
    # (6, 4),
    (5, 4),
    # (9, 8),
    (4, 4),
    # (7, 8),
    (3, 4),
    # (5, 8),
    # (2, 4),
    # (3, 8),
    # (1, 4),
    # (5, 16),
    # (1, 8),
])

fitted_meters = abjad.Meter.fit_meters(
    argument=offset_counter,
    meters=permitted_meters,
    maximum_run_length=2,
)

# fitted_meter_pairs = [
Ejemplo n.º 5
0
    ),  # smashes timespans together without intermittent silence
    silence_talea=rmakers.Talea(counts=(2, 1, 1), denominator=4),
    # fuse_groups=False, #turns groups from multiple timespans into one large timespan
)

timespan_list = timespan_maker(music_specifiers=music_specifiers,
                               target_timespan=target_timespan)

# abjad.show(timespan_list, scale=0.7, key='voice_name')
timespan_list
#
offset_counter = abjad.OffsetCounter(timespan_list)

# abjad.show(offset_counter, scale=0.7)
####
permitted_meters = abjad.MeterList([(3, 4), (4, 4), (5, 16), (7, 8)])

# abjad.show(permitted_meters, scale=0.7)
#
fitted_meters = abjad.Meter.fit_meters(argument=offset_counter,
                                       meters=permitted_meters,
                                       maximum_run_length=1)

# abjad.show(fitted_meters, scale=0.7)

# groups = [timespan.voice_name for timespan in timespan_list]
# input = [(span, group) for span, group in zip(timespan_list, groups)]
#
# from collections import defaultdict
# res = defaultdict(list)
# for v, k in input: res[k].append(v)