Ejemplo n.º 1
0
    def evaluate(self):
        r'''Evaluate division region expression.

        Returns start-positioned division payload expression.
        '''
        from experimental.tools import musicexpressiontools
        divisions = self.source_expression[:]
        divisions = [durationtools.Division(x) for x in divisions]
        divisions = sequencetools.repeat_sequence_to_weight(
            divisions, self.total_duration)
        expression = musicexpressiontools.StartPositionedDivisionPayloadExpression(
            payload=divisions,
            start_offset=self.start_offset,
            voice_name=self.voice_name,
            )
        return expression
Ejemplo n.º 2
0
    def evaluate(self):
        r'''Evaluate division select expression.

        Returns none when nonevaluable.

        Returns start-positioned division payload expression when evaluable.
        '''
        from experimental.tools import musicexpressiontools
        anchor_timespan = self._evaluate_anchor_timespan()
        time_relation = self._get_time_relation(anchor_timespan)
        voice_proxy = \
            self.score_specification.voice_data_structures_by_voice[
                self.voice_name]
        division_payload_expressions = \
            voice_proxy.payload_expressions_by_attribute['divisions']
        if division_payload_expressions is None:
            return
        existing_voice_divisions = []
        for division_payload_expression in division_payload_expressions:
            existing_voice_divisions.extend(
                division_payload_expression.payload.divisions)
        if not existing_voice_divisions:
            return
        start_offset = division_payload_expressions[0].payload.start_offset
        expression = \
            musicexpressiontools.StartPositionedDivisionPayloadExpression(
            existing_voice_divisions, start_offset=start_offset)
        callback_cache = self.score_specification.interpreter.callback_cache
        expression = expression.get_elements_that_satisfy_time_relation(
            time_relation, callback_cache)
        if time_relation is None:
            inventory = expression & anchor_timespan
            expression = inventory[0]
        result = self._apply_callbacks(expression)
        if isinstance(result, list):
            expressions = []
            for expression in result:
                expression._voice_name = self.voice_name
                expressions.append(expression)
            return expressions
        else:
            expression = result
            expression._voice_name = self.voice_name
            return expression
Ejemplo n.º 3
0
    def evaluate(self):
        r'''Evaluate literal division region expression.

        Returns start-positioned division payload expression.
        '''
        from experimental.tools import musicexpressiontools
        divisions = []
        for x in self.source_expression:
            if hasattr(x, 'duration'):
                x = x.duration
            division = durationtools.Division(x)
            divisions.append(division)
        divisions = sequencetools.repeat_sequence_to_weight(
            divisions, self.total_duration)
        expression = musicexpressiontools.StartPositionedDivisionPayloadExpression(
            payload=divisions,
            start_offset=self.start_offset,
            voice_name=self.voice_name,
            )
        return expression
Ejemplo n.º 4
0
    def evaluate(self):
        r'''Evaluate select expression division region expression.

        Returns none when nonevaluable.

        Returns start-positioned division payload expression when evaluable.
        '''
        from experimental.tools import musicexpressiontools
        expression = self.source_expression.evaluate()
        if expression is not None:
            divisions = expression.elements
            divisions = [durationtools.Division(x) for x in divisions]
            divisions = sequencetools.repeat_sequence_to_weight(
                divisions, self.total_duration)
            expression = \
                musicexpressiontools.StartPositionedDivisionPayloadExpression(
                payload=divisions,
                start_offset=self.start_offset,
                voice_name=self.voice_name,
                )
            return expression
Ejemplo n.º 5
0
    def __and__(self, timespan):
        r'''Logical AND of payload expression and `timespan`.

        ::

            >>> timespan = timespantools.Timespan((1, 16), (5, 16))
            >>> result = payload_expression & timespan

        ::

            >>> print(format(result))
            timespantools.TimespanInventory(
                [
                    musicexpressiontools.IterablePayloadExpression(
                        payload=(
                            durationtools.Division(3, 16),
                            durationtools.Division(1, 16),
                            ),
                        ),
                    ]
                )

        Returns newly constructed payload expression.
        '''
        from experimental.tools import musicexpressiontools
        if not mathtools.all_are_numbers(self.payload):
            payload = [durationtools.Division(x) for x in self.payload]
        else:
            payload = self.payload
        division_payload_expression = \
            musicexpressiontools.StartPositionedDivisionPayloadExpression(
            payload=payload, start_offset=0, voice_name='dummy voice name')
        result = division_payload_expression & timespan
        assert len(result) in (0, 1)
        if result:
            divisions = result[0].payload.divisions
            expression = new(self, payload=divisions)
            result[0] = expression
        return result
Ejemplo n.º 6
0
    def evaluate(self):
        r'''Evaluate beat select expression.

        Returns none when nonevaluable.

        Returns start-positioned division payload expression
        when evaluable.
        '''
        from experimental.tools import musicexpressiontools
        anchor_timespan = self._evaluate_anchor_timespan()
        time_relation = self._get_time_relation(anchor_timespan)
        time_signatures = self.root_specification.time_signatures[:]
        beats = self._time_signatures_to_naive_beats(time_signatures)
        start_offset = self.root_specification.timespan.start_offset
        expression = \
            musicexpressiontools.StartPositionedDivisionPayloadExpression(
            payload=beats, start_offset=start_offset)
        callback_cache = self.score_specification.interpreter.callback_cache
        expression = expression.get_elements_that_satisfy_time_relation(
            time_relation, callback_cache)
        expression = self._apply_callbacks(expression)
        expression._voice_name = self.voice_name
        return expression