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
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
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
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 = [
), # 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)