diff --git a/partitura/io/exportmatch.py b/partitura/io/exportmatch.py index 72435956..4656c724 100644 --- a/partitura/io/exportmatch.py +++ b/partitura/io/exportmatch.py @@ -21,7 +21,6 @@ from partitura.io.matchlines_v1 import ( make_info, make_scoreprop, - make_section, MatchSnote, MatchNote, MatchSnoteNote, diff --git a/partitura/io/exportmusicxml.py b/partitura/io/exportmusicxml.py index 168fd430..0d93fcc9 100644 --- a/partitura/io/exportmusicxml.py +++ b/partitura/io/exportmusicxml.py @@ -658,7 +658,7 @@ def merge_measure_contents(notes, other, measure_start): elif gap > 0: e = etree.Element("forward") ee = etree.SubElement(e, "duration") - ee.text = "{:d}".format(gap) + ee.text = "{:d}".format(int(gap)) result.append(e) result.extend([e for _, _, e in elements]) @@ -1053,8 +1053,8 @@ def handle_parents(part): part_e.append(etree.Comment(MEASURE_SEP_COMMENT)) attrib = {} - if measure.number is not None: - attrib["number"] = str(measure.number) + if measure.name is not None: + attrib["number"] = str(measure.name) measure_e = etree.SubElement(part_e, "measure", **attrib) contents = linearize_measure_contents( diff --git a/partitura/io/importmatch.py b/partitura/io/importmatch.py index bb1f061a..b1b34722 100644 --- a/partitura/io/importmatch.py +++ b/partitura/io/importmatch.py @@ -12,41 +12,16 @@ from partitura import score from partitura.score import Part, Score from partitura.performance import PerformedPart, Performance -from partitura.musicanalysis import estimate_voices, estimate_key from partitura.io.matchlines_v0 import ( FROM_MATCHLINE_METHODS as FROM_MATCHLINE_METHODSV0, - parse_matchline as parse_matchlinev0, MatchInfo as MatchInfoV0, - MatchMeta as MatchMetaV0, - MatchSnote as MatchSnoteV0, - MatchNote as MatchNoteV0, - MatchSnoteNote as MatchSnoteNoteV0, - MatchSnoteDeletion as MatchSnoteDeletionV0, - MatchSnoteTrailingScore as MatchSnoteTrailingScoreV0, - MatchInsertionNote as MatchInsertionNoteV0, - MatchHammerBounceNote as MatchHammerBounceNoteV0, - MatchTrailingPlayedNote as MatchTrailingPlayedNoteV0, - MatchSustainPedal as MatchSustainPedalV0, - MatchSoftPedal as MatchSoftPedalV0, MatchTrillNote as MatchTrillNoteV0, ) from partitura.io.matchlines_v1 import ( FROM_MATCHLINE_METHODS as FROM_MATCHLINE_METHODSV1, MatchInfo as MatchInfoV1, - MatchScoreProp as MatchScorePropV1, - MatchSection as MatchSectionV1, - MatchStime as MatchStimeV1, - MatchPtime as MatchPtimeV1, - MatchStimePtime as MatchStimePtimeV1, - MatchSnote as MatchSnoteV1, - MatchNote as MatchNoteV1, - MatchSnoteNote as MatchSnoteNoteV1, - MatchSnoteDeletion as MatchSnoteDeletionV1, - MatchInsertionNote as MatchInsertionNoteV1, - MatchSustainPedal as MatchSustainPedalV1, - MatchSoftPedal as MatchSoftPedalV1, MatchOrnamentNote as MatchOrnamentNoteV1, ) @@ -56,12 +31,9 @@ MatchLine, BaseSnoteLine, BaseSnoteNoteLine, - BaseStimePtimeLine, BaseDeletionLine, BaseInsertionLine, BaseOrnamentLine, - BaseSustainPedalLine, - BaseSoftPedalLine, ) from partitura.io.matchfile_utils import ( @@ -69,29 +41,24 @@ number_pattern, vnumber_pattern, MatchTimeSignature, - MatchKeySignature, format_pnote_id, ) from partitura.utils.music import ( - midi_ticks_to_seconds, - pitch_spelling_to_midi_pitch, - ensure_pitch_spelling_format, - key_name_to_fifths_mode, - estimate_clef_properties, - note_array_from_note_list, + midi_ticks_to_seconds ) from partitura.utils.misc import ( deprecated_alias, - deprecated_parameter, PathLike, - get_document_name, + get_document_name ) -from partitura.utils.generic import interp1d, partition, iter_current_next - +from partitura.utils.generic import ( + interp1d, + iter_current_next +) __all__ = ["load_match"] @@ -244,6 +211,12 @@ def load_match( first_note_at_zero : bool, optional When True the note_on and note_off times in the performance are shifted to make the first note_on time equal zero. + Defaults to False. + offset_duration_whole: Boolean, optional + A flag for the type of offset and duration given in the matchfile. + When true, the function expects the values to be given in whole + notes (e.g. 1/4 for a quarter note) independet of time signature. + Defaults to True. Returns ------- @@ -490,7 +463,7 @@ def part_from_matchfile( ts = mf.time_signatures min_time = snotes[0].OnsetInBeats # sorted by OnsetInBeats max_time = max(n.OffsetInBeats for n in snotes) - _, beats_map, _, beat_type_map, min_time_q, max_time_q = make_timesig_maps( + beats_map_from_beats, beats_map, beat_type_map_from_beats, beat_type_map, min_time_q, max_time_q = make_timesig_maps( ts, max_time ) @@ -511,7 +484,6 @@ def part_from_matchfile( onset_in_beats = np.array([note.OnsetInBeats for note in snotes]) unique_onsets, inv_idxs = np.unique(onset_in_beats, return_inverse=True) - # unique_onset_idxs = [np.where(onset_in_beats == u) for u in unique_onsets] iois_in_beats = np.diff(unique_onsets) beat_to_quarter = 4 / beat_type_map(onset_in_beats) @@ -528,10 +500,6 @@ def part_from_matchfile( onset_in_divs = np.r_[0, np.cumsum(divs * iois_in_quarters)][inv_idxs] onset_in_quarters = onset_in_quarters[inv_idxs] - # duration_in_beats = np.array([note.DurationInBeats for note in snotes]) - # duration_in_quarters = duration_in_beats * beat_to_quarter - # duration_in_divs = duration_in_quarters * divs - part.set_quarter_duration(0, divs) bars = np.unique([n.Measure for n in snotes]) t = min_time @@ -542,8 +510,6 @@ def part_from_matchfile( if t > 0: # if we have an incomplete first measure that isn't an anacrusis # measure, add a rest (dummy) - # t = t-t%beats_map(min_time) - # if starting beat is above zero, add padding rest = score.Rest() part.add(rest, start=0, end=t * divs) @@ -551,16 +517,24 @@ def part_from_matchfile( offset = 0 t = t - t % beats_map(min_time) - for b0, b1 in iter_current_next(bars, end=bars[-1] + 1): - bar_times.setdefault(b0, t) - if t < 0: - t = 0 + for b_name in bars: + notes_in_this_bar = [(ni, n) for ni, n in enumerate(snotes) if n.Measure == b_name] + a_note_in_this_bar = notes_in_this_bar[0][1] + a_note_id_in_this_bar = notes_in_this_bar[0][0] + bar_offset = (a_note_in_this_bar.Beat - 1) * 4 / beat_type_map_from_beats(a_note_in_this_bar.OnsetInBeats) + on_off_scale = 1 + if not match_offset_duration_in_whole: + on_off_scale = beat_type_map_from_beats(a_note_in_this_bar.OnsetInBeats) + beat_offset = ( + 4 + / on_off_scale + * a_note_in_this_bar.Offset.numerator + / (a_note_in_this_bar.Offset.denominator * (a_note_in_this_bar.Offset.tuple_div or 1)) + ) + + barline_in_quarters = onset_in_quarters[a_note_id_in_this_bar] - bar_offset - beat_offset + bar_times[b_name] = barline_in_quarters - else: - # multiply by diff between consecutive bar numbers - n_bars = b1 - b0 - if t <= max_time_q: - t += (n_bars * 4 * beats_map(t)) / beat_type_map(t) for ni, note in enumerate(snotes): # start of bar in quarter units @@ -585,15 +559,6 @@ def part_from_matchfile( / (note.Offset.denominator * (note.Offset.tuple_div or 1)) ) - # check anacrusis measure beat counting type for the first note - if bar_start < 0 and (bar_offset != 0 or beat_offset != 0) and ni == 0: - # in case of fully counted anacrusis we set the bar_start - # to -bar_duration (in quarters) so that the below calculation is correct - # not active for shortened anacrusis measures - bar_start = -beats_map(bar_start) * 4 / beat_type_map(bar_start) - # reset the bar_start for other notes in the anacrusis measure - bar_times[note.Bar] = bar_start - # convert the onset time in quarters (0 at first barline) to onset # time in divs (0 at first note) onset_divs = int(round(divs * (bar_start + bar_offset + beat_offset - offset))) @@ -754,9 +719,19 @@ def part_from_matchfile( add_staffs(part) # add_clefs(part) - # add incomplete measure if necessary - if offset < 0: - part.add(score.Measure(number=0), 0, int(-offset * divs)) + prev_measure = None + for measure_counter, measure_name in enumerate(bar_times.keys()): + barline_in_quarters = bar_times[measure_name] + barline_in_divs = int(round(divs * (barline_in_quarters - offset))) + if barline_in_divs < 0: + barline_in_divs = 0 + if prev_measure is not None: + part.add(prev_measure, None, barline_in_divs) + prev_measure = score.Measure(number=measure_counter + 1, name = str(measure_name)) + part.add(prev_measure, barline_in_divs) + last_closing_barline = barline_in_divs + int(round(divs * beats_map(barline_in_quarters) * 4 / beat_type_map(barline_in_quarters))) + part.add(prev_measure, None, last_closing_barline) + # add the rest of the measures automatically score.add_measures(part) @@ -780,7 +755,7 @@ def part_from_matchfile( def make_timesig_maps( ts_orig: List[Tuple[float, int, MatchTimeSignature]], max_time: float, -) -> (Callable, Callable, Callable, Callable, float, float): +) -> Tuple[Callable, Callable, Callable, Callable, float, float]: """ Create time signature (interpolation) maps @@ -860,7 +835,7 @@ def add_staffs(part: Part, split: int = 55, only_missing: bool = True) -> None: MIDI pitch to split staff into upper and lower. Default is 55 only_missing: bool If True, only add staff to those notes that do not have staff info already. - x""" + """ # assign staffs using a hard limit notes = part.notes_tied for n in notes: diff --git a/partitura/musicanalysis/note_array_to_score.py b/partitura/musicanalysis/note_array_to_score.py index a1dc19a3..370bfeec 100644 --- a/partitura/musicanalysis/note_array_to_score.py +++ b/partitura/musicanalysis/note_array_to_score.py @@ -190,7 +190,7 @@ def create_part( warnings.warn("add measures", stacklevel=2) if not barebones and anacrusis_divs > 0: - part.add(score.Measure(0), 0, anacrusis_divs) + part.add(score.Measure(number = 1, name = str(0)), 0, anacrusis_divs) if not barebones and sanitize: warnings.warn("Inferring measures", stacklevel=2) diff --git a/partitura/score.py b/partitura/score.py index e882151a..a08066a1 100644 --- a/partitura/score.py +++ b/partitura/score.py @@ -3769,11 +3769,8 @@ def add_measures(part): if existing_measure.start.t == measure_start: assert existing_measure.end.t > pos pos = existing_measure.end.t - if existing_measure.number != 0: - # if existing_measure is a match anacrusis measure, - # keep number 0 - existing_measure.number = mcounter - mcounter += 1 + existing_measure.number = mcounter + mcounter += 1 continue else: diff --git a/tests/data/match/test_fuer_elise.match b/tests/data/match/test_fuer_elise.match index 4a1aea34..511b2338 100644 --- a/tests/data/match/test_fuer_elise.match +++ b/tests/data/match/test_fuer_elise.match @@ -844,70 +844,70 @@ snote(828,[B,n],4,99:1,0,1/8,291.0,292.0,[voice1,staff1,s])-note(829,[B,n],4,117 snote(829,[E,n],4,99:1,0,1/8,291.0,292.0,[voice2,staff1])-note(831,[E,n],4,117548,117658,118466,24). snote(830,[E,n],3,99:1,0,1/8,291.0,292.0,[voice5,staff2])-note(828,[E,n],3,117496,117777,118466,51). snote(831,[G,#],3,99:1,0,1/8,291.0,292.0,[voice5,staff2])-note(830,[G,#],3,117546,117668,118466,48). -snote(832,[A,n],3,100:1,0,11184811/268435456,294.0,294.3333,[voice1,staff1,s])-note(832,[A,n],3,118744,118860,119820,54). +snote(832,[A,n],3,100:1,0,1/24,294.0,294.3333,[voice1,staff1,s])-note(832,[A,n],3,118744,118860,119820,54). snote(833,[A,n],1,100:1,0,1/8,294.0,295.0,[voice5,staff2])-note(833,[A,n],1,118776,118820,119820,60). -snote(834,[C,n],4,100:1,11184811/268435456,11184811/268435456,294.3333,294.6667,[voice1,staff1,s])-note(834,[C,n],4,118876,118951,119820,59). -snote(835,[E,n],4,100:1,11184811/134217728,11184811/268435456,294.6667,295.0,[voice1,staff1,s])-note(835,[E,n],4,118974,119018,119820,54). -snote(836,[A,n],4,100:2,0,11184811/268435456,295.0,295.3333,[voice1,staff1,s])-note(836,[A,n],4,119152,119227,119820,37). -snote(837,[C,n],5,100:2,11184811/268435456,11184811/268435456,295.3333,295.6667,[voice1,staff1,s])-note(837,[C,n],5,119245,119367,119820,59). -snote(838,[E,n],5,100:2,11184811/134217728,11184811/268435456,295.6667,296.0,[voice1,staff1,s])-note(838,[E,n],5,119371,119536,119820,67). -snote(839,[D,n],5,100:3,0,11184811/268435456,296.0,296.3333,[voice1,staff1,s])-note(839,[D,n],5,119511,119643,119820,67). +snote(834,[C,n],4,100:1,1/24,1/24,294.3333,294.6667,[voice1,staff1,s])-note(834,[C,n],4,118876,118951,119820,59). +snote(835,[E,n],4,100:1,1/12,1/24,294.6667,295.0,[voice1,staff1,s])-note(835,[E,n],4,118974,119018,119820,54). +snote(836,[A,n],4,100:2,0,1/24,295.0,295.3333,[voice1,staff1,s])-note(836,[A,n],4,119152,119227,119820,37). +snote(837,[C,n],5,100:2,1/24,1/24,295.3333,295.6667,[voice1,staff1,s])-note(837,[C,n],5,119245,119367,119820,59). +snote(838,[E,n],5,100:2,1/12,1/24,295.6667,296.0,[voice1,staff1,s])-note(838,[E,n],5,119371,119536,119820,67). +snote(839,[D,n],5,100:3,0,1/24,296.0,296.3333,[voice1,staff1,s])-note(839,[D,n],5,119511,119643,119820,67). snote(840,[A,n],3,100:3,0,1/8,296.0,297.0,[voice5,staff2])-note(841,[A,n],3,119541,119596,119820,63). snote(841,[C,n],4,100:3,0,1/8,296.0,297.0,[voice5,staff2])-note(840,[C,n],4,119534,119609,119820,59). snote(842,[E,n],4,100:3,0,1/8,296.0,297.0,[voice5,staff2])-note(842,[E,n],4,119601,119642,119820,26). -snote(843,[C,n],5,100:3,11184811/268435456,11184811/268435456,296.3333,296.6667,[voice1,staff1,s])-note(843,[C,n],5,119606,119732,119820,64). -snote(844,[B,n],4,100:3,11184811/134217728,11184811/268435456,296.6667,297.0,[voice1,staff1,s])-note(844,[B,n],4,119713,119752,119820,64). -snote(845,[A,n],4,101:1,0,11184811/268435456,297.0,297.3333,[voice1,staff1,s])-note(845,[A,n],4,119862,119975,120886,63). +snote(843,[C,n],5,100:3,1/24,1/24,296.3333,296.6667,[voice1,staff1,s])-note(843,[C,n],5,119606,119732,119820,64). +snote(844,[B,n],4,100:3,1/12,1/24,296.6667,297.0,[voice1,staff1,s])-note(844,[B,n],4,119713,119752,119820,64). +snote(845,[A,n],4,101:1,0,1/24,297.0,297.3333,[voice1,staff1,s])-note(845,[A,n],4,119862,119975,120886,63). snote(846,[A,n],3,101:1,0,1/8,297.0,298.0,[voice5,staff2])-note(846,[A,n],3,119899,120012,120886,59). snote(847,[C,n],4,101:1,0,1/8,297.0,298.0,[voice5,staff2])-note(847,[C,n],4,119909,120022,120886,59). snote(848,[E,n],4,101:1,0,1/8,297.0,298.0,[voice5,staff2])-note(848,[E,n],4,119914,119999,120886,55). -snote(849,[C,n],5,101:1,11184811/268435456,11184811/268435456,297.3333,297.6667,[voice1,staff1,s])-note(849,[C,n],5,119971,120089,120886,69). -snote(850,[E,n],5,101:1,11184811/134217728,11184811/268435456,297.6667,298.0,[voice1,staff1,s])-note(850,[E,n],5,120103,120147,120886,54). -snote(851,[A,n],5,101:2,0,11184811/268435456,298.0,298.3333,[voice1,staff1,s])-note(851,[A,n],5,120259,120320,120886,52). -snote(852,[C,n],6,101:2,11184811/268435456,11184811/268435456,298.3333,298.6667,[voice1,staff1,s])-note(852,[C,n],6,120341,120450,120886,61). -snote(853,[E,n],6,101:2,11184811/134217728,11184811/268435456,298.6667,299.0,[voice1,staff1,s])-note(853,[E,n],6,120460,120629,120886,66). -snote(854,[D,n],6,101:3,0,11184811/268435456,299.0,299.3333,[voice1,staff1,s])-note(854,[D,n],6,120585,120721,120886,63). +snote(849,[C,n],5,101:1,1/24,1/24,297.3333,297.6667,[voice1,staff1,s])-note(849,[C,n],5,119971,120089,120886,69). +snote(850,[E,n],5,101:1,1/12,1/24,297.6667,298.0,[voice1,staff1,s])-note(850,[E,n],5,120103,120147,120886,54). +snote(851,[A,n],5,101:2,0,1/24,298.0,298.3333,[voice1,staff1,s])-note(851,[A,n],5,120259,120320,120886,52). +snote(852,[C,n],6,101:2,1/24,1/24,298.3333,298.6667,[voice1,staff1,s])-note(852,[C,n],6,120341,120450,120886,61). +snote(853,[E,n],6,101:2,1/12,1/24,298.6667,299.0,[voice1,staff1,s])-note(853,[E,n],6,120460,120629,120886,66). +snote(854,[D,n],6,101:3,0,1/24,299.0,299.3333,[voice1,staff1,s])-note(854,[D,n],6,120585,120721,120886,63). snote(855,[A,n],3,101:3,0,1/8,299.0,300.0,[voice5,staff2])-note(855,[A,n],3,120636,120695,120886,62). snote(856,[C,n],4,101:3,0,1/8,299.0,300.0,[voice5,staff2])-note(856,[C,n],4,120639,120692,120886,60). snote(857,[E,n],4,101:3,0,1/8,299.0,300.0,[voice5,staff2])-note(857,[E,n],4,120649,120696,120886,56). -snote(858,[C,n],6,101:3,11184811/268435456,11184811/268435456,299.3333,299.6667,[voice1,staff1,s])-note(858,[C,n],6,120665,120815,120886,59). -snote(859,[B,n],5,101:3,11184811/134217728,11184811/268435456,299.6667,300.0,[voice1,staff1,s])-note(859,[B,n],5,120763,120817,120886,67). -snote(860,[A,n],5,102:1,0,11184811/268435456,300.0,300.3333,[voice1,staff1,s])-note(860,[A,n],5,120919,121042,122009,73). +snote(858,[C,n],6,101:3,1/24,1/24,299.3333,299.6667,[voice1,staff1,s])-note(858,[C,n],6,120665,120815,120886,59). +snote(859,[B,n],5,101:3,1/12,1/24,299.6667,300.0,[voice1,staff1,s])-note(859,[B,n],5,120763,120817,120886,67). +snote(860,[A,n],5,102:1,0,1/24,300.0,300.3333,[voice1,staff1,s])-note(860,[A,n],5,120919,121042,122009,73). snote(861,[A,n],3,102:1,0,1/8,300.0,301.0,[voice5,staff2])-note(861,[A,n],3,120955,121092,122009,69). snote(862,[C,n],4,102:1,0,1/8,300.0,301.0,[voice5,staff2])-note(862,[C,n],4,120958,121087,122009,63). snote(863,[E,n],4,102:1,0,1/8,300.0,301.0,[voice5,staff2])-note(863,[E,n],4,120967,121042,122009,54). -snote(864,[C,n],6,102:1,11184811/268435456,11184811/268435456,300.3333,300.6667,[voice1,staff1,s])-note(864,[C,n],6,121030,121136,122009,69). -snote(865,[E,n],6,102:1,11184811/134217728,11184811/268435456,300.6667,301.0,[voice1,staff1,s])-note(865,[E,n],6,121128,121163,122009,62). -snote(866,[A,n],6,102:2,0,11184811/268435456,301.0,301.3333,[voice1,staff1,s])-note(866,[A,n],6,121285,121390,122009,68). -snote(867,[C,n],7,102:2,11184811/268435456,11184811/268435456,301.3333,301.6667,[voice1,staff1,s])-note(867,[C,n],7,121407,121515,122009,59). -snote(868,[E,n],7,102:2,11184811/134217728,11184811/268435456,301.6667,302.0,[voice1,staff1,s])-note(868,[E,n],7,121521,121731,122009,71). -snote(869,[D,n],7,102:3,0,11184811/268435456,302.0,302.3333,[voice1,staff1,s])-note(870,[D,n],7,121659,121790,122009,62). +snote(864,[C,n],6,102:1,1/24,1/24,300.3333,300.6667,[voice1,staff1,s])-note(864,[C,n],6,121030,121136,122009,69). +snote(865,[E,n],6,102:1,1/12,1/24,300.6667,301.0,[voice1,staff1,s])-note(865,[E,n],6,121128,121163,122009,62). +snote(866,[A,n],6,102:2,0,1/24,301.0,301.3333,[voice1,staff1,s])-note(866,[A,n],6,121285,121390,122009,68). +snote(867,[C,n],7,102:2,1/24,1/24,301.3333,301.6667,[voice1,staff1,s])-note(867,[C,n],7,121407,121515,122009,59). +snote(868,[E,n],7,102:2,1/12,1/24,301.6667,302.0,[voice1,staff1,s])-note(868,[E,n],7,121521,121731,122009,71). +snote(869,[D,n],7,102:3,0,1/24,302.0,302.3333,[voice1,staff1,s])-note(870,[D,n],7,121659,121790,122009,62). snote(870,[A,n],3,102:3,0,1/8,302.0,303.0,[voice5,staff2])-note(869,[A,n],3,121656,121762,122009,60). snote(871,[C,n],4,102:3,0,1/8,302.0,303.0,[voice5,staff2])-note(871,[C,n],4,121665,121771,122009,62). snote(872,[E,n],4,102:3,0,1/8,302.0,303.0,[voice5,staff2])-note(872,[E,n],4,121694,121740,122009,54). -snote(873,[C,n],7,102:3,11184811/268435456,11184811/268435456,302.3333,302.6667,[voice1,staff1,s])-note(873,[C,n],7,121750,121845,122009,62). -snote(874,[B,n],6,102:3,11184811/134217728,11184811/268435456,302.6667,303.0,[voice1,staff1,s])-note(874,[B,n],6,121839,121930,122009,71). -snote(875,[B,b],6,103:1,0,11184811/268435456,303.0,303.3333,[voice1,staff1,s])-note(875,[B,b],6,121990,122083,122083,67). +snote(873,[C,n],7,102:3,1/24,1/24,302.3333,302.6667,[voice1,staff1,s])-note(873,[C,n],7,121750,121845,122009,62). +snote(874,[B,n],6,102:3,1/12,1/24,302.6667,303.0,[voice1,staff1,s])-note(874,[B,n],6,121839,121930,122009,71). +snote(875,[B,b],6,103:1,0,1/24,303.0,303.3333,[voice1,staff1,s])-note(875,[B,b],6,121990,122083,122083,67). snote(876,[A,n],3,103:1,0,1/8,303.0,304.0,[voice5,staff2])-note(877,[A,n],3,122034,122201,124486,65). snote(877,[C,n],4,103:1,0,1/8,303.0,304.0,[voice5,staff2])-note(876,[C,n],4,122020,122200,124486,65). snote(878,[E,n],4,103:1,0,1/8,303.0,304.0,[voice5,staff2])-note(878,[E,n],4,122041,122224,124486,63). -snote(879,[A,n],6,103:1,11184811/268435456,11184811/268435456,303.3333,303.6667,[voice1,staff1,s])-note(879,[A,n],6,122105,122192,124486,68). -snote(880,[G,#],6,103:1,11184811/134217728,11184811/268435456,303.6667,304.0,[voice1,staff1,s])-note(880,[G,#],6,122238,122328,124486,61). -snote(881,[G,n],6,103:2,0,11184811/268435456,304.0,304.3333,[voice1,staff1,s])-note(881,[G,n],6,122334,122435,124486,71). -snote(882,[F,#],6,103:2,11184811/268435456,11184811/268435456,304.3333,304.6667,[voice1,staff1,s])-note(882,[F,#],6,122454,122559,124486,66). -snote(883,[F,n],6,103:2,11184811/134217728,11184811/268435456,304.6667,305.0,[voice1,staff1,s])-note(883,[F,n],6,122557,122599,124486,66). -snote(884,[E,n],6,103:3,0,11184811/268435456,305.0,305.3333,[voice1,staff1,s])-note(884,[E,n],6,122674,122806,124486,64). -snote(885,[D,#],6,103:3,11184811/268435456,11184811/268435456,305.3333,305.6667,[voice1,staff1,s])-note(885,[D,#],6,122799,122888,124486,68). -snote(886,[D,n],6,103:3,11184811/134217728,11184811/268435456,305.6667,306.0,[voice1,staff1,s])-note(886,[D,n],6,122891,122969,124486,63). -snote(887,[C,#],6,104:1,0,11184811/268435456,306.0,306.3333,[voice1,staff1,s])-note(887,[C,#],6,123010,123116,124486,64). -snote(888,[C,n],6,104:1,11184811/268435456,11184811/268435456,306.3333,306.6667,[voice1,staff1,s])-note(888,[C,n],6,123123,123168,124486,69). -snote(889,[B,n],5,104:1,11184811/134217728,11184811/268435456,306.6667,307.0,[voice1,staff1,s])-note(889,[B,n],5,123249,123354,124486,69). -snote(890,[B,b],5,104:2,0,11184811/268435456,307.0,307.3333,[voice1,staff1,s])-note(890,[B,b],5,123350,123444,124486,62). -snote(891,[A,n],5,104:2,11184811/268435456,11184811/268435456,307.3333,307.6667,[voice1,staff1,s])-note(891,[A,n],5,123452,123537,124486,65). -snote(892,[G,#],5,104:2,11184811/134217728,11184811/268435456,307.6667,308.0,[voice1,staff1,s])-note(892,[G,#],5,123577,123667,124486,66). -snote(893,[G,n],5,104:3,0,11184811/268435456,308.0,308.3333,[voice1,staff1,s])-note(893,[G,n],5,123701,123761,124486,62). -snote(894,[F,#],5,104:3,11184811/268435456,11184811/268435456,308.3333,308.6667,[voice1,staff1,s])-note(894,[F,#],5,123781,123906,124486,73). -snote(895,[F,n],5,104:3,11184811/134217728,11184811/268435456,308.6667,309.0,[voice1,staff1,s])-note(895,[F,n],5,123915,123969,124486,67). +snote(879,[A,n],6,103:1,1/24,1/24,303.3333,303.6667,[voice1,staff1,s])-note(879,[A,n],6,122105,122192,124486,68). +snote(880,[G,#],6,103:1,1/12,1/24,303.6667,304.0,[voice1,staff1,s])-note(880,[G,#],6,122238,122328,124486,61). +snote(881,[G,n],6,103:2,0,1/24,304.0,304.3333,[voice1,staff1,s])-note(881,[G,n],6,122334,122435,124486,71). +snote(882,[F,#],6,103:2,1/24,1/24,304.3333,304.6667,[voice1,staff1,s])-note(882,[F,#],6,122454,122559,124486,66). +snote(883,[F,n],6,103:2,1/12,1/24,304.6667,305.0,[voice1,staff1,s])-note(883,[F,n],6,122557,122599,124486,66). +snote(884,[E,n],6,103:3,0,1/24,305.0,305.3333,[voice1,staff1,s])-note(884,[E,n],6,122674,122806,124486,64). +snote(885,[D,#],6,103:3,1/24,1/24,305.3333,305.6667,[voice1,staff1,s])-note(885,[D,#],6,122799,122888,124486,68). +snote(886,[D,n],6,103:3,1/12,1/24,305.6667,306.0,[voice1,staff1,s])-note(886,[D,n],6,122891,122969,124486,63). +snote(887,[C,#],6,104:1,0,1/24,306.0,306.3333,[voice1,staff1,s])-note(887,[C,#],6,123010,123116,124486,64). +snote(888,[C,n],6,104:1,1/24,1/24,306.3333,306.6667,[voice1,staff1,s])-note(888,[C,n],6,123123,123168,124486,69). +snote(889,[B,n],5,104:1,1/12,1/24,306.6667,307.0,[voice1,staff1,s])-note(889,[B,n],5,123249,123354,124486,69). +snote(890,[B,b],5,104:2,0,1/24,307.0,307.3333,[voice1,staff1,s])-note(890,[B,b],5,123350,123444,124486,62). +snote(891,[A,n],5,104:2,1/24,1/24,307.3333,307.6667,[voice1,staff1,s])-note(891,[A,n],5,123452,123537,124486,65). +snote(892,[G,#],5,104:2,1/12,1/24,307.6667,308.0,[voice1,staff1,s])-note(892,[G,#],5,123577,123667,124486,66). +snote(893,[G,n],5,104:3,0,1/24,308.0,308.3333,[voice1,staff1,s])-note(893,[G,n],5,123701,123761,124486,62). +snote(894,[F,#],5,104:3,1/24,1/24,308.3333,308.6667,[voice1,staff1,s])-note(894,[F,#],5,123781,123906,124486,73). +snote(895,[F,n],5,104:3,1/12,1/24,308.6667,309.0,[voice1,staff1,s])-note(895,[F,n],5,123915,123969,124486,67). snote(896,[E,n],5,105:1,0,1/16,309.0,309.5,[voice1,staff1,s])-note(896,[E,n],5,124064,124272,124486,69). snote(897,[D,#],5,105:1,1/16,1/16,309.5,310.0,[voice1,staff1,s])-note(897,[D,#],5,124242,124436,124486,61). snote(898,[E,n],5,105:2,0,1/16,310.0,310.5,[voice1,staff1,s])-note(898,[E,n],5,124440,124614,124614,67).