From 14867ce702fd4733cd700a135d63e0c094a111ec Mon Sep 17 00:00:00 2001 From: SoulMelody Date: Sat, 18 Jan 2025 00:42:52 +0800 Subject: [PATCH] svp: update notes validator --- libresvip/plugins/svp/model.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/libresvip/plugins/svp/model.py b/libresvip/plugins/svp/model.py index 0135117ee..7bc55f049 100644 --- a/libresvip/plugins/svp/model.py +++ b/libresvip/plugins/svp/model.py @@ -549,7 +549,9 @@ class SVGroup(BaseModel): @field_validator("notes", mode="before") @classmethod def validate_notes(cls, v: list[dict[str, Any]], _info: ValidationInfo) -> list[dict[str, Any]]: - return [note for note in v if note["onset"] >= 0] + if _info.mode == "json": + return [note for note in v if note["onset"] >= 0] + return v def overlapped_with(self, other: SVGroup) -> bool: for note in self.notes: @@ -564,18 +566,20 @@ def overlapped_with(self, other: SVGroup) -> bool: return False def __add__(self, blick_offset: int) -> SVGroup: - new_group = self.model_copy(deep=True) - new_group.notes = [ - note + blick_offset for note in self.notes if note.onset + blick_offset >= 0 - ] - new_group.parameters += blick_offset - return new_group + return self.model_copy( + deep=True, + update={ + "notes": [ + note + blick_offset for note in self.notes if note.onset + blick_offset >= 0 + ], + "parameters": self.parameters + blick_offset, + }, + ) def __xor__(self, pitch_offset: int) -> SVGroup: - new_group = self.model_copy(deep=True) - for note in new_group.notes: - note ^= pitch_offset - return new_group + return self.model_copy( + deep=True, update={"notes": [note ^ pitch_offset for note in self.notes]} + ) class SVMixer(BaseModel):