Ejemplo n.º 1
0
 def test_reverse_is_reversable(self):
     """
     Ensure that a double reverse of a sequence is idempotent
     """
     from sebastian.core.transforms import reverse
     s1 = self.make_sequence()
     reversed = s1 | reverse() | reverse()
     self.assertEqual(s1._elements, reversed._elements)
Ejemplo n.º 2
0
 def test_reverse_is_reversable(self):
     """
     Ensure that a double reverse of a sequence is idempotent
     """
     from sebastian.core.transforms import reverse
     s1 = self.make_sequence()
     reversed = s1 | reverse() | reverse()
     self.assertEqual(s1._elements, reversed._elements)
Ejemplo n.º 3
0
 def test_reversed_doesnt_modify_next_offset(self):
     """
     Ensure reversed sequences are the same length as their input
     """
     from sebastian.core.transforms import reverse
     s1 = self.make_sequence()
     reversed = s1 | reverse()
     self.assertEqual(s1.next_offset(), reversed.next_offset())
Ejemplo n.º 4
0
 def test_reversed_doesnt_modify_next_offset(self):
     """
     Ensure reversed sequences are the same length as their input
     """
     from sebastian.core.transforms import reverse
     s1 = self.make_sequence()
     reversed = s1 | reverse()
     self.assertEqual(s1.next_offset(), reversed.next_offset())
Ejemplo n.º 5
0
    def test_reverse(self):
        """
        Ensure puts points in a sequence backwards
        """
        from sebastian.core.transforms import reverse
        s1 = self.make_sequence()
        reversed = s1 | reverse()
        from sebastian.core import OFFSET_64, DURATION_64, MIDI_PITCH

        self.assertEqual(reversed._elements, [
            {MIDI_PITCH: 53, OFFSET_64: 0, DURATION_64: 20},
            {MIDI_PITCH: 50, OFFSET_64: 6, DURATION_64: 17},
            {OFFSET_64: 39}
        ])
Ejemplo n.º 6
0
    def test_reverse(self):
        """
        Ensure puts points in a sequence backwards
        """
        from sebastian.core.transforms import reverse
        s1 = self.make_sequence()
        reversed = s1 | reverse()
        from sebastian.core import OFFSET_64, DURATION_64

        self.assertEqual(reversed._elements, [{
            "pitch": 53,
            OFFSET_64: 0,
            DURATION_64: 20
        }, {
            "pitch": 50,
            OFFSET_64: 6,
            DURATION_64: 17
        }, {
            OFFSET_64: 39
        }])
Ejemplo n.º 7
0
from sebastian.lilypond.interp import parse
from sebastian.lilypond.write_lilypond import write
from sebastian.midi import write_midi, player
from sebastian.core import OSequence, HSeq, Point, DURATION_64
from sebastian.core.transforms import transpose, reverse, add, degree_in_key, midi_pitch, lilypond
from sebastian.core.notes import Key, major_scale

# construct sequences using lilypond syntax
seq1 = parse("c d e")
seq2 = parse("e f g")

# concatenate
seq3 = seq1 + seq2

# transpose and reverse
seq4 = seq3 | transpose(12) | reverse()

# merge
seq5 = seq3 // seq4

# play MIDI
player.play([seq5])

# write to MIDI
write_midi.write("seq5.mid", [seq5])

# contruct a horizontal sequence of scale degrees
seq6 = HSeq(Point(degree=degree) for degree in [1, 2, 3, 2, 1])

# put that sequence into C major, octave 4 quavers
C_MAJOR = Key("C", major_scale)
Ejemplo n.º 8
0
def mound(seq):
    return seq + (seq | reverse())
Ejemplo n.º 9
0
from sebastian.lilypond.interp import parse
from sebastian.lilypond.write_lilypond import write
from sebastian.midi import write_midi, player
from sebastian.core import OSequence, HSeq, Point, DURATION_64
from sebastian.core.transforms import transpose, reverse, add, degree_in_key, midi_pitch, lilypond
from sebastian.core.notes import Key, major_scale

# construct sequences using lilypond syntax
seq1 = parse("c d e")
seq2 = parse("e f g")

# concatenate
seq3 = seq1 + seq2

# transpose and reverse
seq4 = seq3 | transpose(12) | reverse()

# merge
seq5 = seq3 // seq4

# play MIDI
player.play([seq5])

# write to MIDI
write_midi.write("seq5.mid", [seq5])

# contruct a horizontal sequence of scale degrees
seq6 = HSeq(Point(degree=degree) for degree in [1, 2, 3, 2, 1])

# put that sequence into C major, octave 4 quavers
C_MAJOR = Key("C", major_scale)
Ejemplo n.º 10
0
## point transformation

from sebastian.core.transforms import transpose, reverse, stretch, invert, add, degree_in_key, midi_pitch

# transpose

assert (s1 | transpose(12))._elements == [
    {MIDI_PITCH: 62, OFFSET_64: 16, DURATION_64: 16},
    {MIDI_PITCH: 64, OFFSET_64: 32, DURATION_64: 16}
]

assert s1 | transpose(5) | transpose(-5) == s1

# reverse

assert (s1 | reverse())._elements == [
    {MIDI_PITCH: 52, OFFSET_64: 0, DURATION_64: 16},
    {MIDI_PITCH: 50, OFFSET_64: 16, DURATION_64: 16},
    {OFFSET_64: 48}
]

assert s1 | reverse() | reverse() == s1

# stretch

assert (s1 | stretch(2))._elements == [
    {MIDI_PITCH: 50, OFFSET_64: 32, DURATION_64: 32},
    {MIDI_PITCH: 52, OFFSET_64: 64, DURATION_64: 32}
]

assert s1 | stretch(2) | stretch(0.5) == s1