From b01fccbf4b766c49a4745a9a532ebdf82c085962 Mon Sep 17 00:00:00 2001 From: EillesWan Date: Fri, 17 Jul 2026 04:58:12 +0800 Subject: [PATCH] =?UTF-8?q?midi=E8=AF=BB=E5=8F=96=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=AD=8C=E8=AF=8D=E5=AD=97=E7=AC=A6=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Musicreater/builtin_plugins/midi_read/main.py | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/Musicreater/builtin_plugins/midi_read/main.py b/Musicreater/builtin_plugins/midi_read/main.py index 3f9e3a9..c2083c0 100644 --- a/Musicreater/builtin_plugins/midi_read/main.py +++ b/Musicreater/builtin_plugins/midi_read/main.py @@ -66,6 +66,11 @@ class MidiImportConfig(PluginConfig): default_program_value: int = MIDI_DEFAULT_PROGRAM_VALUE default_volume_value: int = MIDI_DEFAULT_VOLUME_VALUE default_tempo_value: int = mido.midifiles.midifiles.DEFAULT_TEMPO + default_midi_charset: str = "latin1" + default_lyric_encoding: str = "utf-8" # 默认歌词编码 + """ + 默认歌词编码,设定为空时不进行二次编码处理 + """ # 对照表,此处 None 值在下边 post init 函数中有处理 pitched_note_reference_table: Mapping[int, str] = None # type: ignore @@ -190,20 +195,28 @@ class MidiImport2MusicPlugin(MusicInputPluginBase): def loadbytes( self, bytes_buffer_in: BinaryIO, - config: Optional[MidiImportConfig] = MidiImportConfig(), + config: Optional[MidiImportConfig] = None, ) -> SingleMusic: + if config is None: + config = MidiImportConfig() return self.midifile_2_singlemusic( - mido.MidiFile(file=bytes_buffer_in, clip=True), - config if config else MidiImportConfig(), + mido.MidiFile( + file=bytes_buffer_in, clip=True, charset=config.default_midi_charset + ), + config, ) def load( - self, file_path: Path, config: Optional[MidiImportConfig] = MidiImportConfig() + self, file_path: Path, config: Optional[MidiImportConfig] = None ) -> SingleMusic: """从 Midi 文件导入音乐数据""" + if config is None: + config = MidiImportConfig() return self.midifile_2_singlemusic( - mido.MidiFile(filename=file_path, clip=True), - config if config else MidiImportConfig(), + mido.MidiFile( + filename=file_path, clip=True, charset=config.default_midi_charset + ), + config, ) @staticmethod @@ -413,7 +426,13 @@ class MidiImport2MusicPlugin(MusicInputPluginBase): volume_processing_method=config.volume_process_function, panning_processing_method=config.panning_processing_function, note_table_replacement=config.note_replacement_table, - lyric_line=_lyric, + lyric_line=( + _lyric.encode("latin1").decode( + config.default_lyric_encoding + ) + if config.default_lyric_encoding + else _lyric + ), ) )