From 1ff7e3b6d2a4b060b05a0c8794d2e1eae2d76087 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Thu, 16 Feb 2023 00:41:31 +0200 Subject: [PATCH] Added rest and chords to music21 converter --- test.py | 8 +++++--- ziffers/classes.py | 3 ++- ziffers/converters.py | 18 ++++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/test.py b/test.py index 6a1e88c..044f699 100644 --- a/test.py +++ b/test.py @@ -1,8 +1,10 @@ -from ziffers import * from music21 import * +from sardine import * +from ziffers import * -z = z('e (1 2 3)+(4 2 1)*2') -s = to_music21(z,octave=-2,time="3/4") +a = zparse('1 2 qr 124') +print(list(a)) +s = to_music21('1 2 qr 124',octave=-2,time="3/4") s.show() s.show('midi') diff --git a/ziffers/classes.py b/ziffers/classes.py index 859e7c2..3a6f1d3 100644 --- a/ziffers/classes.py +++ b/ziffers/classes.py @@ -401,7 +401,7 @@ class Sequence(Meta): text=pitch_text, pitch_classes=pitch_classes, notes=chord_notes, - kwargs=options, + kwargs=options ) return chord @@ -416,6 +416,7 @@ class Sequence(Meta): elif isinstance(item, (RandomPitch, RandomInteger)): item = _create_pitch(item, options) elif isinstance(item, Chord): + item.update_options(options) item.update_notes(options) elif isinstance(item, RomanNumeral): item = _create_chord_from_roman(item, options) diff --git a/ziffers/converters.py b/ziffers/converters.py index d496d60..be40e9d 100644 --- a/ziffers/converters.py +++ b/ziffers/converters.py @@ -1,6 +1,6 @@ """Collection of converters""" -from music21 import converter, note, stream, meter -from ziffers import zparse, Ziffers +from music21 import converter, note, stream, meter, chord +from ziffers import zparse, Ziffers, Pitch, Rest, Chord def to_music21(strData: str|Ziffers, **options): """Helper for passing options to the parser""" @@ -54,8 +54,14 @@ class ZiffersMusic21(converter.subConverters.SubConverter): m = meter.TimeSignature("c") # Common time s.insert(0, m) - for z in parsed: - m_note = note.Note(z.note) - m_note.duration.quarterLength = z.duration * 4 - s.append(m_note) + for item in parsed: + if isinstance(item,Pitch): + m_item = note.Note(item.note) + m_item.duration.quarterLength = item.duration * 4 + elif isinstance(item,Rest): + m_item = note.Rest(item.duration * 4) + elif isinstance(item,Chord): + m_item = chord.Chord(item.notes) + m_item.duration.quarterLength = item.duration * 4 + s.append(m_item) self.stream = s.makeMeasures()