├── .devcontainer └── devcontainer.json ├── .github ├── dependabot.yml ├── renovate.json └── workflows │ ├── compile.yml │ ├── package.yml │ └── publish.yml ├── .gitignore ├── .pre-commit-config.yaml ├── Dockerfile ├── LICENSE ├── README.md ├── crowdin.yml ├── docs ├── .overrides │ ├── libresvip.ico │ └── partials │ │ └── copyright.html ├── coding_style.md ├── contributing.md ├── credits.md ├── faq.md ├── index.md ├── license.md ├── playground.md ├── project_formats.md └── setup.md ├── experimental ├── dspx │ ├── __init__.py │ └── model.py ├── nn │ ├── __init__.py │ └── model_v3.py ├── vsp │ ├── __init__,py │ └── model.py ├── vsp4 │ ├── __init__.py │ └── model.py └── xvsq │ ├── __init__.py │ └── model.py ├── libresvip ├── __init__.py ├── __pyinstaller │ ├── __init__.py │ └── hook-libresvip.py ├── cli │ ├── __init__.py │ ├── __main__.py │ ├── app.py │ ├── commands │ │ ├── __init__.py │ │ ├── conf.py │ │ ├── plugin.py │ │ └── proj.py │ └── prompt.py ├── core │ ├── __init__.py │ ├── compat.py │ ├── config.py │ ├── constants.py │ ├── exceptions.py │ ├── lyric_phoneme │ │ ├── __init__.py │ │ ├── chinese │ │ │ ├── __init__.py │ │ │ └── vocaloid_xsampa.py │ │ ├── japanese │ │ │ ├── __init__.py │ │ │ └── vocaloid_xsampa.py │ │ └── korean │ │ │ ├── __init__.py │ │ │ └── vocaloid_xsampa.py │ ├── tick_counter.py │ ├── time_interval.py │ ├── time_sync.py │ └── warning_types.py ├── extension │ ├── __init__.py │ ├── base.py │ ├── manager.py │ └── meta_info.py ├── gui │ ├── __init__.py │ ├── __main__.py │ ├── models │ │ ├── __init__.py │ │ ├── base_task.py │ │ ├── list_models.py │ │ └── table_models.py │ └── modules │ │ ├── __init__.py │ │ ├── application.py │ │ ├── clipboard.py │ │ ├── config_items.py │ │ ├── font_loader.py │ │ ├── frameless_window.py │ │ ├── frameless_window_win32.py │ │ ├── locale_switcher.py │ │ ├── log_handler.py │ │ ├── notifier.py │ │ ├── task_manager.py │ │ ├── url_opener.py │ │ ├── vendor │ │ ├── __init__.py │ │ └── qasync │ │ │ ├── __init__.py │ │ │ ├── _common.py │ │ │ ├── _unix.py │ │ │ └── _windows.py │ │ └── win32_constants.py ├── middlewares │ ├── pitch_shift │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── pitch_shift.mo │ │ │ │ │ └── pitch_shift.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── pitch_shift.mo │ │ │ │ │ └── pitch_shift.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── pitch_shift.mo │ │ │ │ └── pitch_shift.po │ │ ├── options.py │ │ ├── pitch_shift.po │ │ ├── pitch_shift.py │ │ └── pitch_shift.yapsy-plugin │ ├── project_zoom │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── project_zoom.mo │ │ │ │ │ └── project_zoom.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── project_zoom.mo │ │ │ │ │ └── project_zoom.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── project_zoom.mo │ │ │ │ └── project_zoom.po │ │ ├── options.py │ │ ├── project_zoom.po │ │ ├── project_zoom.py │ │ └── project_zoom.yapsy-plugin │ ├── pronounciation_conversion │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── pronounciation_conversion.mo │ │ │ │ │ └── pronounciation_conversion.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── pronounciation_conversion.mo │ │ │ │ │ └── pronounciation_conversion.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── pronounciation_conversion.mo │ │ │ │ └── pronounciation_conversion.po │ │ ├── options.py │ │ ├── pronounciation_conversion.po │ │ ├── pronounciation_conversion.py │ │ └── pronounciation_conversion.yapsy-plugin │ ├── remove_short_silences │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── remove_short_silences.mo │ │ │ │ │ └── remove_short_silences.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── remove_short_silences.mo │ │ │ │ │ └── remove_short_silences.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── remove_short_silences.mo │ │ │ │ └── remove_short_silences.po │ │ ├── options.py │ │ ├── remove_short_silences.po │ │ ├── remove_short_silences.py │ │ └── remove_short_silences.yapsy-plugin │ └── replace_lyric │ │ ├── __init__.py │ │ ├── locales │ │ ├── de_DE │ │ │ └── LC_MESSAGES │ │ │ │ ├── replace_lyric.mo │ │ │ │ └── replace_lyric.po │ │ ├── ja_JP │ │ │ └── LC_MESSAGES │ │ │ │ ├── replace_lyric.mo │ │ │ │ └── replace_lyric.po │ │ └── zh_CN │ │ │ └── LC_MESSAGES │ │ │ ├── replace_lyric.mo │ │ │ └── replace_lyric.po │ │ ├── options.py │ │ ├── replace_lyric.po │ │ ├── replace_lyric.py │ │ └── replace_lyric.yapsy-plugin ├── mobile │ ├── __init__.py │ ├── __main__.py │ └── app.py ├── model │ ├── __init__.py │ ├── base.py │ ├── option_mixins.py │ ├── pitch_simulator.py │ ├── point.py │ ├── portamento.py │ ├── relative_pitch_curve.py │ └── reset_time_axis.py ├── plugins │ ├── acep │ │ ├── __init__.py │ │ ├── ace-studio.yapsy-plugin │ │ ├── ace_studio_converter.py │ │ ├── ace_studio_generator.py │ │ ├── ace_studio_parser.py │ │ ├── acep.po │ │ ├── acep_io.py │ │ ├── base_pitch_curve.py │ │ ├── color_pool.py │ │ ├── ctypes_buffer.py │ │ ├── enums.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── acep.mo │ │ │ │ │ └── acep.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── acep.mo │ │ │ │ │ └── acep.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── acep.mo │ │ │ │ └── acep.po │ │ ├── model.py │ │ ├── options.py │ │ └── singers.py │ ├── aisp │ │ ├── __init__.py │ │ ├── aisingers_converter.py │ │ ├── aisingers_generator.py │ │ ├── aisingers_parser.py │ │ ├── aisp.po │ │ ├── aisp.yapsy-plugin │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── aisp.mo │ │ │ │ │ └── aisp.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── aisp.mo │ │ │ │ │ └── aisp.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── aisp.mo │ │ │ │ └── aisp.po │ │ ├── model.py │ │ └── options.py │ ├── ass │ │ ├── __init__.py │ │ ├── ass.po │ │ ├── ass.yapsy-plugin │ │ ├── ass_converter.py │ │ ├── ass_generator.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ass.mo │ │ │ │ │ └── ass.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ass.mo │ │ │ │ │ └── ass.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ass.mo │ │ │ │ └── ass.po │ │ └── options.py │ ├── ccs │ │ ├── __init__.py │ │ ├── ccs.po │ │ ├── ccs.yapsy-plugin │ │ ├── cevio_converter.py │ │ ├── cevio_generator.py │ │ ├── cevio_parser.py │ │ ├── cevio_pitch.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ccs.mo │ │ │ │ │ └── ccs.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ccs.mo │ │ │ │ │ └── ccs.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ccs.mo │ │ │ │ └── ccs.po │ │ ├── model.py │ │ └── options.py │ ├── ds │ │ ├── __init__.py │ │ ├── dicts │ │ │ └── opencpop-extension.txt │ │ ├── diffsinger_converter.py │ │ ├── diffsinger_generator.py │ │ ├── diffsinger_parser.py │ │ ├── ds.po │ │ ├── ds.yapsy-plugin │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ds.mo │ │ │ │ │ └── ds.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ds.mo │ │ │ │ │ └── ds.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ds.mo │ │ │ │ └── ds.po │ │ ├── options.py │ │ └── utils │ │ │ ├── __init__.py │ │ │ ├── gender_param_utils.py │ │ │ ├── lyric_util.py │ │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── ds_file.py │ │ │ ├── ds_note.py │ │ │ ├── ds_param_curve.py │ │ │ ├── ds_param_node.py │ │ │ └── ds_project.py │ │ │ ├── note_list_util.py │ │ │ ├── phoneme_dict.py │ │ │ ├── pinyin_util.py │ │ │ ├── pitch_param_utils.py │ │ │ └── project_util.py │ ├── dv │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── deepvocal_converter.py │ │ ├── deepvocal_pitch.py │ │ ├── dv.po │ │ ├── dv.yapsy-plugin │ │ ├── dv_generator.py │ │ ├── dv_parser.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── dv.mo │ │ │ │ │ └── dv.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── dv.mo │ │ │ │ │ └── dv.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── dv.mo │ │ │ │ └── dv.po │ │ ├── model.py │ │ └── options.py │ ├── gj │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── gj.po │ │ ├── gjgj.yapsy-plugin │ │ ├── gjgj_converter.py │ │ ├── gjgj_generator.py │ │ ├── gjgj_parser.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── gj.mo │ │ │ │ │ └── gj.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── gj.mo │ │ │ │ │ └── gj.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── gj.mo │ │ │ │ └── gj.po │ │ ├── model.py │ │ ├── options.py │ │ └── singers.py │ ├── json │ │ ├── __init__.py │ │ ├── json.po │ │ ├── jsonsvip.yapsy-plugin │ │ ├── jsonsvip_converter.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── json.mo │ │ │ │ │ └── json.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── json.mo │ │ │ │ │ └── json.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── json.mo │ │ │ │ └── json.po │ │ └── options.py │ ├── lrc │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── lrc.mo │ │ │ │ │ └── lrc.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── lrc.mo │ │ │ │ │ └── lrc.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── lrc.mo │ │ │ │ └── lrc.po │ │ ├── lrc.po │ │ ├── lrc.yapsy-plugin │ │ ├── lrc_converter.py │ │ ├── lrc_generator.py │ │ ├── model.py │ │ ├── options.py │ │ └── template.py │ ├── mid │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── mid.mo │ │ │ │ │ └── mid.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── mid.mo │ │ │ │ │ └── mid.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── mid.mo │ │ │ │ └── mid.po │ │ ├── mid.po │ │ ├── mid.yapsy-plugin │ │ ├── midi_converter.py │ │ ├── midi_generator.py │ │ ├── midi_parser.py │ │ ├── midi_pitch.py │ │ ├── note_overlap.py │ │ └── options.py │ ├── mtp │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── mtp.mo │ │ │ │ │ └── mtp.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── mtp.mo │ │ │ │ │ └── mtp.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── mtp.mo │ │ │ │ └── mtp.po │ │ ├── model.py │ │ ├── mtp.po │ │ ├── mtp.yapsy-plugin │ │ ├── muta_converter.py │ │ ├── muta_generator.py │ │ ├── muta_parser.py │ │ └── options.py │ ├── musicxml │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── musicxml.mo │ │ │ │ │ └── musicxml.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── musicxml.mo │ │ │ │ │ └── musicxml.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── musicxml.mo │ │ │ │ └── musicxml.po │ │ ├── model.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── container.py │ │ │ ├── enums.py │ │ │ └── mxml4.py │ │ ├── musicxml.po │ │ ├── musicxml.yapsy-plugin │ │ ├── musicxml_converter.py │ │ ├── musicxml_generator.py │ │ ├── musicxml_parser.py │ │ └── options.py │ ├── nn │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── nn.mo │ │ │ │ │ └── nn.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── nn.mo │ │ │ │ │ └── nn.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── nn.mo │ │ │ │ └── nn.po │ │ ├── model.py │ │ ├── niaoniao_converter.py │ │ ├── niaoniao_generator.py │ │ ├── niaoniao_parser.py │ │ ├── nn.po │ │ ├── nn.yapsy-plugin │ │ ├── options.py │ │ └── template.py │ ├── ppsf │ │ ├── __init__.py │ │ ├── legacy_model.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ppsf.mo │ │ │ │ │ └── ppsf.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ppsf.mo │ │ │ │ │ └── ppsf.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ppsf.mo │ │ │ │ └── ppsf.po │ │ ├── model.py │ │ ├── options.py │ │ ├── piapro_studio_converter.py │ │ ├── piapro_studio_generator.py │ │ ├── piapro_studio_legacy_parser.py │ │ ├── piapro_studio_nt_parser.py │ │ ├── ppsf.po │ │ ├── ppsf.yapsy-plugin │ │ └── ppsf_interval_dict.py │ ├── ps_project │ │ ├── __init__.py │ │ ├── enums.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ps_project.mo │ │ │ │ │ └── ps_project.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ps_project.mo │ │ │ │ │ └── ps_project.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ps_project.mo │ │ │ │ └── ps_project.po │ │ ├── model.py │ │ ├── options.py │ │ ├── pocket_singer_converter.py │ │ ├── pocket_singer_generator.py │ │ ├── pocket_singer_parser.py │ │ ├── ps_project.po │ │ └── ps_project.yapsy-plugin │ ├── s5p │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── s5p.mo │ │ │ │ │ └── s5p.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── s5p.mo │ │ │ │ │ └── s5p.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── s5p.mo │ │ │ │ └── s5p.po │ │ ├── model.py │ │ ├── options.py │ │ ├── s5p.po │ │ ├── s5p.yapsy-plugin │ │ ├── synthv_editor_converter.py │ │ ├── synthv_editor_generator.py │ │ └── synthv_editor_parser.py │ ├── srt │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── srt.mo │ │ │ │ │ └── srt.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── srt.mo │ │ │ │ │ └── srt.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── srt.mo │ │ │ │ └── srt.po │ │ ├── options.py │ │ ├── srt.po │ │ ├── srt.yapsy-plugin │ │ ├── srt_converter.py │ │ └── srt_generator.py │ ├── svg │ │ ├── __init__.py │ │ ├── coordinate_helper.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svg.mo │ │ │ │ │ └── svg.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svg.mo │ │ │ │ │ └── svg.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── svg.mo │ │ │ │ └── svg.po │ │ ├── model.py │ │ ├── options.py │ │ ├── svg.po │ │ ├── svg.yapsy-plugin │ │ ├── svg_converter.py │ │ ├── svg_factory.py │ │ └── svg_generator.py │ ├── svip │ │ ├── __init__.py │ │ ├── binsvip.yapsy-plugin │ │ ├── binsvip_converter.py │ │ ├── binsvip_generator.py │ │ ├── binsvip_parser.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svip.mo │ │ │ │ │ └── svip.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svip.mo │ │ │ │ │ └── svip.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── svip.mo │ │ │ │ └── svip.po │ │ ├── models.py │ │ ├── msnrbf │ │ │ ├── __init__.py │ │ │ ├── binary_models.py │ │ │ ├── constants.py │ │ │ ├── nrbf_iobase.py │ │ │ ├── svip_reader.py │ │ │ ├── svip_writer.py │ │ │ └── xstudio_models.py │ │ ├── options.py │ │ ├── singers.json │ │ └── svip.po │ ├── svip3 │ │ ├── __init__.py │ │ ├── color_pool.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svip3.mo │ │ │ │ │ └── svip3.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svip3.mo │ │ │ │ │ └── svip3.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── svip3.mo │ │ │ │ └── svip3.po │ │ ├── model.py │ │ ├── options.py │ │ ├── singers.json │ │ ├── singers.py │ │ ├── svip3.po │ │ ├── svip3.yapsy-plugin │ │ ├── svip3_converter.py │ │ ├── svip3_generator.py │ │ └── svip3_parser.py │ ├── svp │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── interval_utils.py │ │ ├── lambert_w.py │ │ ├── layer_generator.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svp.mo │ │ │ │ │ └── svp.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── svp.mo │ │ │ │ │ └── svp.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── svp.mo │ │ │ │ └── svp.po │ │ ├── model.py │ │ ├── options.py │ │ ├── param_expression.py │ │ ├── phoneme_categories.json │ │ ├── phoneme_dictionary.json │ │ ├── phoneme_utils.py │ │ ├── svp.po │ │ ├── svp.yapsy-plugin │ │ ├── synthv_generator.py │ │ ├── synthv_parser.py │ │ ├── synthv_studio_converter.py │ │ └── track_merge_utils.py │ ├── tlp │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── tlp.mo │ │ │ │ │ └── tlp.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── tlp.mo │ │ │ │ │ └── tlp.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── tlp.mo │ │ │ │ └── tlp.po │ │ ├── model.py │ │ ├── options.py │ │ ├── tlp.po │ │ ├── tlp.yapsy-plugin │ │ ├── tunelab_converter.py │ │ ├── tunelab_generator.py │ │ └── tunelab_parser.py │ ├── tsmsln │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── tsmsln.mo │ │ │ │ │ └── tsmsln.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── tsmsln.mo │ │ │ │ │ └── tsmsln.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── tsmsln.mo │ │ │ │ └── tsmsln.po │ │ ├── model.py │ │ ├── options.py │ │ ├── tsmsln.po │ │ ├── tsmsln.yapsy-plugin │ │ ├── value_tree.py │ │ ├── voisona_mobile_converter.py │ │ ├── voisona_mobile_generator.py │ │ ├── voisona_mobile_parser.py │ │ └── voisona_mobile_pitch.py │ ├── tssln │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── tssln.mo │ │ │ │ │ └── tssln.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── tssln.mo │ │ │ │ │ └── tssln.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── tssln.mo │ │ │ │ └── tssln.po │ │ ├── model.py │ │ ├── options.py │ │ ├── tssln.po │ │ ├── tssln.yapsy-plugin │ │ ├── value_tree.py │ │ ├── voisona_converter.py │ │ ├── voisona_generator.py │ │ ├── voisona_parser.py │ │ └── voisona_pitch.py │ ├── ufdata │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ufdata.mo │ │ │ │ │ └── ufdata.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ufdata.mo │ │ │ │ │ └── ufdata.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ufdata.mo │ │ │ │ └── ufdata.po │ │ ├── model.py │ │ ├── options.py │ │ ├── ufdata.po │ │ ├── ufdata.yapsy-plugin │ │ ├── ufdata_converter.py │ │ ├── ufdata_generator.py │ │ └── ufdata_parser.py │ ├── ust │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── interpolation.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ust.mo │ │ │ │ │ └── ust.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ust.mo │ │ │ │ │ └── ust.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ust.mo │ │ │ │ └── ust.po │ │ ├── model.py │ │ ├── options.py │ │ ├── pitch_mode1.py │ │ ├── pitch_mode2.py │ │ ├── rdp_simplification.py │ │ ├── resampling.py │ │ ├── template.py │ │ ├── ust.po │ │ ├── ust.yapsy-plugin │ │ ├── ust_converter.py │ │ ├── ust_generator.py │ │ ├── ust_parser.py │ │ └── vibrato_param.py │ ├── ustx │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ustx.mo │ │ │ │ │ └── ustx.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── ustx.mo │ │ │ │ │ └── ustx.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── ustx.mo │ │ │ │ └── ustx.po │ │ ├── model.py │ │ ├── options.py │ │ ├── time_axis.py │ │ ├── ustx.po │ │ ├── ustx.yapsy-plugin │ │ ├── ustx_converter.py │ │ ├── ustx_generator.py │ │ ├── ustx_parser.py │ │ ├── util.py │ │ └── utils │ │ │ ├── __init__.py │ │ │ ├── lyric_util.py │ │ │ └── music_math.py │ ├── vfp │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vfp.mo │ │ │ │ │ └── vfp.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vfp.mo │ │ │ │ │ └── vfp.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vfp.mo │ │ │ │ └── vfp.po │ │ ├── model.py │ │ ├── options.py │ │ ├── vfp.po │ │ ├── vfp.yapsy-plugin │ │ ├── vox_factory_converter.py │ │ ├── vox_factory_generator.py │ │ └── vox_factory_parser.py │ ├── vog │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vog.mo │ │ │ │ │ └── vog.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vog.mo │ │ │ │ │ └── vog.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vog.mo │ │ │ │ └── vog.po │ │ ├── model.py │ │ ├── options.py │ │ ├── vog.po │ │ ├── vog.yapsy-plugin │ │ ├── vogen_converter.py │ │ ├── vogen_generator.py │ │ └── vogen_parser.py │ ├── vpr │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vpr.mo │ │ │ │ │ └── vpr.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vpr.mo │ │ │ │ │ └── vpr.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vpr.mo │ │ │ │ └── vpr.po │ │ ├── model.py │ │ ├── options.py │ │ ├── vocaloid_pitch.py │ │ ├── vpr.po │ │ ├── vpr.yapsy-plugin │ │ ├── vpr_converter.py │ │ ├── vpr_generator.py │ │ └── vpr_parser.py │ ├── vshp │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vshp.mo │ │ │ │ │ └── vshp.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vshp.mo │ │ │ │ │ └── vshp.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vshp.mo │ │ │ │ └── vshp.po │ │ ├── model.py │ │ ├── options.py │ │ ├── utils.py │ │ ├── vocalshifter_converter.py │ │ ├── vocalshifter_parser.py │ │ ├── vshp.po │ │ └── vshp.yapsy-plugin │ ├── vspx │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vspx.mo │ │ │ │ │ └── vspx.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vspx.mo │ │ │ │ │ └── vspx.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vspx.mo │ │ │ │ └── vspx.po │ │ ├── model.py │ │ ├── options.py │ │ ├── vocalsharp_converter.py │ │ ├── vspx.po │ │ ├── vspx.yapsy-plugin │ │ ├── vspx_generator.py │ │ ├── vspx_interval_dict.py │ │ └── vspx_parser.py │ ├── vsq │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vsq.mo │ │ │ │ │ └── vsq.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vsq.mo │ │ │ │ │ └── vsq.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vsq.mo │ │ │ │ └── vsq.po │ │ ├── options.py │ │ ├── vocaloid_pitch.py │ │ ├── vsq.po │ │ ├── vsq.yapsy-plugin │ │ ├── vsq_converter.py │ │ ├── vsq_generator.py │ │ └── vsq_parser.py │ ├── vsqx │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vsqx.mo │ │ │ │ │ └── vsqx.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vsqx.mo │ │ │ │ │ └── vsqx.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vsqx.mo │ │ │ │ └── vsqx.po │ │ ├── model.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── enums.py │ │ │ ├── vsqx3.py │ │ │ └── vsqx4.py │ │ ├── options.py │ │ ├── vocaloid_pitch.py │ │ ├── vsq3_generator.py │ │ ├── vsq4_generator.py │ │ ├── vsqx.po │ │ ├── vsqx.yapsy-plugin │ │ ├── vsqx_converter.py │ │ └── vsqx_parser.py │ ├── vvproj │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vvproj.mo │ │ │ │ │ └── vvproj.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vvproj.mo │ │ │ │ │ └── vvproj.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vvproj.mo │ │ │ │ └── vvproj.po │ │ ├── model.py │ │ ├── options.py │ │ ├── voicevox_converter.py │ │ ├── voicevox_generator.py │ │ ├── voicevox_parser.py │ │ ├── vvproj.po │ │ └── vvproj.yapsy-plugin │ ├── vxf │ │ ├── __init__.py │ │ ├── locales │ │ │ ├── de_DE │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vxf.mo │ │ │ │ │ └── vxf.po │ │ │ ├── ja_JP │ │ │ │ └── LC_MESSAGES │ │ │ │ │ ├── vxf.mo │ │ │ │ │ └── vxf.po │ │ │ └── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ ├── vxf.mo │ │ │ │ └── vxf.po │ │ ├── model.py │ │ ├── options.py │ │ ├── vx_beta_converter.py │ │ ├── vx_beta_generator.py │ │ ├── vx_beta_parser.py │ │ ├── vxf.po │ │ └── vxf.yapsy-plugin │ └── y77 │ │ ├── __init__.py │ │ ├── locales │ │ ├── de_DE │ │ │ └── LC_MESSAGES │ │ │ │ ├── y77.mo │ │ │ │ └── y77.po │ │ ├── ja_JP │ │ │ └── LC_MESSAGES │ │ │ │ ├── y77.mo │ │ │ │ └── y77.po │ │ └── zh_CN │ │ │ └── LC_MESSAGES │ │ │ ├── y77.mo │ │ │ └── y77.po │ │ ├── model.py │ │ ├── options.py │ │ ├── y77.po │ │ ├── y77.yapsy-plugin │ │ ├── y77_converter.py │ │ ├── y77_generator.py │ │ └── y77_parser.py ├── py.typed ├── res │ ├── libresvip.ico │ ├── libresvip.po │ ├── locales │ │ ├── de_DE │ │ │ └── LC_MESSAGES │ │ │ │ ├── libresvip.mo │ │ │ │ └── libresvip.po │ │ ├── ja_JP │ │ │ └── LC_MESSAGES │ │ │ │ ├── libresvip.mo │ │ │ │ └── libresvip.po │ │ ├── libresvip_gui.ts │ │ ├── qt_standard_buttons.ts │ │ └── zh_CN │ │ │ └── LC_MESSAGES │ │ │ ├── libresvip.mo │ │ │ └── libresvip.po │ ├── qml │ │ ├── components │ │ │ ├── actions.qml │ │ │ ├── converter_page.qml │ │ │ ├── dashed_rectangle.qml │ │ │ ├── dialogs.qml │ │ │ ├── icon_button.qml │ │ │ ├── icon_menu_item.qml │ │ │ ├── labeled_combo_box.qml │ │ │ ├── message_box.qml │ │ │ ├── plugin_info.qml │ │ │ ├── qmldir │ │ │ ├── running_indicator.qml │ │ │ ├── settings_dialog.qml │ │ │ ├── task_row.qml │ │ │ └── top_toolbar.qml │ │ ├── main.qml │ │ └── resources.qrc │ └── resources.rcc ├── tui │ ├── __init__.py │ ├── __main__.py │ └── app.py ├── utils │ ├── __init__.py │ ├── audio.py │ ├── mediainfo_wasm.py │ ├── module_loading.py │ ├── music_math.py │ ├── search.py │ ├── text.py │ ├── translation.py │ ├── xmlutils │ │ ├── __init__.py │ │ └── native.py │ └── yamlutils │ │ ├── __init__.py │ │ ├── common.py │ │ ├── dumper.py │ │ └── loader.py └── web │ ├── __init__.py │ ├── __main__.py │ ├── elements.py │ └── pages.py ├── mkdocs.yml ├── packaging ├── bdist_portable.py ├── build_apk.sh ├── docker-compose-build-wine-arm64.yml ├── docker-compose-msys2-clangarm64.yml ├── download_win_arm64_wheels.py ├── install_mobile_requirements.py ├── libresvip-mobile.spec ├── libresvip-tui.spec ├── libresvip-web.spec ├── libresvip.spec ├── macos-entitlements.plist ├── mingw_install.py ├── nuitka-cli.sh ├── nuitka-gui.sh ├── nuitka-libresvip.yml ├── nuitka-web.sh ├── requirements-android.txt ├── requirements-desktop.in ├── requirements-desktop.txt ├── requirements-flet.in ├── requirements-mobile.in ├── requirements-pyinstaller.in ├── requirements-pywebview.in ├── setup.py └── setup_web.py ├── pyproject.toml ├── scripts ├── babel.cfg ├── batch_compile_catalog.py ├── extract_messages.py ├── gen_snake_case_pyi.sh ├── list_deps_licenses.py ├── patch_qt_resource.py └── ts_model.py ├── tests ├── __init__.py ├── conftest.py ├── data │ └── .gitkeep ├── test_curve_util.py ├── test_pinyin.py └── test_plugin.py └── uv.lock /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LibreSVIP", 3 | "image": "mcr.microsoft.com/devcontainers/python:1-3.13-bookworm", 4 | "features": { 5 | "ghcr.io/devcontainers-contrib/features/protoc:1": {}, 6 | "ghcr.io/jsburckhardt/devcontainer-features/uv:1": {} 7 | }, 8 | "customizations": { 9 | "vscode": { 10 | "extensions": [ 11 | "charliermarsh.ruff", 12 | "detachhead.basedpyright", 13 | "hbenl.vscode-test-explorer", 14 | "littlefoxteam.vscode-python-test-adapter", 15 | "mrorz.language-gettext", 16 | "ms-python.mypy-type-checker", 17 | "ms-python.python", 18 | "redhat.vscode-xml", 19 | "redhat.vscode-yaml", 20 | "samuelcolvin.jinjahtml", 21 | "seanwu.vscode-qt-for-python", 22 | "sourcery.sourcery", 23 | "theqtcompany.qt-qml", 24 | "zxh404.vscode-proto3" 25 | ] 26 | } 27 | }, 28 | "forwardPorts": [8080] 29 | } 30 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for more information: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | # https://containers.dev/guide/dependabot 6 | 7 | version: 2 8 | updates: 9 | - package-ecosystem: "devcontainers" 10 | directory: "/" 11 | schedule: 12 | interval: weekly 13 | 14 | - package-ecosystem: 'github-actions' 15 | directory: '/' 16 | schedule: 17 | interval: 'weekly' -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended" 5 | ], 6 | "constraints": { 7 | "python": "==3.13" 8 | }, 9 | "lockFileMaintenance": { 10 | "enabled": true 11 | }, 12 | "rangeStrategy": "bump", 13 | "enabledManagers": ["pep621"], 14 | "labels": ["dependencies"], 15 | "packageRules": [ 16 | { 17 | "matchManagers": ["pep621"], 18 | "matchDepTypes": ["dependency-groups"], 19 | "automerge": true, 20 | "groupName": "Development dependencies", 21 | "groupSlug": "dev" 22 | }, 23 | { 24 | "matchManagers": ["pep621"], 25 | "matchDepTypes": ["project.dependencies", "project.optional-dependencies"], 26 | "matchUpdateTypes": ["minor", "patch"], 27 | "automerge": true, 28 | "groupName": "Project dependencies", 29 | "groupSlug": "proj" 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/astral-sh/uv:debian-slim 2 | WORKDIR /app 3 | COPY ./ /app 4 | 5 | RUN uv sync --extra webui --extra ujson --extra ruamel_yaml --extra lxml --frozen --no-cache 6 | 7 | EXPOSE 8080 8 | CMD ["uv", "run", "libresvip-web", "--port=8080", "--host=0.0.0.0", "--server", "--daemon"] -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /libresvip/**/*.po 3 | translation: /%original_path%/locales/%locale_with_underscore%/LC_MESSAGES/%original_file_name% 4 | ignore: 5 | - /%original_path%/locales/*/LC_MESSAGES/%original_file_name% 6 | -------------------------------------------------------------------------------- /docs/.overrides/libresvip.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/docs/.overrides/libresvip.ico -------------------------------------------------------------------------------- /docs/.overrides/partials/copyright.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/coding_style.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/docs/coding_style.md -------------------------------------------------------------------------------- /docs/contributing.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/docs/contributing.md -------------------------------------------------------------------------------- /docs/faq.md: -------------------------------------------------------------------------------- 1 | ## 是否支持Vocaloid1 MIDI格式? 2 | 3 | Vocaloid1 MIDI格式在具体内容方面与Vocaloid2的vsq格式基本一致,主要区别只是文件后缀不同。因此,实际上也是可以支持的,只是需要几项手动调整的步骤。 4 | 5 | 在导入时,可以关闭"切换格式时重置列表"及"自动检测导入格式"两个开关,再手动选择导入格式为vsq格式;在导出时,可以关闭"自动设置后缀名"这个开关,再选择导出格式为vsq格式,最后给导出文件名末尾加入.mid后缀。 6 | 7 | ## 是否支持Vocaloid版Piapro Studio的工程格式(.ppsf)? 8 | 9 | 因为Vocaloid版本的ppsf格式属于自定义二进制格式(详见 歌声合成工程格式一览),并且Crypton Future Media官方也没有提供文档供解析,因此仅提供基本的导入支持。而Piapro Studio编辑器支持vsqx格式的导入/导出,建议以vsqx格式作为中介。 10 | -------------------------------------------------------------------------------- /docs/license.md: -------------------------------------------------------------------------------- 1 | LibreSVIP 是以 [MIT许可协议](https://opensource.org/licenses/MIT) 发布的开源软件. 2 | 3 | ``` 4 | --8<-- "LICENSE" 5 | ``` 6 | -------------------------------------------------------------------------------- /docs/setup.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/docs/setup.md -------------------------------------------------------------------------------- /experimental/dspx/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/experimental/dspx/__init__.py -------------------------------------------------------------------------------- /experimental/nn/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/experimental/nn/__init__.py -------------------------------------------------------------------------------- /experimental/vsp/__init__,py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/experimental/vsp/__init__,py -------------------------------------------------------------------------------- /experimental/vsp4/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/experimental/vsp4/__init__.py -------------------------------------------------------------------------------- /experimental/xvsq/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/experimental/xvsq/__init__.py -------------------------------------------------------------------------------- /libresvip/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | __version__ = "1.11.0" 4 | os.environ.setdefault("LOGURU_AUTOINIT", "false") 5 | -------------------------------------------------------------------------------- /libresvip/__pyinstaller/__init__.py: -------------------------------------------------------------------------------- 1 | from libresvip.core.constants import pkg_dir 2 | 3 | 4 | def get_hook_dirs() -> list[str]: 5 | return [str(pkg_dir / "__pyinstaller")] 6 | -------------------------------------------------------------------------------- /libresvip/__pyinstaller/hook-libresvip.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import ( # noqa: N999 2 | collect_data_files, 3 | collect_submodules, 4 | ) 5 | 6 | hiddenimports = ( 7 | collect_submodules("libresvip.core") 8 | + collect_submodules("libresvip.model") 9 | + collect_submodules("libresvip.utils") 10 | ) 11 | 12 | datas = ( 13 | collect_data_files("libresvip.middlewares", include_py_files=True, excludes=["**/*.po"]) 14 | + collect_data_files("libresvip.plugins", include_py_files=True, excludes=["**/*.po"]) 15 | + collect_data_files( 16 | "libresvip.res", excludes=["**/*.po", "**/*.qml", "**/*.qrc", "**/*.ts", "**/qmldir"] 17 | ) 18 | ) 19 | -------------------------------------------------------------------------------- /libresvip/cli/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from libresvip.core.warning_types import warning_logger 4 | from libresvip.extension.manager import get_translation 5 | from libresvip.utils import translation 6 | 7 | warning_logger.add(sys.stderr, format="{message}", level="WARNING") 8 | translation.singleton_translation = get_translation() 9 | -------------------------------------------------------------------------------- /libresvip/cli/__main__.py: -------------------------------------------------------------------------------- 1 | from libresvip.cli.app import app 2 | 3 | if __name__ == "__main__": 4 | app() 5 | -------------------------------------------------------------------------------- /libresvip/cli/app.py: -------------------------------------------------------------------------------- 1 | import typer 2 | 3 | from .commands import conf_app, plugin_app, proj_app 4 | 5 | app = typer.Typer() 6 | 7 | app.add_typer(conf_app, name="conf") 8 | app.add_typer(plugin_app, name="plugin") 9 | app.add_typer(proj_app, name="proj") 10 | -------------------------------------------------------------------------------- /libresvip/cli/commands/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = [ 2 | "conf_app", 3 | "plugin_app", 4 | "proj_app", 5 | ] 6 | 7 | from .conf import app as conf_app 8 | from .plugin import app as plugin_app 9 | from .proj import app as proj_app 10 | -------------------------------------------------------------------------------- /libresvip/cli/commands/conf.py: -------------------------------------------------------------------------------- 1 | from typing import Annotated 2 | 3 | import typer 4 | 5 | from libresvip.core.config import save_settings, settings 6 | from libresvip.utils.translation import gettext_lazy as _ 7 | 8 | app = typer.Typer() 9 | 10 | 11 | @app.command("list") 12 | def list_configurations() -> None: 13 | for name, value in settings.model_dump().items(): 14 | typer.echo(f"{name}: {value}") 15 | 16 | 17 | def conf_key_callback(value: str) -> str: 18 | if value not in ["language"]: 19 | raise typer.BadParameter( 20 | _("Setting {} is not supported in cli mode.").format(value), 21 | ) 22 | return value 23 | 24 | 25 | @app.command("set") 26 | def set_configuration( 27 | name: Annotated[str, typer.Argument(callback=conf_key_callback)], 28 | value: Annotated[str, typer.Argument()], 29 | ) -> None: 30 | setattr(settings, name, value) 31 | save_settings() 32 | typer.echo(_("Set {} to {}").format(name, value)) 33 | -------------------------------------------------------------------------------- /libresvip/core/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/core/__init__.py -------------------------------------------------------------------------------- /libresvip/core/compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | try: 4 | import ujson as json 5 | except ImportError: 6 | import json 7 | 8 | if hasattr(json, "_default_encoder"): 9 | json._default_encoder.item_separator = "," 10 | json._default_encoder.key_separator = ":" 11 | 12 | __all__ = ["Traversable", "ZipFile", "json"] 13 | 14 | if sys.version_info < (3, 11): 15 | from importlib_resources.abc import Traversable 16 | from repro_zipfile import ReproducibleZipFile as ZipFile 17 | else: 18 | from importlib.resources.abc import Traversable 19 | from zipfile import ZipFile 20 | -------------------------------------------------------------------------------- /libresvip/core/constants.py: -------------------------------------------------------------------------------- 1 | from importlib.resources import files 2 | from typing import Final 3 | 4 | import platformdirs 5 | 6 | PACKAGE_NAME: Final[str] = "libresvip" 7 | 8 | # lyric related constants 9 | DEFAULT_PHONEME: Final[str] = "la" 10 | DEFAULT_ENGLISH_LYRIC: Final[str] = DEFAULT_PHONEME 11 | DEFAULT_SPANISH_LYRIC: Final[str] = DEFAULT_ENGLISH_LYRIC 12 | DEFAULT_CHINESE_LYRIC: Final[str] = "啦" 13 | DEFAULT_JAPANESE_LYRIC: Final[str] = "ラ" 14 | DEFAULT_KOREAN_LYRIC: Final[str] = "라" 15 | 16 | # midi related constants 17 | DEFAULT_BPM: Final[float] = 120.0 18 | KEY_IN_OCTAVE: Final[int] = 12 19 | TICKS_IN_BEAT: Final[int] = 480 20 | MIN_BREAK_LENGTH_BETWEEN_PITCH_SECTIONS: Final[int] = TICKS_IN_BEAT 21 | DEFAULT_PITCH_BEND_SENSITIVITY: Final[int] = 2 22 | MAX_PITCH_BEND_SENSITIVITY: Final[int] = 24 23 | PITCH_MAX_VALUE: Final[int] = 8191 24 | 25 | app_dir = platformdirs.AppDirs(PACKAGE_NAME) 26 | 27 | pkg_dir = files(PACKAGE_NAME) 28 | res_dir = pkg_dir / "res" 29 | -------------------------------------------------------------------------------- /libresvip/core/exceptions.py: -------------------------------------------------------------------------------- 1 | class InvalidFileTypeError(Exception): 2 | pass 3 | 4 | 5 | class UnsupportedProjectVersionError(InvalidFileTypeError): 6 | pass 7 | 8 | 9 | class NoTrackError(Exception): 10 | pass 11 | 12 | 13 | class NotesOverlappedError(Exception): 14 | pass 15 | 16 | 17 | class ParamsError(Exception): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/core/lyric_phoneme/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /libresvip/core/lyric_phoneme/japanese/__init__.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | 3 | from wanakana.japanese import ( 4 | is_kana, 5 | is_romaji, 6 | to_hiragana, 7 | to_katakana, 8 | ) 9 | from wanakana.japanese import to_romaji as _to_romaji 10 | 11 | __all__ = [ 12 | "is_kana", 13 | "is_romaji", 14 | "to_hiragana", 15 | "to_katakana", 16 | "to_romaji", 17 | ] 18 | 19 | 20 | def to_romaji(word: str, **kwargs: Any) -> str: 21 | kwargs.setdefault("custom_romaji_mapping", {"っ": "cl"}) 22 | return _to_romaji(word, **kwargs) if word else "" 23 | -------------------------------------------------------------------------------- /libresvip/core/lyric_phoneme/korean/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/core/lyric_phoneme/korean/__init__.py -------------------------------------------------------------------------------- /libresvip/extension/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/extension/__init__.py -------------------------------------------------------------------------------- /libresvip/gui/__init__.py: -------------------------------------------------------------------------------- 1 | from importlib.resources import as_file 2 | 3 | from PySide6 import QtCore 4 | 5 | from libresvip.core.constants import res_dir 6 | 7 | 8 | def init_resources() -> None: 9 | with as_file(res_dir / "resources.rcc") as rcc_file: 10 | QtCore.QResource.registerResource(str(rcc_file)) 11 | 12 | 13 | def cleanup_resources() -> None: 14 | with as_file(res_dir / "resources.rcc") as rcc_file: 15 | QtCore.QResource.unregisterResource(str(rcc_file)) 16 | 17 | 18 | init_resources() 19 | -------------------------------------------------------------------------------- /libresvip/gui/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/gui/models/__init__.py -------------------------------------------------------------------------------- /libresvip/gui/models/base_task.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import dataclasses 4 | 5 | 6 | @dataclasses.dataclass 7 | class BaseTask: 8 | name: str | None = "" 9 | path: str | None = "" 10 | stem: str | None = "" 11 | ext: str | None = "" 12 | tmp_path: str | None = "" 13 | 14 | running: bool | None = False 15 | success: bool | None = None 16 | error: str | None = "" 17 | warning: str | None = "" 18 | child_tasks: list[BaseTask] = dataclasses.field(default_factory=list) 19 | -------------------------------------------------------------------------------- /libresvip/gui/modules/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = [ 2 | "Clipboard", 3 | "ConfigItems", 4 | "FramelessWindow", 5 | "IconicFontLoader", 6 | "LocaleSwitcher", 7 | "TaskManager", 8 | "app", 9 | "app_close_event", 10 | "event_loop", 11 | "qml_engine", 12 | ] 13 | 14 | import platform 15 | import sys 16 | 17 | from .application import app, app_close_event, event_loop, qml_engine 18 | from .clipboard import Clipboard 19 | from .config_items import ConfigItems 20 | from .font_loader import IconicFontLoader 21 | from .locale_switcher import LocaleSwitcher 22 | from .log_handler import enable_log_handler 23 | from .task_manager import TaskManager 24 | 25 | if sys.platform == "win32": 26 | from libresvip.gui.modules.frameless_window_win32 import FramelessWindow 27 | else: 28 | from libresvip.gui.modules.frameless_window import FramelessWindow 29 | 30 | enable_log_handler() 31 | if platform.python_implementation() == "CPython": 32 | __all__ += ["Notifier"] 33 | 34 | from .notifier import Notifier 35 | -------------------------------------------------------------------------------- /libresvip/gui/modules/clipboard.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtCore import QObject, Slot 2 | from PySide6.QtQml import QmlElement 3 | 4 | from __feature__ import snake_case, true_property # isort:skip # noqa: F401 5 | 6 | from libresvip.utils.text import shorten_error_message 7 | 8 | from .application import app 9 | 10 | QML_IMPORT_NAME = "LibreSVIP" 11 | QML_IMPORT_MAJOR_VERSION = 1 12 | QML_IMPORT_MINOR_VERSION = 0 13 | 14 | 15 | @QmlElement 16 | class Clipboard(QObject): 17 | def __init__(self, parent: QObject | None = None) -> None: 18 | super().__init__(parent=parent) 19 | self.clipboard = app.clipboard() 20 | 21 | @Slot(str, result=bool) 22 | def set_clipboard(self, text: str) -> bool: 23 | self.clipboard.set_text(text) 24 | return True 25 | 26 | @Slot(str, result=str) 27 | def shorten_error_message(self, msg: str) -> str: 28 | return shorten_error_message(msg) 29 | -------------------------------------------------------------------------------- /libresvip/gui/modules/font_loader.py: -------------------------------------------------------------------------------- 1 | import functools 2 | 3 | from fonticon_mdi7 import MDI7 4 | from PySide6.QtCore import QObject, QUrl, Slot 5 | from PySide6.QtQml import QmlElement 6 | 7 | from __feature__ import snake_case, true_property # isort:skip # noqa: F401 8 | 9 | QML_IMPORT_NAME = "LibreSVIP" 10 | QML_IMPORT_MAJOR_VERSION = 1 11 | QML_IMPORT_MINOR_VERSION = 0 12 | 13 | 14 | @QmlElement 15 | class IconicFontLoader(QObject): 16 | @Slot(str, result=str) 17 | def font_path(self, font_family: str) -> str: 18 | return QUrl.from_local_file(MDI7.__font_file__).to_string() 19 | 20 | @Slot(str, result=str) 21 | @functools.cache 22 | def icon(self, icon_name: str) -> str: 23 | font_family, _, icon_name = icon_name.partition(".") 24 | icon_name = icon_name.replace("-", "_") 25 | return getattr(MDI7, icon_name, "").partition(".")[-1] 26 | -------------------------------------------------------------------------------- /libresvip/gui/modules/url_opener.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from PySide6.QtCore import QUrl 4 | from PySide6.QtGui import QDesktopServices 5 | 6 | from __feature__ import snake_case, true_property # isort:skip # noqa: F401 7 | 8 | 9 | def open_path(path: pathlib.Path) -> None: 10 | output_url = QUrl.from_local_file(path) 11 | QDesktopServices.open_url(output_url) 12 | 13 | 14 | def open_url(url: str) -> None: 15 | QDesktopServices.open_url(QUrl(url)) 16 | -------------------------------------------------------------------------------- /libresvip/gui/modules/vendor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/gui/modules/vendor/__init__.py -------------------------------------------------------------------------------- /libresvip/gui/modules/vendor/qasync/_common.py: -------------------------------------------------------------------------------- 1 | # © 2018 Gerard Marull-Paretas 2 | # © 2014 Mark Harviston 3 | # © 2014 Arve Knudsen 4 | # BSD License 5 | 6 | """Mostly irrelevant, but useful utilities common to UNIX and Windows.""" 7 | 8 | import selectors 9 | 10 | from PySide6 import QtCore 11 | 12 | _fileno = selectors._fileobj_to_fd # type: ignore[attr-defined] 13 | 14 | 15 | def make_signaller(*types: type) -> QtCore.QObject: 16 | class Signaller(QtCore.QObject): 17 | signal = QtCore.Signal(*types) 18 | 19 | return Signaller() 20 | -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pitch_shift/__init__.py -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/locales/de_DE/LC_MESSAGES/pitch_shift.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pitch_shift/locales/de_DE/LC_MESSAGES/pitch_shift.mo -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/locales/de_DE/LC_MESSAGES/pitch_shift.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/middlewares/pitch_shift/pitch_shift.po\n" 8 | "X-Crowdin-File-ID: 100\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-17 09:01\n" 14 | 15 | msgid "Key transition of pitch" 16 | msgstr "" 17 | 18 | msgid "Pitch shift in semitones." 19 | msgstr "" 20 | 21 | msgid "Pitch Shift" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/locales/ja_JP/LC_MESSAGES/pitch_shift.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pitch_shift/locales/ja_JP/LC_MESSAGES/pitch_shift.mo -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/locales/ja_JP/LC_MESSAGES/pitch_shift.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/middlewares/pitch_shift/pitch_shift.po\n" 8 | "X-Crowdin-File-ID: 100\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "Key transition of pitch" 16 | msgstr "" 17 | 18 | msgid "Pitch shift in semitones." 19 | msgstr "" 20 | 21 | msgid "Pitch Shift" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/locales/zh_CN/LC_MESSAGES/pitch_shift.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pitch_shift/locales/zh_CN/LC_MESSAGES/pitch_shift.mo -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/locales/zh_CN/LC_MESSAGES/pitch_shift.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/middlewares/pitch_shift/pitch_shift.po\n" 8 | "X-Crowdin-File-ID: 100\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "Key transition of pitch" 16 | msgstr "音高变化量" 17 | 18 | msgid "Pitch shift in semitones." 19 | msgstr "音高变化(以半音为单位)。" 20 | 21 | msgid "Pitch Shift" 22 | msgstr "音高变调" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.utils.translation import gettext_lazy as _ 4 | 5 | 6 | class ProcessOptions(BaseModel): 7 | key: int = Field( 8 | default=0, 9 | title=_("Key transition of pitch"), 10 | description=_("Pitch shift in semitones."), 11 | ) 12 | -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/pitch_shift.po: -------------------------------------------------------------------------------- 1 | msgid "Key transition of pitch" 2 | msgstr "" 3 | 4 | msgid "Pitch shift in semitones." 5 | msgstr "" 6 | 7 | msgid "Pitch Shift" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/middlewares/pitch_shift/pitch_shift.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = Pitch Shift 3 | module = pitch_shift 4 | 5 | [Documentation] 6 | Author = SoulMelody 7 | Version = 1.0.0 8 | Website = https://space.bilibili.com/175862486 9 | abbreviation = pitch_shift -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/project_zoom/__init__.py -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/locales/de_DE/LC_MESSAGES/project_zoom.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/project_zoom/locales/de_DE/LC_MESSAGES/project_zoom.mo -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/locales/ja_JP/LC_MESSAGES/project_zoom.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/project_zoom/locales/ja_JP/LC_MESSAGES/project_zoom.mo -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/locales/zh_CN/LC_MESSAGES/project_zoom.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/project_zoom/locales/zh_CN/LC_MESSAGES/project_zoom.mo -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/project_zoom.po: -------------------------------------------------------------------------------- 1 | msgid "None" 2 | msgstr "" 3 | 4 | msgid "1/2" 5 | msgstr "" 6 | 7 | msgid "5/3" 8 | msgstr "" 9 | 10 | msgid "3/2" 11 | msgstr "" 12 | 13 | msgid "6/5" 14 | msgstr "" 15 | 16 | msgid "4/5" 17 | msgstr "" 18 | 19 | msgid "3/5" 20 | msgstr "" 21 | 22 | msgid "3/4" 23 | msgstr "" 24 | 25 | msgid "Zoom factor" 26 | msgstr "" 27 | 28 | msgid "" 29 | "Change Bpm and notes in parallel so that the actual singing speed is " 30 | "kept. For example, with factor 2, 60 bpm becomes 120 bpm and all notes " 31 | "become twice the length" 32 | msgstr "" 33 | 34 | msgid "Project Zoom" 35 | msgstr "" 36 | 37 | msgid "Zoom in/out project" 38 | msgstr "" 39 | 40 | msgid "Sder Colin" 41 | msgstr "" 42 | 43 | -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/project_zoom.py: -------------------------------------------------------------------------------- 1 | import fractions 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | from libresvip.model.reset_time_axis import zoom_project 6 | 7 | from .options import ProcessOptions 8 | 9 | 10 | class ProjectZoomMiddleware(plugin_base.MiddlewareBase): 11 | def process(self, project: Project, options: ProcessOptions) -> Project: 12 | if (zoom_factor := float(fractions.Fraction(options.factor.value))) != 1.0: 13 | return zoom_project(project, zoom_factor) 14 | return project 15 | -------------------------------------------------------------------------------- /libresvip/middlewares/project_zoom/project_zoom.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = Project Zoom 3 | module = project_zoom 4 | 5 | [Documentation] 6 | Author = Sder Colin 7 | Version = 1.0.0 8 | Website = https://sdercolin.github.io/utaformatix3/ 9 | Description = Zoom in/out project 10 | abbreviation = project_zoom -------------------------------------------------------------------------------- /libresvip/middlewares/pronounciation_conversion/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pronounciation_conversion/__init__.py -------------------------------------------------------------------------------- /libresvip/middlewares/pronounciation_conversion/locales/de_DE/LC_MESSAGES/pronounciation_conversion.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pronounciation_conversion/locales/de_DE/LC_MESSAGES/pronounciation_conversion.mo -------------------------------------------------------------------------------- /libresvip/middlewares/pronounciation_conversion/locales/ja_JP/LC_MESSAGES/pronounciation_conversion.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pronounciation_conversion/locales/ja_JP/LC_MESSAGES/pronounciation_conversion.mo -------------------------------------------------------------------------------- /libresvip/middlewares/pronounciation_conversion/locales/zh_CN/LC_MESSAGES/pronounciation_conversion.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/pronounciation_conversion/locales/zh_CN/LC_MESSAGES/pronounciation_conversion.mo -------------------------------------------------------------------------------- /libresvip/middlewares/pronounciation_conversion/pronounciation_conversion.po: -------------------------------------------------------------------------------- 1 | msgid "None" 2 | msgstr "" 3 | 4 | msgid "Hanzi to Pinyin" 5 | msgstr "" 6 | 7 | msgid "Hanzi to Jyutping" 8 | msgstr "" 9 | 10 | msgid "Hangul to Romanization" 11 | msgstr "" 12 | 13 | msgid "Kana to Romaji" 14 | msgstr "" 15 | 16 | msgid "To Hiragana" 17 | msgstr "" 18 | 19 | msgid "To Katakana" 20 | msgstr "" 21 | 22 | msgid "Pronounciation conversion mode" 23 | msgstr "" 24 | 25 | msgid "Convert lyrics to the specified pronounciation format" 26 | msgstr "" 27 | 28 | msgid "Pronounciation Conversion" 29 | msgstr "" 30 | 31 | msgid "For Chinese and Japanese Lyrics" 32 | msgstr "" 33 | 34 | msgid "SoulMelody" 35 | msgstr "" 36 | 37 | -------------------------------------------------------------------------------- /libresvip/middlewares/pronounciation_conversion/pronounciation_conversion.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = Pronounciation Conversion 3 | module = pronounciation_conversion 4 | 5 | [Documentation] 6 | Author = SoulMelody 7 | Version = 1.0.0 8 | Website = https://space.bilibili.com/175862486 9 | Description = For Chinese and Japanese Lyrics 10 | abbreviation = pronounciation_conversion -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/remove_short_silences/__init__.py -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/locales/de_DE/LC_MESSAGES/remove_short_silences.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/remove_short_silences/locales/de_DE/LC_MESSAGES/remove_short_silences.mo -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/locales/ja_JP/LC_MESSAGES/remove_short_silences.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/remove_short_silences/locales/ja_JP/LC_MESSAGES/remove_short_silences.mo -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/locales/zh_CN/LC_MESSAGES/remove_short_silences.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/remove_short_silences/locales/zh_CN/LC_MESSAGES/remove_short_silences.mo -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/remove_short_silences.po: -------------------------------------------------------------------------------- 1 | msgid "Zero length note" 2 | msgstr "" 3 | 4 | msgid "1/8 note" 5 | msgstr "" 6 | 7 | msgid "1/16 note" 8 | msgstr "" 9 | 10 | msgid "1/32 note" 11 | msgstr "" 12 | 13 | msgid "1/64 note" 14 | msgstr "" 15 | 16 | msgid "1/128 note" 17 | msgstr "" 18 | 19 | msgid "Max length to be processed (exclusive)" 20 | msgstr "" 21 | 22 | msgid "Extend note to fill the short silences between it and its next note" 23 | msgstr "" 24 | 25 | msgid "Remove Short Silences" 26 | msgstr "" 27 | 28 | msgid "Fill short rests" 29 | msgstr "" 30 | 31 | msgid "SoulMelody" 32 | msgstr "" 33 | 34 | -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/remove_short_silences.py: -------------------------------------------------------------------------------- 1 | import fractions 2 | 3 | import more_itertools 4 | 5 | from libresvip.extension import base as plugin_base 6 | from libresvip.model.base import Project, SingingTrack 7 | 8 | from .options import ProcessOptions 9 | 10 | 11 | class RemoveShortSilencesMiddleware(plugin_base.MiddlewareBase): 12 | def process(self, project: Project, options: ProcessOptions) -> Project: 13 | first_bar_tick = round(project.time_signature_list[0].bar_length()) 14 | if min_silence_length := fractions.Fraction(options.fill_threshold.value): 15 | silence_threshold = first_bar_tick * min_silence_length 16 | for track in project.track_list: 17 | if isinstance(track, SingingTrack): 18 | for prev_note, note in more_itertools.pairwise(track.note_list): 19 | if 0 < note.start_pos - prev_note.end_pos < silence_threshold: 20 | prev_note.length = note.start_pos - prev_note.start_pos 21 | return project 22 | -------------------------------------------------------------------------------- /libresvip/middlewares/remove_short_silences/remove_short_silences.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = Remove Short Silences 3 | module = remove_short_silences 4 | 5 | [Documentation] 6 | Author = SoulMelody 7 | Version = 1.0.0 8 | Website = https://space.bilibili.com/175862486 9 | Description = Fill short rests 10 | abbreviation = remove_short_silences -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/replace_lyric/__init__.py -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/locales/de_DE/LC_MESSAGES/replace_lyric.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/replace_lyric/locales/de_DE/LC_MESSAGES/replace_lyric.mo -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/locales/de_DE/LC_MESSAGES/replace_lyric.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/middlewares/replace_lyric/replace_lyric.po\n" 8 | "X-Crowdin-File-ID: 108\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-17 09:01\n" 14 | 15 | msgid "Name of lyric replacement preset" 16 | msgstr "" 17 | 18 | msgid "Replace lyrics" 19 | msgstr "" 20 | 21 | msgid "Replace lyrics using preset rules. You can customize the lyrics replacement rules in the program configuration page" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/locales/ja_JP/LC_MESSAGES/replace_lyric.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/replace_lyric/locales/ja_JP/LC_MESSAGES/replace_lyric.mo -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/locales/ja_JP/LC_MESSAGES/replace_lyric.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/middlewares/replace_lyric/replace_lyric.po\n" 8 | "X-Crowdin-File-ID: 108\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "Name of lyric replacement preset" 16 | msgstr "" 17 | 18 | msgid "Replace lyrics" 19 | msgstr "" 20 | 21 | msgid "Replace lyrics using preset rules. You can customize the lyrics replacement rules in the program configuration page" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/locales/zh_CN/LC_MESSAGES/replace_lyric.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/middlewares/replace_lyric/locales/zh_CN/LC_MESSAGES/replace_lyric.mo -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/locales/zh_CN/LC_MESSAGES/replace_lyric.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/middlewares/replace_lyric/replace_lyric.po\n" 8 | "X-Crowdin-File-ID: 108\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "Name of lyric replacement preset" 16 | msgstr "歌词替换预设的名称" 17 | 18 | msgid "Replace lyrics" 19 | msgstr "替换歌词" 20 | 21 | msgid "Replace lyrics using preset rules. You can customize the lyrics replacement rules in the program configuration page" 22 | msgstr "使用预设规则对歌词进行替换。你可以在程序配置页面中编辑歌词替换规则" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.utils.translation import gettext_lazy as _ 4 | 5 | 6 | class ProcessOptions(BaseModel): 7 | lyric_replacement_preset_name: str = Field( 8 | default="default", 9 | title=_("Name of lyric replacement preset"), 10 | ) 11 | -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/replace_lyric.po: -------------------------------------------------------------------------------- 1 | msgid "Name of lyric replacement preset" 2 | msgstr "" 3 | 4 | msgid "Replace lyrics" 5 | msgstr "" 6 | 7 | msgid "" 8 | "Replace lyrics using preset rules. You can customize the lyrics " 9 | "replacement rules in the program configuration page" 10 | msgstr "" 11 | 12 | msgid "SoulMelody" 13 | msgstr "" 14 | 15 | -------------------------------------------------------------------------------- /libresvip/middlewares/replace_lyric/replace_lyric.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = Replace lyrics 3 | module = replace_lyric 4 | 5 | [Documentation] 6 | Author = SoulMelody 7 | Version = 1.0.0 8 | Website = https://space.bilibili.com/175862486 9 | Description = Replace lyrics using preset rules. You can customize the lyrics replacement rules in the program configuration page 10 | abbreviation = replace_lyric -------------------------------------------------------------------------------- /libresvip/mobile/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/mobile/__init__.py -------------------------------------------------------------------------------- /libresvip/model/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/model/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/acep/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/acep/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/acep/color_pool.py: -------------------------------------------------------------------------------- 1 | _colors = [ 2 | "#b17ef3", 3 | "#da9de3", 4 | "#dd88d5", 5 | "#f57db7", 6 | "#dd8585", 7 | "#ebac99", 8 | "#f4a070", 9 | "#f1c970", 10 | "#c0cf63", 11 | "#99f07b", 12 | "#70d4b1", 13 | "#91bcdc", # start 14 | "#96afef", 15 | "#979ae4", 16 | ] 17 | 18 | 19 | def count_color() -> int: 20 | return len(_colors) 21 | 22 | 23 | def get_color(index: int) -> str: 24 | return _colors[index % len(_colors)] 25 | -------------------------------------------------------------------------------- /libresvip/plugins/acep/enums.py: -------------------------------------------------------------------------------- 1 | # mypy: disable-error-code="misc" 2 | from enum import Enum 3 | from typing import Annotated 4 | 5 | from pydantic import Field 6 | 7 | from libresvip.utils.translation import gettext_lazy as _ 8 | 9 | 10 | class AcepLyricsLanguage(Enum): 11 | CHINESE: Annotated[ 12 | str, 13 | Field( 14 | title=_("Chinese"), 15 | ), 16 | ] = "CHN" 17 | JAPANESE: Annotated[ 18 | str, 19 | Field( 20 | title=_("Japanese"), 21 | ), 22 | ] = "JPN" 23 | ENGLISH: Annotated[ 24 | str, 25 | Field( 26 | title=_("English"), 27 | ), 28 | ] = "ENG" 29 | SPANISH: Annotated[ 30 | str, 31 | Field( 32 | title=_("Spanish"), 33 | ), 34 | ] = "SPA" 35 | -------------------------------------------------------------------------------- /libresvip/plugins/acep/locales/de_DE/LC_MESSAGES/acep.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/acep/locales/de_DE/LC_MESSAGES/acep.mo -------------------------------------------------------------------------------- /libresvip/plugins/acep/locales/ja_JP/LC_MESSAGES/acep.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/acep/locales/ja_JP/LC_MESSAGES/acep.mo -------------------------------------------------------------------------------- /libresvip/plugins/acep/locales/zh_CN/LC_MESSAGES/acep.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/acep/locales/zh_CN/LC_MESSAGES/acep.mo -------------------------------------------------------------------------------- /libresvip/plugins/aisp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/aisp/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/aisp/aisp.po: -------------------------------------------------------------------------------- 1 | msgid "AISingers" 2 | msgstr "" 3 | 4 | msgid "AISingers Studio project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for AISingers Studio project file" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/aisp/locales/de_DE/LC_MESSAGES/aisp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/aisp/locales/de_DE/LC_MESSAGES/aisp.mo -------------------------------------------------------------------------------- /libresvip/plugins/aisp/locales/de_DE/LC_MESSAGES/aisp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/aisp/aisp.po\n" 8 | "X-Crowdin-File-ID: 112\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "AISingers" 16 | msgstr "" 17 | 18 | msgid "AISingers Studio project file" 19 | msgstr "AISingers Studio Projektdatei" 20 | 21 | msgid "Conversion plugin for AISingers Studio project file" 22 | msgstr "Konvertierungs-Plugin für AISingers Studio Projektdateien" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/aisp/locales/ja_JP/LC_MESSAGES/aisp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/aisp/locales/ja_JP/LC_MESSAGES/aisp.mo -------------------------------------------------------------------------------- /libresvip/plugins/aisp/locales/ja_JP/LC_MESSAGES/aisp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/aisp/aisp.po\n" 8 | "X-Crowdin-File-ID: 112\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "AISingers" 16 | msgstr "" 17 | 18 | msgid "AISingers Studio project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for AISingers Studio project file" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/aisp/locales/zh_CN/LC_MESSAGES/aisp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/aisp/locales/zh_CN/LC_MESSAGES/aisp.mo -------------------------------------------------------------------------------- /libresvip/plugins/aisp/locales/zh_CN/LC_MESSAGES/aisp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/aisp/aisp.po\n" 8 | "X-Crowdin-File-ID: 112\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "AISingers" 16 | msgstr "" 17 | 18 | msgid "AISingers Studio project file" 19 | msgstr "AISingers Studio 工程文件" 20 | 21 | msgid "Conversion plugin for AISingers Studio project file" 22 | msgstr "AISingers Studio 工程文件转换插件" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/aisp/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnablePitchImportationMixin, 11 | EnableInstrumentalTrackImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/ass/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ass/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ass/ass_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .ass_generator import AssGenerator 7 | from .options import OutputOptions 8 | 9 | 10 | class AssConverter(plugin_base.WriteOnlyConverterBase): 11 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 12 | ssa_obj = AssGenerator(options).generate_project(project) 13 | path.write_bytes(ssa_obj.to_string("ass").encode(options.encoding)) 14 | -------------------------------------------------------------------------------- /libresvip/plugins/ass/locales/de_DE/LC_MESSAGES/ass.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ass/locales/de_DE/LC_MESSAGES/ass.mo -------------------------------------------------------------------------------- /libresvip/plugins/ass/locales/ja_JP/LC_MESSAGES/ass.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ass/locales/ja_JP/LC_MESSAGES/ass.mo -------------------------------------------------------------------------------- /libresvip/plugins/ass/locales/zh_CN/LC_MESSAGES/ass.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ass/locales/zh_CN/LC_MESSAGES/ass.mo -------------------------------------------------------------------------------- /libresvip/plugins/ccs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ccs/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ccs/ccs.po: -------------------------------------------------------------------------------- 1 | msgid "CeVIO" 2 | msgstr "" 3 | 4 | msgid "CeVIO Creative Studio Project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for CeVIO Creative Studio project file" 8 | msgstr "" 9 | 10 | msgid "Sder Colin" 11 | msgstr "" 12 | 13 | msgid "Unsupported lyric: " 14 | msgstr "" 15 | 16 | msgid "Pitch value is out of bounds" 17 | msgstr "" 18 | 19 | msgid "Default Singer Name" 20 | msgstr "" 21 | 22 | msgid "Default Voicebank ID" 23 | msgstr "" 24 | 25 | msgid "Default Voicebank Version" 26 | msgstr "" 27 | 28 | -------------------------------------------------------------------------------- /libresvip/plugins/ccs/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | DEFAULT_PHONEME: Final[str] = "r,a" 4 | TIME_UNIT_AS_TICKS_PER_BPM: Final[float] = 4.8 / 120 5 | TEMP_VALUE_AS_NULL: Final[float] = -1.0 6 | OCTAVE_OFFSET: Final[int] = -1 7 | FIXED_MEASURE_PREFIX: Final[int] = 1 8 | TICK_RATE: Final[float] = 2.0 9 | MIN_DATA_LENGTH: Final[int] = 500 10 | -------------------------------------------------------------------------------- /libresvip/plugins/ccs/locales/de_DE/LC_MESSAGES/ccs.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ccs/locales/de_DE/LC_MESSAGES/ccs.mo -------------------------------------------------------------------------------- /libresvip/plugins/ccs/locales/ja_JP/LC_MESSAGES/ccs.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ccs/locales/ja_JP/LC_MESSAGES/ccs.mo -------------------------------------------------------------------------------- /libresvip/plugins/ccs/locales/ja_JP/LC_MESSAGES/ccs.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ccs/ccs.po\n" 8 | "X-Crowdin-File-ID: 116\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "CeVIO" 16 | msgstr "" 17 | 18 | msgid "CeVIO Creative Studio Project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for CeVIO Creative Studio project file" 22 | msgstr "" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | msgid "Unsupported lyric: " 28 | msgstr "" 29 | 30 | msgid "Pitch value is out of bounds" 31 | msgstr "" 32 | 33 | msgid "Default Singer Name" 34 | msgstr "" 35 | 36 | msgid "Default Voicebank ID" 37 | msgstr "" 38 | 39 | msgid "Default Voicebank Version" 40 | msgstr "" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ccs/locales/zh_CN/LC_MESSAGES/ccs.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ccs/locales/zh_CN/LC_MESSAGES/ccs.mo -------------------------------------------------------------------------------- /libresvip/plugins/ccs/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | from libresvip.utils.translation import gettext_lazy as _ 8 | 9 | 10 | class InputOptions( 11 | EnableInstrumentalTrackImportationMixin, 12 | EnablePitchImportationMixin, 13 | BaseModel, 14 | ): 15 | pass 16 | 17 | 18 | class OutputOptions(BaseModel): 19 | default_singer_name: str = Field("さとうささら", title=_("Default Singer Name")) 20 | default_singer_id: str = Field("A", title=_("Default Voicebank ID")) 21 | default_singer_version: str = Field("1.0.0", title=_("Default Voicebank Version")) 22 | -------------------------------------------------------------------------------- /libresvip/plugins/ds/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ds/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ds/locales/de_DE/LC_MESSAGES/ds.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ds/locales/de_DE/LC_MESSAGES/ds.mo -------------------------------------------------------------------------------- /libresvip/plugins/ds/locales/ja_JP/LC_MESSAGES/ds.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ds/locales/ja_JP/LC_MESSAGES/ds.mo -------------------------------------------------------------------------------- /libresvip/plugins/ds/locales/zh_CN/LC_MESSAGES/ds.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ds/locales/zh_CN/LC_MESSAGES/ds.mo -------------------------------------------------------------------------------- /libresvip/plugins/ds/utils/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /libresvip/plugins/ds/utils/lyric_util.py: -------------------------------------------------------------------------------- 1 | from retrie.retrie import Blacklist 2 | 3 | symbols_blacklist = Blacklist([",", ".", "?", "!", ",", "。", "?", "!"], match_substrings=True) 4 | 5 | 6 | def get_symbol_removed_lyric(lyric: str) -> str: 7 | if len(lyric) > 1: 8 | lyric = symbols_blacklist.cleanse_text(lyric) 9 | return lyric 10 | -------------------------------------------------------------------------------- /libresvip/plugins/ds/utils/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ds/utils/models/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ds/utils/models/ds_param_curve.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | from .ds_param_node import DsParamNode 4 | 5 | 6 | @dataclass 7 | class DsParamCurve: 8 | step_size: float = 0.005 9 | point_list: list[DsParamNode] | None = None 10 | -------------------------------------------------------------------------------- /libresvip/plugins/ds/utils/models/ds_param_node.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass 5 | class DsParamNode: 6 | time: float = 0.0 7 | value: float = 0.0 8 | -------------------------------------------------------------------------------- /libresvip/plugins/ds/utils/phoneme_dict.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import io 3 | from importlib.resources import files 4 | 5 | from libresvip.utils.translation import gettext_lazy as _ 6 | 7 | 8 | def get_opencpop_dict(dict_name: str, g2p: bool = True) -> dict[str, str]: 9 | opencpop_dict = {} 10 | dict_dir = files("libresvip.plugins.ds") / "dicts" 11 | if (dict_content := (dict_dir / f"{dict_name}.txt").read_text(encoding="utf-8")) is None: 12 | msg = _("Cannot find dict.") 13 | raise FileNotFoundError(msg) 14 | reader = csv.DictReader( 15 | io.StringIO(dict_content), 16 | delimiter="\t", 17 | fieldnames=["pinyin", "phone"], 18 | ) 19 | for row in reader: 20 | if g2p: 21 | opencpop_dict[row["pinyin"]] = row["phone"] 22 | else: 23 | opencpop_dict[row["phone"]] = row["pinyin"] 24 | return opencpop_dict 25 | -------------------------------------------------------------------------------- /libresvip/plugins/dv/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/dv/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/dv/deepvocal_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .dv_generator import DeepVocalGenerator 7 | from .dv_parser import DeepVocalParser 8 | from .model import dv_project_struct 9 | from .options import InputOptions, OutputOptions 10 | 11 | 12 | class DeepVocalConverter(plugin_base.SVSConverterBase): 13 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 14 | parser = DeepVocalParser(options) 15 | dv_project = dv_project_struct.parse(path.read_bytes()) 16 | return parser.parse_project(dv_project) 17 | 18 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 19 | dv_project = DeepVocalGenerator(options).generate_project(project) 20 | dv_content = dv_project_struct.build(dv_project) 21 | path.write_bytes(dv_content) 22 | -------------------------------------------------------------------------------- /libresvip/plugins/dv/dv.po: -------------------------------------------------------------------------------- 1 | msgid "DeepVocal" 2 | msgstr "" 3 | 4 | msgid "DeepVocal project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for dv file" 8 | msgstr "" 9 | 10 | msgid "Oxygen Dioxide" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/dv/locales/de_DE/LC_MESSAGES/dv.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/dv/locales/de_DE/LC_MESSAGES/dv.mo -------------------------------------------------------------------------------- /libresvip/plugins/dv/locales/de_DE/LC_MESSAGES/dv.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/dv/dv.po\n" 8 | "X-Crowdin-File-ID: 120\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "DeepVocal" 16 | msgstr "" 17 | 18 | msgid "DeepVocal project file" 19 | msgstr "DeepVocal Projektdatei" 20 | 21 | msgid "Conversion plugin for dv file" 22 | msgstr "Konvertierungs-Plugin für dv-Dateien" 23 | 24 | msgid "Oxygen Dioxide" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/dv/locales/ja_JP/LC_MESSAGES/dv.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/dv/locales/ja_JP/LC_MESSAGES/dv.mo -------------------------------------------------------------------------------- /libresvip/plugins/dv/locales/ja_JP/LC_MESSAGES/dv.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/dv/dv.po\n" 8 | "X-Crowdin-File-ID: 120\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "DeepVocal" 16 | msgstr "" 17 | 18 | msgid "DeepVocal project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for dv file" 22 | msgstr "" 23 | 24 | msgid "Oxygen Dioxide" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/dv/locales/zh_CN/LC_MESSAGES/dv.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/dv/locales/zh_CN/LC_MESSAGES/dv.mo -------------------------------------------------------------------------------- /libresvip/plugins/dv/locales/zh_CN/LC_MESSAGES/dv.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/dv/dv.po\n" 8 | "X-Crowdin-File-ID: 120\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "DeepVocal" 16 | msgstr "" 17 | 18 | msgid "DeepVocal project file" 19 | msgstr "DeepVocal工程文件" 20 | 21 | msgid "Conversion plugin for dv file" 22 | msgstr "dv 格式转换插件。" 23 | 24 | msgid "Oxygen Dioxide" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/dv/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/gj/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/gj/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/gj/gj.po: -------------------------------------------------------------------------------- 1 | msgid "gjgj" 2 | msgstr "" 3 | 4 | msgid "Gejigeji project file" 5 | msgstr "" 6 | 7 | msgid "" 8 | "Conversion plugin for Gejigeji project file.\n" 9 | "Only Gejigeji v2.0 spec is supported." 10 | msgstr "" 11 | 12 | msgid "FlutyDeer" 13 | msgstr "" 14 | 15 | msgid "Unsupported pinyin:" 16 | msgstr "" 17 | 18 | msgid "Average sampling interval for the volume parameter" 19 | msgstr "" 20 | 21 | msgid "" 22 | "The unit is Tick. The larger the value, the smoother the editor; the " 23 | "smaller the value, the more accurate the volume parameter." 24 | msgstr "" 25 | 26 | msgid "Default singer" 27 | msgstr "" 28 | 29 | -------------------------------------------------------------------------------- /libresvip/plugins/gj/locales/de_DE/LC_MESSAGES/gj.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/gj/locales/de_DE/LC_MESSAGES/gj.mo -------------------------------------------------------------------------------- /libresvip/plugins/gj/locales/ja_JP/LC_MESSAGES/gj.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/gj/locales/ja_JP/LC_MESSAGES/gj.mo -------------------------------------------------------------------------------- /libresvip/plugins/gj/locales/zh_CN/LC_MESSAGES/gj.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/gj/locales/zh_CN/LC_MESSAGES/gj.mo -------------------------------------------------------------------------------- /libresvip/plugins/gj/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | EnableVolumeImportationMixin, 7 | ) 8 | from libresvip.utils.translation import gettext_lazy as _ 9 | 10 | 11 | class InputOptions( 12 | EnableInstrumentalTrackImportationMixin, 13 | EnablePitchImportationMixin, 14 | EnableVolumeImportationMixin, 15 | BaseModel, 16 | ): 17 | pass 18 | 19 | 20 | class OutputOptions(BaseModel): 21 | down_sample: int = Field( 22 | default=32, 23 | title=_("Average sampling interval for the volume parameter"), 24 | description=_( 25 | "The unit is Tick. The larger the value, the smoother the editor; the smaller the value, the more accurate the volume parameter." 26 | ), 27 | ) 28 | singer: str = Field( 29 | default="扇宝", 30 | title=_("Default singer"), 31 | ) 32 | -------------------------------------------------------------------------------- /libresvip/plugins/gj/singers.py: -------------------------------------------------------------------------------- 1 | from bidict import bidict 2 | 3 | DEFAULT_SINGER = "扇宝" 4 | DEFAULT_SINGER_ID = "513singer" 5 | 6 | 7 | singer2id = bidict( 8 | { 9 | "扇宝": "513singer", 10 | "SING-林嘉慧": "514singer", 11 | "Rocky": "881singer", 12 | "杨超越": "ycysinger", 13 | }, 14 | ) 15 | 16 | id2singer = singer2id.inverse 17 | -------------------------------------------------------------------------------- /libresvip/plugins/json/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/json/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/json/json.po: -------------------------------------------------------------------------------- 1 | msgid "JsonSvip" 2 | msgstr "" 3 | 4 | msgid "OpenSVIP file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for OpenSVIP Model, which is based on json" 8 | msgstr "" 9 | 10 | msgid "yqzhishen" 11 | msgstr "" 12 | 13 | msgid "Generate JSON file with indentation" 14 | msgstr "" 15 | 16 | msgid "" 17 | "The indented format is easier to read and modify, but it will take up a " 18 | "larger file size." 19 | msgstr "" 20 | 21 | -------------------------------------------------------------------------------- /libresvip/plugins/json/locales/de_DE/LC_MESSAGES/json.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/json/locales/de_DE/LC_MESSAGES/json.mo -------------------------------------------------------------------------------- /libresvip/plugins/json/locales/ja_JP/LC_MESSAGES/json.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/json/locales/ja_JP/LC_MESSAGES/json.mo -------------------------------------------------------------------------------- /libresvip/plugins/json/locales/ja_JP/LC_MESSAGES/json.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/json/json.po\n" 8 | "X-Crowdin-File-ID: 124\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "JsonSvip" 16 | msgstr "" 17 | 18 | msgid "OpenSVIP file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for OpenSVIP Model, which is based on json" 22 | msgstr "" 23 | 24 | msgid "yqzhishen" 25 | msgstr "" 26 | 27 | msgid "Generate JSON file with indentation" 28 | msgstr "" 29 | 30 | msgid "The indented format is easier to read and modify, but it will take up a larger file size." 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/json/locales/zh_CN/LC_MESSAGES/json.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/json/locales/zh_CN/LC_MESSAGES/json.mo -------------------------------------------------------------------------------- /libresvip/plugins/json/locales/zh_CN/LC_MESSAGES/json.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/json/json.po\n" 8 | "X-Crowdin-File-ID: 124\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "JsonSvip" 16 | msgstr "" 17 | 18 | msgid "OpenSVIP file" 19 | msgstr "OpenSVIP 文件" 20 | 21 | msgid "Conversion plugin for OpenSVIP Model, which is based on json" 22 | msgstr "OpenSVIP Model 的 JSON 格式转换插件。" 23 | 24 | msgid "yqzhishen" 25 | msgstr "YQ之神" 26 | 27 | msgid "Generate JSON file with indentation" 28 | msgstr "生成带缩进格式的 JSON 文件" 29 | 30 | msgid "The indented format is easier to read and modify, but it will take up a larger file size." 31 | msgstr "缩进格式便于阅读与修改,但会占据较大的文件体积。" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/json/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.utils.translation import gettext_lazy as _ 4 | 5 | 6 | class InputOptions(BaseModel): 7 | pass 8 | 9 | 10 | class OutputOptions(BaseModel): 11 | indented: bool = Field( 12 | default=False, 13 | title=_("Generate JSON file with indentation"), 14 | description=_( 15 | "The indented format is easier to read and modify, but it will take up a larger file size." 16 | ), 17 | ) 18 | -------------------------------------------------------------------------------- /libresvip/plugins/lrc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/lrc/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/lrc/locales/de_DE/LC_MESSAGES/lrc.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/lrc/locales/de_DE/LC_MESSAGES/lrc.mo -------------------------------------------------------------------------------- /libresvip/plugins/lrc/locales/ja_JP/LC_MESSAGES/lrc.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/lrc/locales/ja_JP/LC_MESSAGES/lrc.mo -------------------------------------------------------------------------------- /libresvip/plugins/lrc/locales/zh_CN/LC_MESSAGES/lrc.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/lrc/locales/zh_CN/LC_MESSAGES/lrc.mo -------------------------------------------------------------------------------- /libresvip/plugins/lrc/lrc_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .lrc_generator import LrcGenerator 7 | from .options import OutputOptions 8 | from .template import render_lrc 9 | 10 | 11 | class LrcConverter(plugin_base.WriteOnlyConverterBase): 12 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 13 | lrc_model = LrcGenerator(options).generate_project(project) 14 | render_lrc(lrc_model, path) 15 | -------------------------------------------------------------------------------- /libresvip/plugins/lrc/model.py: -------------------------------------------------------------------------------- 1 | from functools import partial 2 | 3 | from libresvip.model.base import BaseModel 4 | 5 | 6 | class TimeTag(BaseModel): 7 | minute: int 8 | second: int 9 | milisecond: int 10 | 11 | 12 | class LyricLine(BaseModel): 13 | time_tags: list[TimeTag] 14 | lyric: str | None = None 15 | 16 | 17 | class InfoTag(BaseModel): 18 | key: str 19 | value: str 20 | 21 | 22 | class LrcFile(BaseModel): 23 | info_tags: list[InfoTag] 24 | lyric_lines: list[LyricLine] 25 | 26 | 27 | TitleInfoTag = partial(InfoTag, key="ti") 28 | ArtistInfoTag = partial(InfoTag, key="ar") 29 | AlbumInfoTag = partial(InfoTag, key="al") 30 | ByInfoTag = partial(InfoTag, key="by") 31 | OffsetInfoTag = partial(InfoTag, key="offset") 32 | -------------------------------------------------------------------------------- /libresvip/plugins/lrc/template.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from jinja2 import Template 4 | 5 | from .model import LrcFile 6 | 7 | LRC_TEMPLATE = Template( 8 | """\ 9 | {% for info_tag in lrc_model.info_tags %}\ 10 | [{{ info_tag.key }}:{{ info_tag.value }}] 11 | {% endfor %}\ 12 | {% for lyric_line in lrc_model.lyric_lines %}\ 13 | {% for time_tag in lyric_line.time_tags %}\ 14 | [{{ (time_tag.minute).__str__().rjust(2, '0') }}:\ 15 | {{ (time_tag.second).__str__().rjust(2, '0') }}.\ 16 | {{ (time_tag.milisecond).__str__().rjust(3, '0') }}]{% endfor %}\ 17 | {{ lyric_line.lyric }}\ 18 | {% endfor %}""" 19 | ) 20 | 21 | 22 | def render_lrc(lrc_model: LrcFile, output_path: pathlib.Path) -> None: 23 | output_path.write_bytes(LRC_TEMPLATE.render(lrc_model=lrc_model).encode("utf-8")) 24 | -------------------------------------------------------------------------------- /libresvip/plugins/mid/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mid/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/mid/locales/de_DE/LC_MESSAGES/mid.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mid/locales/de_DE/LC_MESSAGES/mid.mo -------------------------------------------------------------------------------- /libresvip/plugins/mid/locales/ja_JP/LC_MESSAGES/mid.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mid/locales/ja_JP/LC_MESSAGES/mid.mo -------------------------------------------------------------------------------- /libresvip/plugins/mid/locales/zh_CN/LC_MESSAGES/mid.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mid/locales/zh_CN/LC_MESSAGES/mid.mo -------------------------------------------------------------------------------- /libresvip/plugins/mid/note_overlap.py: -------------------------------------------------------------------------------- 1 | from operator import attrgetter 2 | 3 | from libresvip.core.time_interval import RangeInterval 4 | from libresvip.model.base import Note 5 | 6 | 7 | def has_overlap(notes: list[Note]) -> bool: 8 | if len(notes) < 2: 9 | return False 10 | notes.sort(key=attrgetter("start_pos")) 11 | interval = RangeInterval() 12 | for note in notes: 13 | if interval.includes(note.start_pos): 14 | return True 15 | interval |= RangeInterval([(note.start_pos, note.end_pos)]) 16 | return False 17 | -------------------------------------------------------------------------------- /libresvip/plugins/mtp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mtp/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/mtp/locales/de_DE/LC_MESSAGES/mtp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mtp/locales/de_DE/LC_MESSAGES/mtp.mo -------------------------------------------------------------------------------- /libresvip/plugins/mtp/locales/de_DE/LC_MESSAGES/mtp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/mtp/mtp.po\n" 8 | "X-Crowdin-File-ID: 130\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "Muta" 16 | msgstr "" 17 | 18 | msgid "Muta project file" 19 | msgstr "Muta-Projektdatei" 20 | 21 | msgid "Conversion plugin for mtp file" 22 | msgstr "Konvertierungs-Plugin für MTP-Dateien" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | msgid "Default Singer Name" 28 | msgstr "Standard-Sängername" 29 | 30 | msgid "The default singer name to use for all tracks" 31 | msgstr "Der Standard-Sängername, der für alle Tracks verwendet werden soll" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/mtp/locales/ja_JP/LC_MESSAGES/mtp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mtp/locales/ja_JP/LC_MESSAGES/mtp.mo -------------------------------------------------------------------------------- /libresvip/plugins/mtp/locales/ja_JP/LC_MESSAGES/mtp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/mtp/mtp.po\n" 8 | "X-Crowdin-File-ID: 130\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "Muta" 16 | msgstr "" 17 | 18 | msgid "Muta project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for mtp file" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | msgid "Default Singer Name" 28 | msgstr "" 29 | 30 | msgid "The default singer name to use for all tracks" 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/mtp/locales/zh_CN/LC_MESSAGES/mtp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/mtp/locales/zh_CN/LC_MESSAGES/mtp.mo -------------------------------------------------------------------------------- /libresvip/plugins/mtp/locales/zh_CN/LC_MESSAGES/mtp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/mtp/mtp.po\n" 8 | "X-Crowdin-File-ID: 130\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "Muta" 16 | msgstr "" 17 | 18 | msgid "Muta project file" 19 | msgstr "Muta工程文件" 20 | 21 | msgid "Conversion plugin for mtp file" 22 | msgstr "mtp 格式转换插件" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | msgid "Default Singer Name" 28 | msgstr "默认歌手名称" 29 | 30 | msgid "The default singer name to use for all tracks" 31 | msgstr "在所有唱歌轨道中使用的默认歌手名称" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/mtp/mtp.po: -------------------------------------------------------------------------------- 1 | msgid "Muta" 2 | msgstr "" 3 | 4 | msgid "Muta project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for mtp file" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | msgid "Default Singer Name" 14 | msgstr "" 15 | 16 | msgid "The default singer name to use for all tracks" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /libresvip/plugins/mtp/muta_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .model import muta_project_struct 7 | from .muta_generator import MutaGenerator 8 | from .muta_parser import MutaParser 9 | from .options import InputOptions, OutputOptions 10 | 11 | 12 | class MutaConverter(plugin_base.SVSConverterBase): 13 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 14 | muta_project = muta_project_struct.parse(path.read_bytes()) 15 | return MutaParser(options).parse_project(muta_project) 16 | 17 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 18 | muta_project = MutaGenerator(options).generate_project(project) 19 | path.write_bytes(muta_project_struct.build(muta_project)) 20 | -------------------------------------------------------------------------------- /libresvip/plugins/mtp/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | from libresvip.utils.translation import gettext_lazy as _ 8 | 9 | 10 | class InputOptions( 11 | EnableInstrumentalTrackImportationMixin, 12 | EnablePitchImportationMixin, 13 | BaseModel, 14 | ): 15 | pass 16 | 17 | 18 | class OutputOptions(BaseModel): 19 | default_singer_name: str = Field( 20 | "嫣汐", 21 | title=_("Default Singer Name"), 22 | description=_("The default singer name to use for all tracks"), 23 | ) 24 | -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/musicxml/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/locales/de_DE/LC_MESSAGES/musicxml.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/musicxml/locales/de_DE/LC_MESSAGES/musicxml.mo -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/locales/de_DE/LC_MESSAGES/musicxml.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/musicxml/musicxml.po\n" 8 | "X-Crowdin-File-ID: 132\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "MusicXML" 16 | msgstr "" 17 | 18 | msgid "MusicXML file" 19 | msgstr "MusicXML-Datei" 20 | 21 | msgid "Conversion plugin for MusicXML Score file" 22 | msgstr "Konvertierungs-Plugin für MusicXML-Notendateien" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/locales/ja_JP/LC_MESSAGES/musicxml.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/musicxml/locales/ja_JP/LC_MESSAGES/musicxml.mo -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/locales/ja_JP/LC_MESSAGES/musicxml.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/musicxml/musicxml.po\n" 8 | "X-Crowdin-File-ID: 132\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "MusicXML" 16 | msgstr "" 17 | 18 | msgid "MusicXML file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for MusicXML Score file" 22 | msgstr "" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/locales/zh_CN/LC_MESSAGES/musicxml.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/musicxml/locales/zh_CN/LC_MESSAGES/musicxml.mo -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/locales/zh_CN/LC_MESSAGES/musicxml.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/musicxml/musicxml.po\n" 8 | "X-Crowdin-File-ID: 132\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "MusicXML" 16 | msgstr "" 17 | 18 | msgid "MusicXML file" 19 | msgstr "MusicXML 文件" 20 | 21 | msgid "Conversion plugin for MusicXML Score file" 22 | msgstr "MusicXML 乐谱文件转换插件" 23 | 24 | msgid "Sder Colin" 25 | msgstr "科林" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/musicxml/models/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/musicxml.po: -------------------------------------------------------------------------------- 1 | msgid "MusicXML" 2 | msgstr "" 3 | 4 | msgid "MusicXML file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for MusicXML Score file" 8 | msgstr "" 9 | 10 | msgid "Sder Colin" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/musicxml/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | 4 | class InputOptions(BaseModel): 5 | pass 6 | 7 | 8 | class OutputOptions(BaseModel): 9 | pass 10 | -------------------------------------------------------------------------------- /libresvip/plugins/nn/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/nn/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/nn/locales/de_DE/LC_MESSAGES/nn.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/nn/locales/de_DE/LC_MESSAGES/nn.mo -------------------------------------------------------------------------------- /libresvip/plugins/nn/locales/de_DE/LC_MESSAGES/nn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/nn/nn.po\n" 8 | "X-Crowdin-File-ID: 134\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "No singing track found" 16 | msgstr "Kein Gesangstrack gefunden" 17 | 18 | msgid "NIAONiao" 19 | msgstr "" 20 | 21 | msgid "NIAONiao Virtual Singer project file" 22 | msgstr "NIAONiao Virtual Singer-Projektdatei" 23 | 24 | msgid "Conversion plugin for NIAONiao project file" 25 | msgstr "Konvertierungs-Plugin für NIAONiao-Projektdateien" 26 | 27 | msgid "SoulMelody" 28 | msgstr "" 29 | 30 | msgid "Version" 31 | msgstr "" 32 | 33 | msgid "Version of NIAONiao project file" 34 | msgstr "Version der NIAONiao-Projektdatei" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/nn/locales/ja_JP/LC_MESSAGES/nn.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/nn/locales/ja_JP/LC_MESSAGES/nn.mo -------------------------------------------------------------------------------- /libresvip/plugins/nn/locales/ja_JP/LC_MESSAGES/nn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/nn/nn.po\n" 8 | "X-Crowdin-File-ID: 134\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "No singing track found" 16 | msgstr "" 17 | 18 | msgid "NIAONiao" 19 | msgstr "" 20 | 21 | msgid "NIAONiao Virtual Singer project file" 22 | msgstr "" 23 | 24 | msgid "Conversion plugin for NIAONiao project file" 25 | msgstr "" 26 | 27 | msgid "SoulMelody" 28 | msgstr "" 29 | 30 | msgid "Version" 31 | msgstr "" 32 | 33 | msgid "Version of NIAONiao project file" 34 | msgstr "" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/nn/locales/zh_CN/LC_MESSAGES/nn.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/nn/locales/zh_CN/LC_MESSAGES/nn.mo -------------------------------------------------------------------------------- /libresvip/plugins/nn/locales/zh_CN/LC_MESSAGES/nn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/nn/nn.po\n" 8 | "X-Crowdin-File-ID: 134\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "No singing track found" 16 | msgstr "未找到演唱轨" 17 | 18 | msgid "NIAONiao" 19 | msgstr "袅袅虚拟歌手" 20 | 21 | msgid "NIAONiao Virtual Singer project file" 22 | msgstr "袅袅虚拟歌手工程文件" 23 | 24 | msgid "Conversion plugin for NIAONiao project file" 25 | msgstr "袅袅工程格式转换插件" 26 | 27 | msgid "SoulMelody" 28 | msgstr "岁月静好_初心不忘" 29 | 30 | msgid "Version" 31 | msgstr "版本" 32 | 33 | msgid "Version of NIAONiao project file" 34 | msgstr "袅袅工程版本" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/nn/nn.po: -------------------------------------------------------------------------------- 1 | msgid "No singing track found" 2 | msgstr "" 3 | 4 | msgid "NIAONiao" 5 | msgstr "" 6 | 7 | msgid "NIAONiao Virtual Singer project file" 8 | msgstr "" 9 | 10 | msgid "Conversion plugin for NIAONiao project file" 11 | msgstr "" 12 | 13 | msgid "SoulMelody" 14 | msgstr "" 15 | 16 | msgid "Version" 17 | msgstr "" 18 | 19 | msgid "Version of NIAONiao project file" 20 | msgstr "" 21 | 22 | -------------------------------------------------------------------------------- /libresvip/plugins/nn/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnablePitchImportationMixin, 5 | SelectSingleTrackMixin, 6 | StaticTempoMixin, 7 | ) 8 | from libresvip.utils.translation import gettext_lazy as _ 9 | 10 | 11 | class InputOptions(EnablePitchImportationMixin, BaseModel): 12 | pass 13 | 14 | 15 | class OutputOptions(SelectSingleTrackMixin, StaticTempoMixin, BaseModel): 16 | version: int = Field( 17 | default=19, 18 | title=_("Version"), 19 | description=_("Version of NIAONiao project file"), 20 | ) 21 | -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ppsf/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/locales/de_DE/LC_MESSAGES/ppsf.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ppsf/locales/de_DE/LC_MESSAGES/ppsf.mo -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/locales/de_DE/LC_MESSAGES/ppsf.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ppsf/ppsf.po\n" 8 | "X-Crowdin-File-ID: 136\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "Ppsf" 16 | msgstr "" 17 | 18 | msgid "Piapro Studio Song file" 19 | msgstr "Piapro Studio Song-Datei" 20 | 21 | msgid "Conversion plugin for Piapro Studio project file" 22 | msgstr "Konvertierungs-Plugin für Piapro Studio Projektdateien" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/locales/ja_JP/LC_MESSAGES/ppsf.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ppsf/locales/ja_JP/LC_MESSAGES/ppsf.mo -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/locales/ja_JP/LC_MESSAGES/ppsf.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ppsf/ppsf.po\n" 8 | "X-Crowdin-File-ID: 136\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "Ppsf" 16 | msgstr "" 17 | 18 | msgid "Piapro Studio Song file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for Piapro Studio project file" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/locales/zh_CN/LC_MESSAGES/ppsf.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ppsf/locales/zh_CN/LC_MESSAGES/ppsf.mo -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/locales/zh_CN/LC_MESSAGES/ppsf.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ppsf/ppsf.po\n" 8 | "X-Crowdin-File-ID: 136\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "Ppsf" 16 | msgstr "" 17 | 18 | msgid "Piapro Studio Song file" 19 | msgstr "Piapro Studio 工程文件" 20 | 21 | msgid "Conversion plugin for Piapro Studio project file" 22 | msgstr "Piapro Studio 工程文件转换插件" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/ppsf/ppsf.po: -------------------------------------------------------------------------------- 1 | msgid "Ppsf" 2 | msgstr "" 3 | 4 | msgid "Piapro Studio Song file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for Piapro Studio project file" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ps_project/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/enums.py: -------------------------------------------------------------------------------- 1 | # mypy: disable-error-code="misc" 2 | from enum import Enum 3 | from typing import Annotated 4 | 5 | from pydantic import Field 6 | 7 | from libresvip.utils.translation import gettext_lazy as _ 8 | 9 | 10 | class PocketSingerLyricsLanguage(Enum): 11 | CHINESE: Annotated[ 12 | str, 13 | Field( 14 | title=_("Chinese"), 15 | ), 16 | ] = "ch" 17 | JAPANESE: Annotated[ 18 | str, 19 | Field( 20 | title=_("Japanese"), 21 | ), 22 | ] = "jp" 23 | ENGLISH: Annotated[ 24 | str, 25 | Field( 26 | title=_("English"), 27 | ), 28 | ] = "en" 29 | -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/locales/de_DE/LC_MESSAGES/ps_project.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ps_project/locales/de_DE/LC_MESSAGES/ps_project.mo -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/locales/de_DE/LC_MESSAGES/ps_project.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ps_project/ps_project.po\n" 8 | "X-Crowdin-File-ID: 186\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-25 22:51\n" 14 | 15 | msgid "Chinese" 16 | msgstr "Chinesisch" 17 | 18 | msgid "Japanese" 19 | msgstr "Japanisch" 20 | 21 | msgid "English" 22 | msgstr "Englisch" 23 | 24 | msgid "Lyrics language" 25 | msgstr "Liedtextsprache" 26 | 27 | msgid "Title of the project" 28 | msgstr "" 29 | 30 | msgid "PocketSinger" 31 | msgstr "" 32 | 33 | msgid "Pocket Singer Project file" 34 | msgstr "" 35 | 36 | msgid "Conversion plugin for Pocket Singer project file" 37 | msgstr "" 38 | 39 | msgid "SoulMelody" 40 | msgstr "" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/locales/ja_JP/LC_MESSAGES/ps_project.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ps_project/locales/ja_JP/LC_MESSAGES/ps_project.mo -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/locales/ja_JP/LC_MESSAGES/ps_project.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ps_project/ps_project.po\n" 8 | "X-Crowdin-File-ID: 186\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-12-25 22:51\n" 14 | 15 | msgid "Chinese" 16 | msgstr "" 17 | 18 | msgid "Japanese" 19 | msgstr "" 20 | 21 | msgid "English" 22 | msgstr "" 23 | 24 | msgid "Lyrics language" 25 | msgstr "" 26 | 27 | msgid "Title of the project" 28 | msgstr "" 29 | 30 | msgid "PocketSinger" 31 | msgstr "" 32 | 33 | msgid "Pocket Singer Project file" 34 | msgstr "" 35 | 36 | msgid "Conversion plugin for Pocket Singer project file" 37 | msgstr "" 38 | 39 | msgid "SoulMelody" 40 | msgstr "" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/locales/zh_CN/LC_MESSAGES/ps_project.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ps_project/locales/zh_CN/LC_MESSAGES/ps_project.mo -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/locales/zh_CN/LC_MESSAGES/ps_project.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ps_project/ps_project.po\n" 8 | "X-Crowdin-File-ID: 186\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-12-26 18:52\n" 14 | 15 | msgid "Chinese" 16 | msgstr "中文" 17 | 18 | msgid "Japanese" 19 | msgstr "日语" 20 | 21 | msgid "English" 22 | msgstr "英语" 23 | 24 | msgid "Lyrics language" 25 | msgstr "歌词语言" 26 | 27 | msgid "Title of the project" 28 | msgstr "工程标题" 29 | 30 | msgid "PocketSinger" 31 | msgstr "" 32 | 33 | msgid "Pocket Singer Project file" 34 | msgstr "Pocket Singer 工程文件" 35 | 36 | msgid "Conversion plugin for Pocket Singer project file" 37 | msgstr "Pocket Singer 工程格式转换插件" 38 | 39 | msgid "SoulMelody" 40 | msgstr "岁月静好_初心不忘" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ExtractEmbededAudioMixin, 7 | StaticTempoMixin, 8 | ) 9 | from libresvip.utils.translation import gettext_lazy as _ 10 | 11 | from .enums import PocketSingerLyricsLanguage 12 | 13 | 14 | class InputOptions( 15 | EnableInstrumentalTrackImportationMixin, 16 | EnablePitchImportationMixin, 17 | ExtractEmbededAudioMixin, 18 | BaseModel, 19 | ): 20 | pass 21 | 22 | 23 | class OutputOptions(StaticTempoMixin, BaseModel): 24 | lyric_language: PocketSingerLyricsLanguage = Field( 25 | default=PocketSingerLyricsLanguage.CHINESE, 26 | title=_("Lyrics language"), 27 | ) 28 | title: str = Field( 29 | default="New Project", 30 | title=_("Title of the project"), 31 | ) 32 | -------------------------------------------------------------------------------- /libresvip/plugins/ps_project/ps_project.po: -------------------------------------------------------------------------------- 1 | msgid "Chinese" 2 | msgstr "" 3 | 4 | msgid "Japanese" 5 | msgstr "" 6 | 7 | msgid "English" 8 | msgstr "" 9 | 10 | msgid "Lyrics language" 11 | msgstr "" 12 | 13 | msgid "Title of the project" 14 | msgstr "" 15 | 16 | msgid "PocketSinger" 17 | msgstr "" 18 | 19 | msgid "Pocket Singer Project file" 20 | msgstr "" 21 | 22 | msgid "Conversion plugin for Pocket Singer project file" 23 | msgstr "" 24 | 25 | msgid "SoulMelody" 26 | msgstr "" 27 | 28 | -------------------------------------------------------------------------------- /libresvip/plugins/s5p/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/s5p/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/s5p/locales/de_DE/LC_MESSAGES/s5p.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/s5p/locales/de_DE/LC_MESSAGES/s5p.mo -------------------------------------------------------------------------------- /libresvip/plugins/s5p/locales/de_DE/LC_MESSAGES/s5p.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/s5p/s5p.po\n" 8 | "X-Crowdin-File-ID: 138\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "SynthV Editor" 16 | msgstr "" 17 | 18 | msgid "Synthesizer V Editor project file" 19 | msgstr "Synthesizer V Editor Projektdatei" 20 | 21 | msgid "Conversion plugin for Synthesizer V Editor project file" 22 | msgstr "Konvertierungs-Plugin für Synthesizer V Editor Projektdateien" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/s5p/locales/ja_JP/LC_MESSAGES/s5p.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/s5p/locales/ja_JP/LC_MESSAGES/s5p.mo -------------------------------------------------------------------------------- /libresvip/plugins/s5p/locales/ja_JP/LC_MESSAGES/s5p.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/s5p/s5p.po\n" 8 | "X-Crowdin-File-ID: 138\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "SynthV Editor" 16 | msgstr "" 17 | 18 | msgid "Synthesizer V Editor project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for Synthesizer V Editor project file" 22 | msgstr "" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/s5p/locales/zh_CN/LC_MESSAGES/s5p.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/s5p/locales/zh_CN/LC_MESSAGES/s5p.mo -------------------------------------------------------------------------------- /libresvip/plugins/s5p/locales/zh_CN/LC_MESSAGES/s5p.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/s5p/s5p.po\n" 8 | "X-Crowdin-File-ID: 138\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:38\n" 14 | 15 | msgid "SynthV Editor" 16 | msgstr "" 17 | 18 | msgid "Synthesizer V Editor project file" 19 | msgstr "Synthesizer V Editor 工程文件" 20 | 21 | msgid "Conversion plugin for Synthesizer V Editor project file" 22 | msgstr "Synthesizer V Editor 工程格式转换插件。" 23 | 24 | msgid "Sder Colin" 25 | msgstr "科林" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/s5p/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/s5p/s5p.po: -------------------------------------------------------------------------------- 1 | msgid "SynthV Editor" 2 | msgstr "" 3 | 4 | msgid "Synthesizer V Editor project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for Synthesizer V Editor project file" 8 | msgstr "" 9 | 10 | msgid "Sder Colin" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/srt/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/srt/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/srt/locales/de_DE/LC_MESSAGES/srt.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/srt/locales/de_DE/LC_MESSAGES/srt.mo -------------------------------------------------------------------------------- /libresvip/plugins/srt/locales/ja_JP/LC_MESSAGES/srt.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/srt/locales/ja_JP/LC_MESSAGES/srt.mo -------------------------------------------------------------------------------- /libresvip/plugins/srt/locales/zh_CN/LC_MESSAGES/srt.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/srt/locales/zh_CN/LC_MESSAGES/srt.mo -------------------------------------------------------------------------------- /libresvip/plugins/srt/srt_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .options import OutputOptions 7 | from .srt_generator import SrtGenerator 8 | 9 | 10 | class SrtConverter(plugin_base.WriteOnlyConverterBase): 11 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 12 | ssa_obj = SrtGenerator(options).generate_project(project) 13 | path.write_bytes(ssa_obj.to_string("srt").encode(options.encoding)) 14 | -------------------------------------------------------------------------------- /libresvip/plugins/svg/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svg/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/svg/locales/de_DE/LC_MESSAGES/svg.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svg/locales/de_DE/LC_MESSAGES/svg.mo -------------------------------------------------------------------------------- /libresvip/plugins/svg/locales/ja_JP/LC_MESSAGES/svg.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svg/locales/ja_JP/LC_MESSAGES/svg.mo -------------------------------------------------------------------------------- /libresvip/plugins/svg/locales/zh_CN/LC_MESSAGES/svg.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svg/locales/zh_CN/LC_MESSAGES/svg.mo -------------------------------------------------------------------------------- /libresvip/plugins/svg/model.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | 4 | class NotePositionParameters(BaseModel): 5 | point_1: tuple[float, float] 6 | point_2: tuple[float, float] 7 | inner_text: tuple[float, float] 8 | upper_text: tuple[float, float] 9 | lower_text: tuple[float, float] 10 | text_size: float 11 | -------------------------------------------------------------------------------- /libresvip/plugins/svg/svg_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | from typing import TYPE_CHECKING 3 | 4 | from libresvip.extension import base as plugin_base 5 | from libresvip.model.base import Project 6 | 7 | from .options import OutputOptions 8 | from .svg_generator import SvgGenerator 9 | 10 | if TYPE_CHECKING: 11 | from drawsvg import Drawing 12 | 13 | 14 | class SvgConverter(plugin_base.WriteOnlyConverterBase): 15 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 16 | drawing: Drawing = SvgGenerator(options).generate_project(project) 17 | path.write_bytes(drawing.as_svg().encode("utf-8")) 18 | -------------------------------------------------------------------------------- /libresvip/plugins/svip/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/svip/locales/de_DE/LC_MESSAGES/svip.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip/locales/de_DE/LC_MESSAGES/svip.mo -------------------------------------------------------------------------------- /libresvip/plugins/svip/locales/ja_JP/LC_MESSAGES/svip.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip/locales/ja_JP/LC_MESSAGES/svip.mo -------------------------------------------------------------------------------- /libresvip/plugins/svip/locales/zh_CN/LC_MESSAGES/svip.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip/locales/zh_CN/LC_MESSAGES/svip.mo -------------------------------------------------------------------------------- /libresvip/plugins/svip/msnrbf/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip/msnrbf/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/svip/msnrbf/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | LIBRARY_NAME_SINGING_TOOL_MODEL: Final[str] = ( 4 | "SingingTool.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 5 | ) 6 | LIBRARY_NAME_SINGING_TOOL_LIBRARY: Final[str] = ( 7 | "SingingTool.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 8 | ) 9 | 10 | # Values 11 | VALUE_LIST_VERSION_SONG_TEMPO: Final[int] = 2 12 | VALUE_LIST_VERSION_SONG_BEAT: Final[int] = 2 13 | VALUE_LIST_VERSION_SONG_ITRACK: Final[int] = 4 14 | VALUE_LIST_VERSION_SONG_NOTE: Final[int] = 1054 15 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip3/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/svip3/color_pool.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | _colors = [ 4 | "#24936E", 5 | "#B54434", 6 | "#B5495B", 7 | "#A8497A", 8 | "#4F726C", 9 | "#939650", 10 | "#CA7A2C", 11 | "#DB4D6D", 12 | "#77428D", 13 | "#005CAF", 14 | ] 15 | 16 | 17 | def count_color() -> int: 18 | return len(_colors) 19 | 20 | 21 | def get_color(index: int) -> str: 22 | return _colors[index % len(_colors)] 23 | 24 | 25 | def random_color() -> str: 26 | return random.choice(_colors) 27 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/constants.py: -------------------------------------------------------------------------------- 1 | from types import SimpleNamespace 2 | from typing import Final 3 | 4 | TYPE_URL_BASE: Final[str] = "type.googleapis.com/" 5 | DEFAULT_SINGER_ID: Final[str] = "7d0c0cfc-00b3-4dca-b7b0-d20b634b531a" 6 | MIN_NOTE_DURATION: Final[float] = 0.06 7 | MAX_NOTE_DURATION: Final[float] = 6.0 8 | 9 | 10 | Svip3TrackType = SimpleNamespace( 11 | SINGING_TRACK="xstudio.proto.SingingTrack", 12 | AUDIO_TRACK="xstudio.proto.AudioTrack", 13 | ) 14 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/locales/de_DE/LC_MESSAGES/svip3.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip3/locales/de_DE/LC_MESSAGES/svip3.mo -------------------------------------------------------------------------------- /libresvip/plugins/svip3/locales/ja_JP/LC_MESSAGES/svip3.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip3/locales/ja_JP/LC_MESSAGES/svip3.mo -------------------------------------------------------------------------------- /libresvip/plugins/svip3/locales/ja_JP/LC_MESSAGES/svip3.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/svip3/svip3.po\n" 8 | "X-Crowdin-File-ID: 146\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "Svip3" 16 | msgstr "" 17 | 18 | msgid "Netease Cloud Music XStudio project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for Netease Cloud Music XStudio project file" 22 | msgstr "" 23 | 24 | msgid "FlutyDeer" 25 | msgstr "" 26 | 27 | msgid "Unsupported pinyin:" 28 | msgstr "" 29 | 30 | msgid "Note duration is too short:" 31 | msgstr "" 32 | 33 | msgid "Note duration is too long:" 34 | msgstr "" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/locales/zh_CN/LC_MESSAGES/svip3.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svip3/locales/zh_CN/LC_MESSAGES/svip3.mo -------------------------------------------------------------------------------- /libresvip/plugins/svip3/locales/zh_CN/LC_MESSAGES/svip3.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/svip3/svip3.po\n" 8 | "X-Crowdin-File-ID: 146\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-12-17 11:16\n" 14 | 15 | msgid "Svip3" 16 | msgstr "" 17 | 18 | msgid "Netease Cloud Music XStudio project file" 19 | msgstr "网易云音乐·X Studio 工程文件" 20 | 21 | msgid "Conversion plugin for Netease Cloud Music XStudio project file" 22 | msgstr "网易云音乐·X Studio 工程转换插件" 23 | 24 | msgid "FlutyDeer" 25 | msgstr "笛鹿" 26 | 27 | msgid "Unsupported pinyin:" 28 | msgstr "不支持的拼音:" 29 | 30 | msgid "Note duration is too short:" 31 | msgstr "音符时长过短:" 32 | 33 | msgid "Note duration is too long:" 34 | msgstr "音符时长过长:" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/singers.py: -------------------------------------------------------------------------------- 1 | from importlib.resources import files 2 | 3 | from bidict import bidict 4 | 5 | from libresvip.core.compat import json 6 | 7 | singer_data_path = files("libresvip.plugins.svip3") / "singers.json" 8 | singers_data = bidict(json.loads(singer_data_path.read_text(encoding="utf-8"))) 9 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/svip3.po: -------------------------------------------------------------------------------- 1 | msgid "Svip3" 2 | msgstr "" 3 | 4 | msgid "Netease Cloud Music XStudio project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for Netease Cloud Music XStudio project file" 8 | msgstr "" 9 | 10 | msgid "FlutyDeer" 11 | msgstr "" 12 | 13 | msgid "Unsupported pinyin:" 14 | msgstr "" 15 | 16 | msgid "Note duration is too short:" 17 | msgstr "" 18 | 19 | msgid "Note duration is too long:" 20 | msgstr "" 21 | 22 | -------------------------------------------------------------------------------- /libresvip/plugins/svip3/svip3_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .model import Svip3Project 7 | from .options import InputOptions, OutputOptions 8 | from .svip3_generator import Svip3Generator 9 | from .svip3_parser import Svip3Parser 10 | 11 | 12 | class Svip3Converter(plugin_base.SVSConverterBase): 13 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 14 | svip3_project = Svip3Project.deserialize(path.read_bytes()) 15 | return Svip3Parser(options).parse_project(svip3_project) 16 | 17 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 18 | svip3_project = Svip3Generator(options).generate_project(project) 19 | path.write_bytes(Svip3Project.serialize(svip3_project)) 20 | -------------------------------------------------------------------------------- /libresvip/plugins/svp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svp/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/svp/constants.py: -------------------------------------------------------------------------------- 1 | from types import SimpleNamespace 2 | from typing import Final 3 | 4 | TICK_RATE: Final[int] = 1470000 5 | DEFAULT_PITCH_TRANSITION: Final[float] = 0.0 6 | DEFAULT_PITCH_PORTAMENTO: Final[float] = 0.07 7 | DEFAULT_PITCH_DEPTH: Final[float] = 0.15 8 | DEFAULT_VIBRATO_START: Final[float] = 0.25 9 | DEFAULT_VIBRATO_FADE: Final[float] = 0.2 10 | DEFAULT_VIBRATO_DEPTH: Final[float] = 1.0 11 | DEFAULT_VIBRATO_FREQUENCY: Final[float] = 5.5 12 | DEFAULT_VIBRATO_PHASE: Final[float] = 0.0 13 | DEFAULT_VIBRATO_JITTER: Final[float] = 1.0 14 | SYSTEM_PITCH_PORTAMENTO: Final[float] = 0.1 15 | SYSTEM_PITCH_DEPTH: Final[float] = 0.0 16 | MAX_BREAK: Final[float] = 0.01 17 | DEFAULT_PHONE_RATIO: Final[float] = 1.8 18 | DEFAULT_DURATIONS = SimpleNamespace( 19 | stop=0.10, 20 | affricate=0.125, 21 | fricative=0.125, 22 | aspirate=0.094, 23 | liquid=0.062, 24 | nasal=0.094, 25 | vowel=0.0, 26 | semivowel=0.055, 27 | diphthong=0.0, 28 | ) 29 | -------------------------------------------------------------------------------- /libresvip/plugins/svp/interval_utils.py: -------------------------------------------------------------------------------- 1 | from .constants import TICK_RATE 2 | 3 | 4 | def position_to_ticks(position: int) -> int: 5 | return round(position / TICK_RATE) 6 | 7 | 8 | def ticks_to_position(ticks: int) -> int: 9 | return ticks * TICK_RATE 10 | -------------------------------------------------------------------------------- /libresvip/plugins/svp/locales/de_DE/LC_MESSAGES/svp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svp/locales/de_DE/LC_MESSAGES/svp.mo -------------------------------------------------------------------------------- /libresvip/plugins/svp/locales/ja_JP/LC_MESSAGES/svp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svp/locales/ja_JP/LC_MESSAGES/svp.mo -------------------------------------------------------------------------------- /libresvip/plugins/svp/locales/zh_CN/LC_MESSAGES/svp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/svp/locales/zh_CN/LC_MESSAGES/svp.mo -------------------------------------------------------------------------------- /libresvip/plugins/tlp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tlp/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/tlp/locales/de_DE/LC_MESSAGES/tlp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tlp/locales/de_DE/LC_MESSAGES/tlp.mo -------------------------------------------------------------------------------- /libresvip/plugins/tlp/locales/de_DE/LC_MESSAGES/tlp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tlp/tlp.po\n" 8 | "X-Crowdin-File-ID: 150\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:02\n" 14 | 15 | msgid "TuneLab" 16 | msgstr "" 17 | 18 | msgid "TuneLab project file" 19 | msgstr "TuneLab Projektdatei" 20 | 21 | msgid "Conversion plugin for TuneLab project file" 22 | msgstr "Konvertierungs-Plugin für TuneLab Projektdateien" 23 | 24 | msgid "LiuYunPlayer" 25 | msgstr "" 26 | 27 | msgid "Note overlap detected, cutting note " 28 | msgstr "Notenüberlappung erkannt, Note wird geschnitten " 29 | 30 | msgid "Note overlap detected, skipping note " 31 | msgstr "Notenüberlappung erkannt, Note wird übersprungen " 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/tlp/locales/ja_JP/LC_MESSAGES/tlp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tlp/locales/ja_JP/LC_MESSAGES/tlp.mo -------------------------------------------------------------------------------- /libresvip/plugins/tlp/locales/ja_JP/LC_MESSAGES/tlp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tlp/tlp.po\n" 8 | "X-Crowdin-File-ID: 150\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-12-12 01:22\n" 14 | 15 | msgid "TuneLab" 16 | msgstr "" 17 | 18 | msgid "TuneLab project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for TuneLab project file" 22 | msgstr "" 23 | 24 | msgid "LiuYunPlayer" 25 | msgstr "" 26 | 27 | msgid "Note overlap detected, cutting note " 28 | msgstr "" 29 | 30 | msgid "Note overlap detected, skipping note " 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/tlp/locales/zh_CN/LC_MESSAGES/tlp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tlp/locales/zh_CN/LC_MESSAGES/tlp.mo -------------------------------------------------------------------------------- /libresvip/plugins/tlp/locales/zh_CN/LC_MESSAGES/tlp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tlp/tlp.po\n" 8 | "X-Crowdin-File-ID: 150\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-12-12 01:23\n" 14 | 15 | msgid "TuneLab" 16 | msgstr "" 17 | 18 | msgid "TuneLab project file" 19 | msgstr "TuneLab工程文件" 20 | 21 | msgid "Conversion plugin for TuneLab project file" 22 | msgstr "TuneLab工程格式转换插件" 23 | 24 | msgid "LiuYunPlayer" 25 | msgstr "金刚小刘" 26 | 27 | msgid "Note overlap detected, cutting note " 28 | msgstr "" 29 | 30 | msgid "Note overlap detected, skipping note " 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/tlp/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/tlp/tlp.po: -------------------------------------------------------------------------------- 1 | msgid "TuneLab" 2 | msgstr "" 3 | 4 | msgid "TuneLab project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for TuneLab project file" 8 | msgstr "" 9 | 10 | msgid "LiuYunPlayer" 11 | msgstr "" 12 | 13 | msgid "Note overlap detected, cutting note " 14 | msgstr "" 15 | 16 | msgid "Note overlap detected, skipping note " 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /libresvip/plugins/tlp/tlp.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = TuneLab 3 | module = tunelab_converter 4 | 5 | [Documentation] 6 | Author = LiuYunPlayer 7 | Version = 0.5.8 8 | Website = https://space.bilibili.com/24331207 9 | Format = TuneLab project file 10 | Description = Conversion plugin for TuneLab project file 11 | Suffix = tlp -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tsmsln/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | DEFAULT_PHONEME: Final[str] = "r,a" 4 | TIME_UNIT_AS_TICKS_PER_BPM: Final[float] = 4.8 / 120 5 | OCTAVE_OFFSET: Final[int] = -1 6 | TICK_RATE: Final[float] = 2.0 7 | MIN_DATA_LENGTH: Final[int] = 500 8 | TEMP_VALUE_AS_NULL: Final[float] = -1.0 9 | -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/locales/de_DE/LC_MESSAGES/tsmsln.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tsmsln/locales/de_DE/LC_MESSAGES/tsmsln.mo -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/locales/de_DE/LC_MESSAGES/tsmsln.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tsmsln/tsmsln.po\n" 8 | "X-Crowdin-File-ID: 198\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2025-01-22 19:48\n" 14 | 15 | msgid "TSMSln" 16 | msgstr "" 17 | 18 | msgid "Techno-Speech Mobile Solution file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for VoiSona Mobile project file" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | msgid "Unsupported lyric: " 28 | msgstr "Nicht unterstützter Text: " 29 | 30 | msgid "Pitch value is out of bounds" 31 | msgstr "Tonhöhenwert ist außerhalb des zulässigen Bereichs" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/locales/ja_JP/LC_MESSAGES/tsmsln.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tsmsln/locales/ja_JP/LC_MESSAGES/tsmsln.mo -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/locales/ja_JP/LC_MESSAGES/tsmsln.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tsmsln/tsmsln.po\n" 8 | "X-Crowdin-File-ID: 198\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2025-01-22 19:48\n" 14 | 15 | msgid "TSMSln" 16 | msgstr "" 17 | 18 | msgid "Techno-Speech Mobile Solution file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for VoiSona Mobile project file" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | msgid "Unsupported lyric: " 28 | msgstr "" 29 | 30 | msgid "Pitch value is out of bounds" 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/locales/zh_CN/LC_MESSAGES/tsmsln.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tsmsln/locales/zh_CN/LC_MESSAGES/tsmsln.mo -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/locales/zh_CN/LC_MESSAGES/tsmsln.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tsmsln/tsmsln.po\n" 8 | "X-Crowdin-File-ID: 198\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2025-01-23 19:00\n" 14 | 15 | msgid "TSMSln" 16 | msgstr "" 17 | 18 | msgid "Techno-Speech Mobile Solution file" 19 | msgstr "Techno-Speech 移动版项目文件" 20 | 21 | msgid "Conversion plugin for VoiSona Mobile project file" 22 | msgstr "VoiSona 移动版工程文件转换插件" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | msgid "Unsupported lyric: " 28 | msgstr "不支持的歌词: " 29 | 30 | msgid "Pitch value is out of bounds" 31 | msgstr "音高值越界" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnablePitchImportationMixin, 5 | SelectSingleTrackMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnablePitchImportationMixin, 11 | BaseModel, 12 | ): 13 | pass 14 | 15 | 16 | class OutputOptions(SelectSingleTrackMixin, BaseModel): 17 | pass 18 | -------------------------------------------------------------------------------- /libresvip/plugins/tsmsln/tsmsln.po: -------------------------------------------------------------------------------- 1 | msgid "TSMSln" 2 | msgstr "" 3 | 4 | msgid "Techno-Speech Mobile Solution file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for VoiSona Mobile project file" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | msgid "Unsupported lyric: " 14 | msgstr "" 15 | 16 | msgid "Pitch value is out of bounds" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /libresvip/plugins/tssln/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tssln/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/tssln/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | DEFAULT_PHONEME: Final[str] = "r,a" 4 | TIME_UNIT_AS_TICKS_PER_BPM: Final[float] = 4.8 / 120 5 | OCTAVE_OFFSET: Final[int] = -1 6 | TICK_RATE: Final[float] = 2.0 7 | MIN_DATA_LENGTH: Final[int] = 500 8 | TEMP_VALUE_AS_NULL: Final[float] = -1.0 9 | -------------------------------------------------------------------------------- /libresvip/plugins/tssln/locales/de_DE/LC_MESSAGES/tssln.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tssln/locales/de_DE/LC_MESSAGES/tssln.mo -------------------------------------------------------------------------------- /libresvip/plugins/tssln/locales/ja_JP/LC_MESSAGES/tssln.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tssln/locales/ja_JP/LC_MESSAGES/tssln.mo -------------------------------------------------------------------------------- /libresvip/plugins/tssln/locales/ja_JP/LC_MESSAGES/tssln.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tssln/tssln.po\n" 8 | "X-Crowdin-File-ID: 152\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:31\n" 14 | 15 | msgid "Unsupported project version" 16 | msgstr "" 17 | 18 | msgid "TSSln" 19 | msgstr "" 20 | 21 | msgid "Techno-Speech Solution file" 22 | msgstr "" 23 | 24 | msgid "Conversion plugin for VoiSona project file (Only versions 1.8.0 and later are supported)" 25 | msgstr "" 26 | 27 | msgid "SoulMelody" 28 | msgstr "" 29 | 30 | msgid "Unsupported lyric: " 31 | msgstr "" 32 | 33 | msgid "Pitch value is out of bounds" 34 | msgstr "" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/tssln/locales/zh_CN/LC_MESSAGES/tssln.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/tssln/locales/zh_CN/LC_MESSAGES/tssln.mo -------------------------------------------------------------------------------- /libresvip/plugins/tssln/locales/zh_CN/LC_MESSAGES/tssln.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/tssln/tssln.po\n" 8 | "X-Crowdin-File-ID: 152\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2025-01-23 18:59\n" 14 | 15 | msgid "Unsupported project version" 16 | msgstr "不支持的工程版本" 17 | 18 | msgid "TSSln" 19 | msgstr "" 20 | 21 | msgid "Techno-Speech Solution file" 22 | msgstr "Techno-Speech 项目文件" 23 | 24 | msgid "Conversion plugin for VoiSona project file (Only versions 1.8.0 and later are supported)" 25 | msgstr "VoiSona 工程文件转换插件 (仅支持1.8.0及以上版本保存的工程)" 26 | 27 | msgid "SoulMelody" 28 | msgstr "岁月静好_初心不忘" 29 | 30 | msgid "Unsupported lyric: " 31 | msgstr "不支持的歌词: " 32 | 33 | msgid "Pitch value is out of bounds" 34 | msgstr "音高值越界" 35 | 36 | -------------------------------------------------------------------------------- /libresvip/plugins/tssln/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/tssln/tssln.po: -------------------------------------------------------------------------------- 1 | msgid "Unsupported project version" 2 | msgstr "" 3 | 4 | msgid "TSSln" 5 | msgstr "" 6 | 7 | msgid "Techno-Speech Solution file" 8 | msgstr "" 9 | 10 | msgid "" 11 | "Conversion plugin for VoiSona project file (Only versions 1.8.0 and later" 12 | " are supported)" 13 | msgstr "" 14 | 15 | msgid "SoulMelody" 16 | msgstr "" 17 | 18 | msgid "Unsupported lyric: " 19 | msgstr "" 20 | 21 | msgid "Pitch value is out of bounds" 22 | msgstr "" 23 | 24 | -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ufdata/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/locales/de_DE/LC_MESSAGES/ufdata.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ufdata/locales/de_DE/LC_MESSAGES/ufdata.mo -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/locales/de_DE/LC_MESSAGES/ufdata.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ufdata/ufdata.po\n" 8 | "X-Crowdin-File-ID: 154\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:03\n" 14 | 15 | msgid "UFData" 16 | msgstr "" 17 | 18 | msgid "UtaFormatix3 data format" 19 | msgstr "UtaFormatix3 Datenformat" 20 | 21 | msgid "Conversion plugin for UFData format" 22 | msgstr "Konvertierungs-Plugin für das Ufdata-Format" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/locales/ja_JP/LC_MESSAGES/ufdata.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ufdata/locales/ja_JP/LC_MESSAGES/ufdata.mo -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/locales/ja_JP/LC_MESSAGES/ufdata.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ufdata/ufdata.po\n" 8 | "X-Crowdin-File-ID: 154\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:32\n" 14 | 15 | msgid "UFData" 16 | msgstr "" 17 | 18 | msgid "UtaFormatix3 data format" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for UFData format" 22 | msgstr "" 23 | 24 | msgid "Sder Colin" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/locales/zh_CN/LC_MESSAGES/ufdata.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ufdata/locales/zh_CN/LC_MESSAGES/ufdata.mo -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/locales/zh_CN/LC_MESSAGES/ufdata.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ufdata/ufdata.po\n" 8 | "X-Crowdin-File-ID: 154\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:39\n" 14 | 15 | msgid "UFData" 16 | msgstr "" 17 | 18 | msgid "UtaFormatix3 data format" 19 | msgstr "UtaFormatix3 数据格式" 20 | 21 | msgid "Conversion plugin for UFData format" 22 | msgstr "UFData格式转换插件" 23 | 24 | msgid "Sder Colin" 25 | msgstr "科林" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import EnablePitchImportationMixin 4 | 5 | 6 | class InputOptions(EnablePitchImportationMixin, BaseModel): 7 | pass 8 | 9 | 10 | class OutputOptions(BaseModel): 11 | pass 12 | -------------------------------------------------------------------------------- /libresvip/plugins/ufdata/ufdata.po: -------------------------------------------------------------------------------- 1 | msgid "UFData" 2 | msgstr "" 3 | 4 | msgid "UtaFormatix3 data format" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for UFData format" 8 | msgstr "" 9 | 10 | msgid "Sder Colin" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ust/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ust/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | MODE1_PITCH_SAMPLING_INTERVAL_TICK: Final[int] = 5 4 | MODE2_PITCH_SAMPLING_INTERVAL_TICK: Final[int] = 4 5 | MODE2_PITCH_MAX_POINT_COUNT: Final[int] = 50 6 | MAX_ACCEPTED_BPM: Final[float] = 10000.0 7 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/interpolation.py: -------------------------------------------------------------------------------- 1 | from libresvip.model.point import Point 2 | from libresvip.utils.music_math import ( 3 | interpolate_cosine_ease_in, 4 | interpolate_cosine_ease_in_out, 5 | interpolate_cosine_ease_out, 6 | interpolate_linear, 7 | ) 8 | 9 | from .model import UTAUPitchBendMode 10 | 11 | 12 | def interpolate( 13 | last_point: Point, 14 | this_point: Point, 15 | curve_type: UTAUPitchBendMode, 16 | sampling_interval_tick: int, 17 | ) -> list[Point]: 18 | input_data = [last_point, this_point] 19 | if curve_type == "s": 20 | return interpolate_linear(input_data, sampling_interval_tick) 21 | elif curve_type == "j": 22 | return interpolate_cosine_ease_in(input_data, sampling_interval_tick) 23 | elif curve_type == "r": 24 | return interpolate_cosine_ease_out(input_data, sampling_interval_tick) 25 | else: 26 | return interpolate_cosine_ease_in_out(input_data, sampling_interval_tick) 27 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/locales/de_DE/LC_MESSAGES/ust.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ust/locales/de_DE/LC_MESSAGES/ust.mo -------------------------------------------------------------------------------- /libresvip/plugins/ust/locales/ja_JP/LC_MESSAGES/ust.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ust/locales/ja_JP/LC_MESSAGES/ust.mo -------------------------------------------------------------------------------- /libresvip/plugins/ust/locales/ja_JP/LC_MESSAGES/ust.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ust/ust.po\n" 8 | "X-Crowdin-File-ID: 156\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:32\n" 14 | 15 | msgid "Text encoding" 16 | msgstr "" 17 | 18 | msgid "Version" 19 | msgstr "" 20 | 21 | msgid "UST file version" 22 | msgstr "" 23 | 24 | msgid "Ust" 25 | msgstr "" 26 | 27 | msgid "UTAU Sequence Text" 28 | msgstr "" 29 | 30 | msgid "Conversion plugin for UST file format" 31 | msgstr "" 32 | 33 | msgid "Sder Colin" 34 | msgstr "" 35 | 36 | msgid "No singing track found" 37 | msgstr "" 38 | 39 | msgid "UST project has no track" 40 | msgstr "" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/locales/zh_CN/LC_MESSAGES/ust.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ust/locales/zh_CN/LC_MESSAGES/ust.mo -------------------------------------------------------------------------------- /libresvip/plugins/ust/locales/zh_CN/LC_MESSAGES/ust.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/ust/ust.po\n" 8 | "X-Crowdin-File-ID: 156\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:39\n" 14 | 15 | msgid "Text encoding" 16 | msgstr "文本编码" 17 | 18 | msgid "Version" 19 | msgstr "版本" 20 | 21 | msgid "UST file version" 22 | msgstr "UST文件版本号" 23 | 24 | msgid "Ust" 25 | msgstr "" 26 | 27 | msgid "UTAU Sequence Text" 28 | msgstr "UTAU 序列文本" 29 | 30 | msgid "Conversion plugin for UST file format" 31 | msgstr "UST文件格式转换插件" 32 | 33 | msgid "Sder Colin" 34 | msgstr "科林" 35 | 36 | msgid "No singing track found" 37 | msgstr "未找到演唱轨" 38 | 39 | msgid "UST project has no track" 40 | msgstr "UST工程中没有找到任何音轨" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import Field 2 | 3 | from libresvip.model.base import BaseModel 4 | from libresvip.model.option_mixins import ( 5 | EnablePitchImportationMixin, 6 | SelectSingleTrackMixin, 7 | ) 8 | from libresvip.utils.text import supported_charset_names 9 | from libresvip.utils.translation import gettext_lazy as _ 10 | 11 | 12 | class InputOptions(EnablePitchImportationMixin, BaseModel): 13 | encoding: str = Field( 14 | default="SHIFT_JIS", 15 | title=_("Text encoding"), 16 | json_schema_extra={"enum": supported_charset_names()}, 17 | ) 18 | 19 | 20 | class OutputOptions(SelectSingleTrackMixin, BaseModel): 21 | version: float = Field( 22 | default=1.2, 23 | title=_("Version"), 24 | description=_("UST file version"), 25 | ) 26 | encoding: str = Field( 27 | default="SHIFT_JIS", 28 | title=_("Text encoding"), 29 | json_schema_extra={"enum": supported_charset_names()}, 30 | ) 31 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/ust.po: -------------------------------------------------------------------------------- 1 | msgid "Text encoding" 2 | msgstr "" 3 | 4 | msgid "Version" 5 | msgstr "" 6 | 7 | msgid "UST file version" 8 | msgstr "" 9 | 10 | msgid "Ust" 11 | msgstr "" 12 | 13 | msgid "UTAU Sequence Text" 14 | msgstr "" 15 | 16 | msgid "Conversion plugin for UST file format" 17 | msgstr "" 18 | 19 | msgid "Sder Colin" 20 | msgstr "" 21 | 22 | msgid "No singing track found" 23 | msgstr "" 24 | 25 | msgid "UST project has no track" 26 | msgstr "" 27 | 28 | -------------------------------------------------------------------------------- /libresvip/plugins/ust/ust_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .model import UstWalker, get_ust_grammar 7 | from .options import InputOptions, OutputOptions 8 | from .template import render_ust 9 | from .ust_generator import USTGenerator 10 | from .ust_parser import USTParser 11 | 12 | 13 | class USTConverter(plugin_base.SVSConverterBase): 14 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 15 | ust_content = path.read_bytes() 16 | ust_text = ust_content.decode(options.encoding, errors="replace") 17 | tree = get_ust_grammar().parse(ust_text) 18 | ust_project = UstWalker().walk(tree) 19 | return USTParser(options).parse_project(ust_project) 20 | 21 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 22 | ust_project = USTGenerator(options).generate_project(project) 23 | render_ust(ust_project, path, options.encoding) 24 | -------------------------------------------------------------------------------- /libresvip/plugins/ustx/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ustx/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ustx/locales/de_DE/LC_MESSAGES/ustx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ustx/locales/de_DE/LC_MESSAGES/ustx.mo -------------------------------------------------------------------------------- /libresvip/plugins/ustx/locales/ja_JP/LC_MESSAGES/ustx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ustx/locales/ja_JP/LC_MESSAGES/ustx.mo -------------------------------------------------------------------------------- /libresvip/plugins/ustx/locales/zh_CN/LC_MESSAGES/ustx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ustx/locales/zh_CN/LC_MESSAGES/ustx.mo -------------------------------------------------------------------------------- /libresvip/plugins/ustx/ustx.po: -------------------------------------------------------------------------------- 1 | msgid "Incompatible with ARPAsing-series Phonemizers" 2 | msgstr "" 3 | 4 | msgid "Compatible with ARPAsing-series Phonemizers" 5 | msgstr "" 6 | 7 | msgid "The way to handle english multisyllabic words" 8 | msgstr "" 9 | 10 | msgid "Compatibility with ARPAsing-series Phonemizer" 11 | msgstr "" 12 | 13 | msgid "Breath lyrics" 14 | msgstr "" 15 | 16 | msgid "" 17 | "Special lyrics that will be recognized as breath notes only when " 18 | "immediately followed by a regular note, each separated by a space" 19 | msgstr "" 20 | 21 | msgid "Silence lyrics" 22 | msgstr "" 23 | 24 | msgid "Special lyrics that will be ignored, each separated by a space" 25 | msgstr "" 26 | 27 | msgid "Ustx" 28 | msgstr "" 29 | 30 | msgid "OpenUtau project file" 31 | msgstr "" 32 | 33 | msgid "Conversion plugin for Ustx file format" 34 | msgstr "" 35 | 36 | msgid "Oxygen Dioxide" 37 | msgstr "" 38 | 39 | msgid "Notes Overlapped" 40 | msgstr "" 41 | 42 | -------------------------------------------------------------------------------- /libresvip/plugins/ustx/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/ustx/utils/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/ustx/utils/lyric_util.py: -------------------------------------------------------------------------------- 1 | from libresvip.utils.text import CustomBoundriesBlacklist 2 | 3 | unsupported_symbols = CustomBoundriesBlacklist( 4 | [",", ",", ".", "。", "?", "?", "!", "!"], 5 | right_boundary="$", 6 | match_substrings=True, 7 | ) 8 | 9 | 10 | def is_punctuation(c: str) -> bool: 11 | return unsupported_symbols.is_blacklisted(c) 12 | 13 | 14 | def get_symbol_removed_lyric(lyric: str) -> str: 15 | return unsupported_symbols.cleanse_text(lyric) 16 | -------------------------------------------------------------------------------- /libresvip/plugins/ustx/utils/music_math.py: -------------------------------------------------------------------------------- 1 | from libresvip.utils.music_math import ( 2 | cosine_easing_in_interpolation, 3 | cosine_easing_in_out_interpolation, 4 | cosine_easing_out_interpolation, 5 | linear_interpolation, 6 | ) 7 | 8 | 9 | def interpolate_shape( 10 | start: tuple[float, float], end: tuple[float, float], x: float, shape: str 11 | ) -> float: 12 | if shape == "io": 13 | return cosine_easing_in_out_interpolation(x, start, end) 14 | elif shape == "i": 15 | return cosine_easing_in_interpolation(x, start, end) 16 | elif shape == "o": 17 | return cosine_easing_out_interpolation(x, start, end) 18 | else: 19 | return linear_interpolation(x, start, end) 20 | -------------------------------------------------------------------------------- /libresvip/plugins/vfp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vfp/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vfp/locales/de_DE/LC_MESSAGES/vfp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vfp/locales/de_DE/LC_MESSAGES/vfp.mo -------------------------------------------------------------------------------- /libresvip/plugins/vfp/locales/de_DE/LC_MESSAGES/vfp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vfp/vfp.po\n" 8 | "X-Crowdin-File-ID: 192\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2025-01-12 02:57\n" 14 | 15 | msgid "VOX Factory" 16 | msgstr "" 17 | 18 | msgid "VOX Factory Project File" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for VOX Factory Project File" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/vfp/locales/ja_JP/LC_MESSAGES/vfp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vfp/locales/ja_JP/LC_MESSAGES/vfp.mo -------------------------------------------------------------------------------- /libresvip/plugins/vfp/locales/ja_JP/LC_MESSAGES/vfp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vfp/vfp.po\n" 8 | "X-Crowdin-File-ID: 192\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2025-01-12 02:57\n" 14 | 15 | msgid "VOX Factory" 16 | msgstr "" 17 | 18 | msgid "VOX Factory Project File" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for VOX Factory Project File" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/vfp/locales/zh_CN/LC_MESSAGES/vfp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vfp/locales/zh_CN/LC_MESSAGES/vfp.mo -------------------------------------------------------------------------------- /libresvip/plugins/vfp/locales/zh_CN/LC_MESSAGES/vfp.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vfp/vfp.po\n" 8 | "X-Crowdin-File-ID: 192\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2025-01-12 03:00\n" 14 | 15 | msgid "VOX Factory" 16 | msgstr "" 17 | 18 | msgid "VOX Factory Project File" 19 | msgstr "VOX Factory 工程文件" 20 | 21 | msgid "Conversion plugin for VOX Factory Project File" 22 | msgstr "VOX Factory 工程格式转换插件" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/vfp/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ExtractEmbededAudioMixin, 7 | StaticTempoMixin, 8 | ) 9 | 10 | 11 | class InputOptions( 12 | EnableInstrumentalTrackImportationMixin, 13 | EnablePitchImportationMixin, 14 | ExtractEmbededAudioMixin, 15 | BaseModel, 16 | ): 17 | pass 18 | 19 | 20 | class OutputOptions(StaticTempoMixin, BaseModel): 21 | pass 22 | -------------------------------------------------------------------------------- /libresvip/plugins/vfp/vfp.po: -------------------------------------------------------------------------------- 1 | msgid "VOX Factory" 2 | msgstr "" 3 | 4 | msgid "VOX Factory Project File" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for VOX Factory Project File" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/vog/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vog/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vog/locales/de_DE/LC_MESSAGES/vog.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vog/locales/de_DE/LC_MESSAGES/vog.mo -------------------------------------------------------------------------------- /libresvip/plugins/vog/locales/de_DE/LC_MESSAGES/vog.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vog/vog.po\n" 8 | "X-Crowdin-File-ID: 160\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:03\n" 14 | 15 | msgid "Singer name" 16 | msgstr "Sängername" 17 | 18 | msgid "Please enter the singer's English name." 19 | msgstr "Bitte gebe den englischen Sängernamen ein." 20 | 21 | msgid "Vogen" 22 | msgstr "" 23 | 24 | msgid "Vogen project file" 25 | msgstr "Vogen Projektdatei" 26 | 27 | msgid "Conversion plugin for Vogen project file" 28 | msgstr "Konvertierungs-Plugin für Vogen-Projektdateien" 29 | 30 | msgid "SoulMelody" 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/vog/locales/ja_JP/LC_MESSAGES/vog.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vog/locales/ja_JP/LC_MESSAGES/vog.mo -------------------------------------------------------------------------------- /libresvip/plugins/vog/locales/ja_JP/LC_MESSAGES/vog.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vog/vog.po\n" 8 | "X-Crowdin-File-ID: 160\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:32\n" 14 | 15 | msgid "Singer name" 16 | msgstr "" 17 | 18 | msgid "Please enter the singer's English name." 19 | msgstr "" 20 | 21 | msgid "Vogen" 22 | msgstr "" 23 | 24 | msgid "Vogen project file" 25 | msgstr "" 26 | 27 | msgid "Conversion plugin for Vogen project file" 28 | msgstr "" 29 | 30 | msgid "SoulMelody" 31 | msgstr "" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/vog/locales/zh_CN/LC_MESSAGES/vog.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vog/locales/zh_CN/LC_MESSAGES/vog.mo -------------------------------------------------------------------------------- /libresvip/plugins/vog/locales/zh_CN/LC_MESSAGES/vog.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vog/vog.po\n" 8 | "X-Crowdin-File-ID: 160\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:39\n" 14 | 15 | msgid "Singer name" 16 | msgstr "歌手名" 17 | 18 | msgid "Please enter the singer's English name." 19 | msgstr "请输入完整无误的歌手英文名字。" 20 | 21 | msgid "Vogen" 22 | msgstr "" 23 | 24 | msgid "Vogen project file" 25 | msgstr "Vogen 工程文件" 26 | 27 | msgid "Conversion plugin for Vogen project file" 28 | msgstr "Vogen 工程格式转换插件" 29 | 30 | msgid "SoulMelody" 31 | msgstr "岁月静好_初心不忘" 32 | 33 | -------------------------------------------------------------------------------- /libresvip/plugins/vog/model.py: -------------------------------------------------------------------------------- 1 | from pydantic import Field 2 | 3 | from libresvip.model.base import BaseModel 4 | 5 | 6 | class VogenNote(BaseModel): 7 | pitch: int | None = None 8 | lyric: str | None = None 9 | rom: str | None = None 10 | on: int | None = None 11 | dur: int | None = None 12 | 13 | 14 | class VogenTrack(BaseModel): 15 | name: str | None = None 16 | singer_id: str | None = Field(None, alias="singerId") 17 | rom_scheme: str | None = Field("", alias="romScheme") 18 | notes: list[VogenNote] = Field(default_factory=list) 19 | 20 | 21 | class VogenProject(BaseModel): 22 | time_sig0: str = Field(alias="timeSig0") 23 | bpm0: float 24 | accom_offset: int | None = Field(0, alias="accomOffset") 25 | utts: list[VogenTrack] = Field(default_factory=list) 26 | -------------------------------------------------------------------------------- /libresvip/plugins/vog/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.model.option_mixins import StaticTempoMixin 4 | from libresvip.utils.translation import gettext_lazy as _ 5 | 6 | 7 | class InputOptions(BaseModel): 8 | pass 9 | 10 | 11 | class OutputOptions(StaticTempoMixin, BaseModel): 12 | singer_name: str = Field( 13 | title=_("Singer name"), 14 | description=_("Please enter the singer's English name."), 15 | default="Doaz", 16 | ) 17 | -------------------------------------------------------------------------------- /libresvip/plugins/vog/vog.po: -------------------------------------------------------------------------------- 1 | msgid "Singer name" 2 | msgstr "" 3 | 4 | msgid "Please enter the singer's English name." 5 | msgstr "" 6 | 7 | msgid "Vogen" 8 | msgstr "" 9 | 10 | msgid "Vogen project file" 11 | msgstr "" 12 | 13 | msgid "Conversion plugin for Vogen project file" 14 | msgstr "" 15 | 16 | msgid "SoulMelody" 17 | msgstr "" 18 | 19 | -------------------------------------------------------------------------------- /libresvip/plugins/vpr/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vpr/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vpr/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | DEFAULT_CHINESE_PHONEME: Final[str] = "l a" 4 | DEFAULT_JAPANESE_PHONEME: Final[str] = "4 a" 5 | PITCH_BEND_NAME: Final[str] = "pitchBend" 6 | PITCH_BEND_SENSITIVITY_NAME: Final[str] = "pitchBendSens" 7 | BPM_RATE: Final[float] = 100.0 8 | -------------------------------------------------------------------------------- /libresvip/plugins/vpr/locales/de_DE/LC_MESSAGES/vpr.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vpr/locales/de_DE/LC_MESSAGES/vpr.mo -------------------------------------------------------------------------------- /libresvip/plugins/vpr/locales/ja_JP/LC_MESSAGES/vpr.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vpr/locales/ja_JP/LC_MESSAGES/vpr.mo -------------------------------------------------------------------------------- /libresvip/plugins/vpr/locales/zh_CN/LC_MESSAGES/vpr.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vpr/locales/zh_CN/LC_MESSAGES/vpr.mo -------------------------------------------------------------------------------- /libresvip/plugins/vshp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vshp/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vshp/locales/de_DE/LC_MESSAGES/vshp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vshp/locales/de_DE/LC_MESSAGES/vshp.mo -------------------------------------------------------------------------------- /libresvip/plugins/vshp/locales/ja_JP/LC_MESSAGES/vshp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vshp/locales/ja_JP/LC_MESSAGES/vshp.mo -------------------------------------------------------------------------------- /libresvip/plugins/vshp/locales/zh_CN/LC_MESSAGES/vshp.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vshp/locales/zh_CN/LC_MESSAGES/vshp.mo -------------------------------------------------------------------------------- /libresvip/plugins/vshp/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.utils.translation import gettext_lazy as _ 4 | 5 | 6 | class InputOptions(BaseModel): 7 | wave_to_singing: bool = Field(True, title=_("Convert wave pattern to singing pattern")) 8 | use_edited_pitch: bool = Field(True, title=_("Use edited pitch curve")) 9 | use_edited_dynamics: bool = Field(True, title=_("Use edited dynamics curve")) 10 | import_dynamics: bool = Field(False, title=_("Import dynamics curve")) 11 | import_formant: bool = Field(False, title=_("Import formant curve")) 12 | import_breath: bool = Field(False, title=_("Import breath curve")) 13 | -------------------------------------------------------------------------------- /libresvip/plugins/vshp/utils.py: -------------------------------------------------------------------------------- 1 | import contextlib 2 | 3 | 4 | def ansi2unicode(content: bytes) -> str: 5 | for possible_encoding in [ 6 | "utf-8", 7 | "gbk", 8 | "shift-jis", 9 | "euc-kr", 10 | "big5", 11 | ]: 12 | with contextlib.suppress(UnicodeDecodeError): 13 | return content.decode(possible_encoding) 14 | return content.decode(errors="replace") 15 | -------------------------------------------------------------------------------- /libresvip/plugins/vshp/vocalshifter_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .model import VocalShifterProjectData 7 | from .options import InputOptions 8 | from .vocalshifter_parser import VocalShifterParser 9 | 10 | 11 | class VocalShifterConverter(plugin_base.ReadOnlyConverterBase): 12 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 13 | vshp_proj = VocalShifterProjectData.parse_file(path) 14 | return VocalShifterParser(options).parse_project(vshp_proj) 15 | -------------------------------------------------------------------------------- /libresvip/plugins/vshp/vshp.po: -------------------------------------------------------------------------------- 1 | msgid "Convert wave pattern to singing pattern" 2 | msgstr "" 3 | 4 | msgid "Use edited pitch curve" 5 | msgstr "" 6 | 7 | msgid "Use edited dynamics curve" 8 | msgstr "" 9 | 10 | msgid "Import dynamics curve" 11 | msgstr "" 12 | 13 | msgid "Import formant curve" 14 | msgstr "" 15 | 16 | msgid "Import breath curve" 17 | msgstr "" 18 | 19 | msgid "VocalShifter" 20 | msgstr "" 21 | 22 | msgid "VocalShifter project file" 23 | msgstr "" 24 | 25 | msgid "Import parameters from VocalShifter project file." 26 | msgstr "" 27 | 28 | msgid "SoulMelody" 29 | msgstr "" 30 | 31 | -------------------------------------------------------------------------------- /libresvip/plugins/vspx/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vspx/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vspx/locales/de_DE/LC_MESSAGES/vspx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vspx/locales/de_DE/LC_MESSAGES/vspx.mo -------------------------------------------------------------------------------- /libresvip/plugins/vspx/locales/de_DE/LC_MESSAGES/vspx.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vspx/vspx.po\n" 8 | "X-Crowdin-File-ID: 166\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:03\n" 14 | 15 | msgid "VocalSharp" 16 | msgstr "" 17 | 18 | msgid "VocalSharp project file" 19 | msgstr "VocalSharp Projektdatei" 20 | 21 | msgid "Conversion plugin for VocalSharp project file" 22 | msgstr "Konvertierungs-Plugin für VocalSharp Projektdateien" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/vspx/locales/ja_JP/LC_MESSAGES/vspx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vspx/locales/ja_JP/LC_MESSAGES/vspx.mo -------------------------------------------------------------------------------- /libresvip/plugins/vspx/locales/ja_JP/LC_MESSAGES/vspx.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vspx/vspx.po\n" 8 | "X-Crowdin-File-ID: 166\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:32\n" 14 | 15 | msgid "VocalSharp" 16 | msgstr "" 17 | 18 | msgid "VocalSharp project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for VocalSharp project file" 22 | msgstr "" 23 | 24 | msgid "SoulMelody" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/vspx/locales/zh_CN/LC_MESSAGES/vspx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vspx/locales/zh_CN/LC_MESSAGES/vspx.mo -------------------------------------------------------------------------------- /libresvip/plugins/vspx/locales/zh_CN/LC_MESSAGES/vspx.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vspx/vspx.po\n" 8 | "X-Crowdin-File-ID: 166\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-11-13 06:39\n" 14 | 15 | msgid "VocalSharp" 16 | msgstr "" 17 | 18 | msgid "VocalSharp project file" 19 | msgstr "VocalSharp 工程格式" 20 | 21 | msgid "Conversion plugin for VocalSharp project file" 22 | msgstr "VocalSharp格式转换插件" 23 | 24 | msgid "SoulMelody" 25 | msgstr "岁月静好_初心不忘" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/vspx/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnableInstrumentalTrackImportationMixin, 5 | EnablePitchImportationMixin, 6 | ) 7 | 8 | 9 | class InputOptions( 10 | EnableInstrumentalTrackImportationMixin, 11 | EnablePitchImportationMixin, 12 | BaseModel, 13 | ): 14 | pass 15 | 16 | 17 | class OutputOptions(BaseModel): 18 | pass 19 | -------------------------------------------------------------------------------- /libresvip/plugins/vspx/vspx.po: -------------------------------------------------------------------------------- 1 | msgid "VocalSharp" 2 | msgstr "" 3 | 4 | msgid "VocalSharp project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for VocalSharp project file" 8 | msgstr "" 9 | 10 | msgid "SoulMelody" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/plugins/vsq/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsq/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vsq/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | DEFAULT_PHONEME: Final[str] = "4 a" 4 | -------------------------------------------------------------------------------- /libresvip/plugins/vsq/locales/de_DE/LC_MESSAGES/vsq.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsq/locales/de_DE/LC_MESSAGES/vsq.mo -------------------------------------------------------------------------------- /libresvip/plugins/vsq/locales/ja_JP/LC_MESSAGES/vsq.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsq/locales/ja_JP/LC_MESSAGES/vsq.mo -------------------------------------------------------------------------------- /libresvip/plugins/vsq/locales/zh_CN/LC_MESSAGES/vsq.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsq/locales/zh_CN/LC_MESSAGES/vsq.mo -------------------------------------------------------------------------------- /libresvip/plugins/vsq/vsq.po: -------------------------------------------------------------------------------- 1 | msgid "Ignore all breath notes" 2 | msgstr "" 3 | 4 | msgid "Keep as normal notes" 5 | msgstr "" 6 | 7 | msgid "Lyric text encoding" 8 | msgstr "" 9 | 10 | msgid "Unless the lyrics are garbled, this option should not be changed." 11 | msgstr "" 12 | 13 | msgid "The way to handle breath notes" 14 | msgstr "" 15 | 16 | msgid "Ticks per beat" 17 | msgstr "" 18 | 19 | msgid "" 20 | "Also known as parts per quarter, ticks per quarter note, the number of " 21 | "pulses per quarter note. This setting should not be changed unless you " 22 | "know what it is." 23 | msgstr "" 24 | 25 | msgid "Vsq" 26 | msgstr "" 27 | 28 | msgid "Vocaloid 2 Sequence file" 29 | msgstr "" 30 | 31 | msgid "Conversion plugin for Vocaloid 2 sequence file" 32 | msgstr "" 33 | 34 | msgid "Selio Jiang" 35 | msgstr "" 36 | 37 | -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsqx/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/constants.py: -------------------------------------------------------------------------------- 1 | from typing import Final 2 | 3 | DEFAULT_CHINESE_PHONEME: Final[str] = "l a" 4 | DEFAULT_JAPANESE_PHONEME: Final[str] = "4 a" 5 | BPM_RATE: Final[float] = 100.0 6 | -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/locales/de_DE/LC_MESSAGES/vsqx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsqx/locales/de_DE/LC_MESSAGES/vsqx.mo -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/locales/ja_JP/LC_MESSAGES/vsqx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsqx/locales/ja_JP/LC_MESSAGES/vsqx.mo -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/locales/zh_CN/LC_MESSAGES/vsqx.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vsqx/locales/zh_CN/LC_MESSAGES/vsqx.mo -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/models/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /libresvip/plugins/vsqx/models/enums.py: -------------------------------------------------------------------------------- 1 | # mypy: disable-error-code="misc" 2 | import enum 3 | from typing import Annotated 4 | 5 | from pydantic import Field 6 | 7 | from libresvip.utils.translation import gettext_lazy as _ 8 | 9 | 10 | class VsqxVersion(enum.IntEnum): 11 | VSQ3: Annotated[int, Field(title=_("VSQx 3"))] = 3 12 | VSQ4: Annotated[int, Field(title=_("VSQx 4"))] = 4 13 | 14 | 15 | class VocaloidLanguage(enum.IntEnum): 16 | JAPANESE: Annotated[int, Field(title=_("日本語"))] = 0 17 | ENGLISH: Annotated[int, Field(title=_("English"))] = 1 18 | KOREAN: Annotated[int, Field(title=_("한국어"))] = 2 19 | SPANISH: Annotated[int, Field(title=_("Español"))] = 3 20 | SIMPLIFIED_CHINESE: Annotated[int, Field(title=_("简体中文"))] = 4 21 | -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vvproj/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/locales/de_DE/LC_MESSAGES/vvproj.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vvproj/locales/de_DE/LC_MESSAGES/vvproj.mo -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/locales/de_DE/LC_MESSAGES/vvproj.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vvproj/vvproj.po\n" 8 | "X-Crowdin-File-ID: 182\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:03\n" 14 | 15 | msgid "Unsupported lyric: " 16 | msgstr "Nicht unterstützter Text: " 17 | 18 | msgid "VVProj" 19 | msgstr "" 20 | 21 | msgid "VOICEVOX Project file" 22 | msgstr "VOICEVOX Projektdatei" 23 | 24 | msgid "Conversion plugin for VOICEVOX Project file" 25 | msgstr "Konvertierungs-Plugin für VOICEVOX-Projektdateien" 26 | 27 | msgid "SoulMelody" 28 | msgstr "" 29 | 30 | -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/locales/ja_JP/LC_MESSAGES/vvproj.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vvproj/locales/ja_JP/LC_MESSAGES/vvproj.mo -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/locales/ja_JP/LC_MESSAGES/vvproj.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vvproj/vvproj.po\n" 8 | "X-Crowdin-File-ID: 182\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-12-12 01:22\n" 14 | 15 | msgid "Unsupported lyric: " 16 | msgstr "" 17 | 18 | msgid "VVProj" 19 | msgstr "" 20 | 21 | msgid "VOICEVOX Project file" 22 | msgstr "" 23 | 24 | msgid "Conversion plugin for VOICEVOX Project file" 25 | msgstr "" 26 | 27 | msgid "SoulMelody" 28 | msgstr "" 29 | 30 | -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/locales/zh_CN/LC_MESSAGES/vvproj.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vvproj/locales/zh_CN/LC_MESSAGES/vvproj.mo -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/locales/zh_CN/LC_MESSAGES/vvproj.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/vvproj/vvproj.po\n" 8 | "X-Crowdin-File-ID: 182\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-12-12 01:23\n" 14 | 15 | msgid "Unsupported lyric: " 16 | msgstr "不支持的歌词: " 17 | 18 | msgid "VVProj" 19 | msgstr "" 20 | 21 | msgid "VOICEVOX Project file" 22 | msgstr "VOICEVOX 工程文件" 23 | 24 | msgid "Conversion plugin for VOICEVOX Project file" 25 | msgstr "VOICEVOX 工程格式转换插件" 26 | 27 | msgid "SoulMelody" 28 | msgstr "岁月静好_初心不忘" 29 | 30 | -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import EnablePitchImportationMixin 4 | 5 | 6 | class InputOptions(EnablePitchImportationMixin, BaseModel): 7 | pass 8 | 9 | 10 | class OutputOptions(BaseModel): 11 | pass 12 | -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/voicevox_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.core.compat import json 4 | from libresvip.extension import base as plugin_base 5 | from libresvip.model.base import Project 6 | 7 | from .model import VoiceVoxProject 8 | from .options import InputOptions, OutputOptions 9 | from .voicevox_generator import VOICEVOXGenerator 10 | from .voicevox_parser import VOICEVOXParser 11 | 12 | 13 | class VOICEVOXConverter(plugin_base.SVSConverterBase): 14 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 15 | voicevox_project = VoiceVoxProject.model_validate_json(path.read_bytes()) 16 | return VOICEVOXParser(options).parse_project(voicevox_project) 17 | 18 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 19 | voicevox_project = VOICEVOXGenerator(options).generate_project(project) 20 | path.write_bytes( 21 | json.dumps(voicevox_project.model_dump(mode="json", by_alias=True)).encode("utf-8") 22 | ) 23 | -------------------------------------------------------------------------------- /libresvip/plugins/vvproj/vvproj.po: -------------------------------------------------------------------------------- 1 | msgid "Unsupported lyric: " 2 | msgstr "" 3 | 4 | msgid "VVProj" 5 | msgstr "" 6 | 7 | msgid "VOICEVOX Project file" 8 | msgstr "" 9 | 10 | msgid "Conversion plugin for VOICEVOX Project file" 11 | msgstr "" 12 | 13 | msgid "SoulMelody" 14 | msgstr "" 15 | 16 | -------------------------------------------------------------------------------- /libresvip/plugins/vxf/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vxf/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/vxf/locales/de_DE/LC_MESSAGES/vxf.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vxf/locales/de_DE/LC_MESSAGES/vxf.mo -------------------------------------------------------------------------------- /libresvip/plugins/vxf/locales/ja_JP/LC_MESSAGES/vxf.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vxf/locales/ja_JP/LC_MESSAGES/vxf.mo -------------------------------------------------------------------------------- /libresvip/plugins/vxf/locales/zh_CN/LC_MESSAGES/vxf.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/vxf/locales/zh_CN/LC_MESSAGES/vxf.mo -------------------------------------------------------------------------------- /libresvip/plugins/vxf/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | from libresvip.core.constants import DEFAULT_BPM, TICKS_IN_BEAT 4 | from libresvip.model.option_mixins import EnablePitchImportationMixin 5 | from libresvip.utils.translation import gettext_lazy as _ 6 | 7 | 8 | class InputOptions(EnablePitchImportationMixin, BaseModel): 9 | default_bpm: float = Field( 10 | default=DEFAULT_BPM, 11 | title=_("Default BPM"), 12 | description=_("Used when no BPM information is found in the MIDI file."), 13 | ) 14 | 15 | 16 | class OutputOptions(BaseModel): 17 | ticks_per_beat: int = Field( 18 | default=TICKS_IN_BEAT, 19 | title=_("Ticks per beat"), 20 | description=_( 21 | "Also known as parts per quarter, ticks per quarter note, the number of pulses per quarter note. This setting should not be changed unless you know what it is." 22 | ), 23 | ) 24 | -------------------------------------------------------------------------------- /libresvip/plugins/vxf/vx_beta_converter.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from libresvip.extension import base as plugin_base 4 | from libresvip.model.base import Project 5 | 6 | from .model import VxFile 7 | from .options import InputOptions, OutputOptions 8 | from .vx_beta_generator import VxBetaGenerator 9 | from .vx_beta_parser import VxBetaParser 10 | 11 | 12 | class VxBetaConverter(plugin_base.SVSConverterBase): 13 | def load(self, path: pathlib.Path, options: InputOptions) -> Project: 14 | vx_file = VxFile.parse(path.read_bytes()) 15 | return VxBetaParser(options).parse_project(vx_file) 16 | 17 | def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None: 18 | vx_file = VxBetaGenerator(options).generate_project(project) 19 | path.write_bytes(VxFile.build(vx_file)) 20 | -------------------------------------------------------------------------------- /libresvip/plugins/vxf/vxf.po: -------------------------------------------------------------------------------- 1 | msgid "Default BPM" 2 | msgstr "" 3 | 4 | msgid "Used when no BPM information is found in the MIDI file." 5 | msgstr "" 6 | 7 | msgid "Ticks per beat" 8 | msgstr "" 9 | 10 | msgid "" 11 | "Also known as parts per quarter, ticks per quarter note, the number of " 12 | "pulses per quarter note. This setting should not be changed unless you " 13 | "know what it is." 14 | msgstr "" 15 | 16 | msgid "No tempo labels found in the imported project." 17 | msgstr "" 18 | 19 | msgid "VX-β" 20 | msgstr "" 21 | 22 | msgid "VX-β project file" 23 | msgstr "" 24 | 25 | msgid "Conversion plugin for VX-β project file" 26 | msgstr "" 27 | 28 | msgid "SoulMelody" 29 | msgstr "" 30 | 31 | -------------------------------------------------------------------------------- /libresvip/plugins/vxf/vxf.yapsy-plugin: -------------------------------------------------------------------------------- 1 | [Core] 2 | name = VX-β 3 | module = vx_beta_converter 4 | 5 | [Documentation] 6 | Author = SoulMelody 7 | Version = 3.0.2 8 | Website = https://space.bilibili.com/175862486 9 | Format = VX-β project file 10 | Description = Conversion plugin for VX-β project file 11 | Suffix = vxf -------------------------------------------------------------------------------- /libresvip/plugins/y77/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/y77/__init__.py -------------------------------------------------------------------------------- /libresvip/plugins/y77/locales/de_DE/LC_MESSAGES/y77.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/y77/locales/de_DE/LC_MESSAGES/y77.mo -------------------------------------------------------------------------------- /libresvip/plugins/y77/locales/de_DE/LC_MESSAGES/y77.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: de\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/y77/y77.po\n" 8 | "X-Crowdin-File-ID: 172\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: German\n" 12 | "Language: de_DE\n" 13 | "PO-Revision-Date: 2024-12-19 01:03\n" 14 | 15 | msgid "Y77" 16 | msgstr "" 17 | 18 | msgid "Yuan77 project file" 19 | msgstr "Yuan77 Projektdatei" 20 | 21 | msgid "Conversion plugin for Yuan77 project file" 22 | msgstr "Konvertierungs-Plugin für Yuan77-Projektdateien" 23 | 24 | msgid "FlutyDeer" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/y77/locales/ja_JP/LC_MESSAGES/y77.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/y77/locales/ja_JP/LC_MESSAGES/y77.mo -------------------------------------------------------------------------------- /libresvip/plugins/y77/locales/ja_JP/LC_MESSAGES/y77.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: ja\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/y77/y77.po\n" 8 | "X-Crowdin-File-ID: 172\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Japanese\n" 12 | "Language: ja_JP\n" 13 | "PO-Revision-Date: 2024-11-13 04:32\n" 14 | 15 | msgid "Y77" 16 | msgstr "" 17 | 18 | msgid "Yuan77 project file" 19 | msgstr "" 20 | 21 | msgid "Conversion plugin for Yuan77 project file" 22 | msgstr "" 23 | 24 | msgid "FlutyDeer" 25 | msgstr "" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/y77/locales/zh_CN/LC_MESSAGES/y77.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/plugins/y77/locales/zh_CN/LC_MESSAGES/y77.mo -------------------------------------------------------------------------------- /libresvip/plugins/y77/locales/zh_CN/LC_MESSAGES/y77.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Plural-Forms: nplurals=1; plural=0;\n" 4 | "X-Crowdin-Project: libresvip\n" 5 | "X-Crowdin-Project-ID: 645830\n" 6 | "X-Crowdin-Language: zh-CN\n" 7 | "X-Crowdin-File: /main/libresvip/plugins/y77/y77.po\n" 8 | "X-Crowdin-File-ID: 172\n" 9 | "Project-Id-Version: libresvip\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Language-Team: Chinese Simplified\n" 12 | "Language: zh_CN\n" 13 | "PO-Revision-Date: 2024-12-17 11:16\n" 14 | 15 | msgid "Y77" 16 | msgstr "" 17 | 18 | msgid "Yuan77 project file" 19 | msgstr "元七七工程文件" 20 | 21 | msgid "Conversion plugin for Yuan77 project file" 22 | msgstr "元七七工程格式转换插件" 23 | 24 | msgid "FlutyDeer" 25 | msgstr "笛鹿" 26 | 27 | -------------------------------------------------------------------------------- /libresvip/plugins/y77/model.py: -------------------------------------------------------------------------------- 1 | from pydantic import Field 2 | 3 | from libresvip.core.constants import DEFAULT_BPM 4 | from libresvip.model.base import BaseModel 5 | 6 | 7 | class Y77Note(BaseModel): 8 | py: str = "" 9 | length: int = Field(alias="len") 10 | start: int 11 | lyric: str 12 | pitch: int 13 | pbs: int = 0 14 | pit: list[int | float] = Field(default_factory=list) 15 | 16 | 17 | class Y77Project(BaseModel): 18 | bpm: float = DEFAULT_BPM 19 | bars: int = 0 20 | notes: list[Y77Note] = Field(default_factory=list) 21 | nnote: int = 0 22 | bbar: int = 4 23 | v: int = 10001 24 | bbeat: int = 4 25 | -------------------------------------------------------------------------------- /libresvip/plugins/y77/options.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | from libresvip.model.option_mixins import ( 4 | EnablePitchImportationMixin, 5 | SelectSingleTrackMixin, 6 | StaticTempoMixin, 7 | ) 8 | 9 | 10 | class InputOptions(EnablePitchImportationMixin, BaseModel): 11 | pass 12 | 13 | 14 | class OutputOptions(SelectSingleTrackMixin, StaticTempoMixin): 15 | pass 16 | -------------------------------------------------------------------------------- /libresvip/plugins/y77/y77.po: -------------------------------------------------------------------------------- 1 | msgid "Y77" 2 | msgstr "" 3 | 4 | msgid "Yuan77 project file" 5 | msgstr "" 6 | 7 | msgid "Conversion plugin for Yuan77 project file" 8 | msgstr "" 9 | 10 | msgid "FlutyDeer" 11 | msgstr "" 12 | 13 | -------------------------------------------------------------------------------- /libresvip/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/py.typed -------------------------------------------------------------------------------- /libresvip/res/libresvip.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/res/libresvip.ico -------------------------------------------------------------------------------- /libresvip/res/locales/de_DE/LC_MESSAGES/libresvip.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/res/locales/de_DE/LC_MESSAGES/libresvip.mo -------------------------------------------------------------------------------- /libresvip/res/locales/ja_JP/LC_MESSAGES/libresvip.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/res/locales/ja_JP/LC_MESSAGES/libresvip.mo -------------------------------------------------------------------------------- /libresvip/res/locales/qt_standard_buttons.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | QPlatformTheme 6 | 7 | OK 8 | OK 9 | 10 | 11 | Cancel 12 | Cancel 13 | 14 | 15 | Yes to &All 16 | Yes to All 17 | 18 | 19 | N&o to All 20 | No to All 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /libresvip/res/locales/zh_CN/LC_MESSAGES/libresvip.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/res/locales/zh_CN/LC_MESSAGES/libresvip.mo -------------------------------------------------------------------------------- /libresvip/res/qml/components/icon_menu_item.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Window 3 | import QtQuick.Controls 4 | import QtQuick.Controls.Material 5 | import LibreSVIP 6 | 7 | MenuItem { 8 | property string icon_name: "" 9 | property string label: "" 10 | contentItem: Row { 11 | Label { 12 | text: iconicFontLoader.icon(icon_name) 13 | font.family: "Material Design Icons" 14 | font.pixelSize: Qt.application.font.pixelSize * 1.2 15 | width: 35 16 | anchors.verticalCenter: parent.verticalCenter 17 | } 18 | Label { 19 | text: label 20 | width: parent.width - 35 21 | anchors.verticalCenter: parent.verticalCenter 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /libresvip/res/qml/components/qmldir: -------------------------------------------------------------------------------- 1 | module LibreSVIP 2 | 3 | RunningIndicator 1.0 running_indicator.qml 4 | 5 | Dialogs 1.0 dialogs.qml 6 | 7 | MessageBox 1.0 message_box.qml 8 | 9 | Actions 1.0 actions.qml 10 | 11 | SettingsDialog 1.0 settings_dialog.qml 12 | 13 | IconButton 1.0 icon_button.qml 14 | 15 | IconMenuItem 1.0 icon_menu_item.qml 16 | 17 | TopToolbar 1.0 top_toolbar.qml 18 | 19 | LabeledComboBox 1.0 labeled_combo_box.qml 20 | 21 | PluginInfo 1.0 plugin_info.qml 22 | 23 | DashedRectangle 1.0 dashed_rectangle.qml 24 | 25 | ConverterPage 1.0 converter_page.qml -------------------------------------------------------------------------------- /libresvip/res/qml/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | main.qml 4 | components/qmldir 5 | components/actions.qml 6 | components/converter_page.qml 7 | components/dashed_rectangle.qml 8 | components/dialogs.qml 9 | components/icon_button.qml 10 | components/icon_menu_item.qml 11 | components/labeled_combo_box.qml 12 | components/message_box.qml 13 | components/plugin_info.qml 14 | components/running_indicator.qml 15 | components/settings_dialog.qml 16 | components/task_row.qml 17 | components/top_toolbar.qml 18 | 19 | 20 | -------------------------------------------------------------------------------- /libresvip/res/resources.rcc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/res/resources.rcc -------------------------------------------------------------------------------- /libresvip/tui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/tui/__init__.py -------------------------------------------------------------------------------- /libresvip/tui/__main__.py: -------------------------------------------------------------------------------- 1 | from libresvip.tui.app import TUIApp 2 | 3 | 4 | def main() -> None: 5 | app = TUIApp() 6 | app.run() 7 | 8 | 9 | if __name__ == "__main__": 10 | main() 11 | -------------------------------------------------------------------------------- /libresvip/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/libresvip/utils/__init__.py -------------------------------------------------------------------------------- /libresvip/web/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | from multiprocessing import freeze_support 3 | 4 | freeze_support() 5 | 6 | from libresvip.core.constants import app_dir # noqa: E402 7 | 8 | os.environ.setdefault("NICEGUI_STORAGE_PATH", str(app_dir.user_config_path / ".nicegui")) 9 | -------------------------------------------------------------------------------- /libresvip/web/__main__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import sys 4 | 5 | from loguru import logger 6 | 7 | from libresvip.web.pages import main 8 | 9 | 10 | def unraisablehook(unraisable: sys.UnraisableHookArgs) -> None: 11 | if unraisable.exc_type is not KeyboardInterrupt: 12 | logger.exception(unraisable.exc_value) 13 | del unraisable 14 | 15 | 16 | sys.unraisablehook = unraisablehook 17 | 18 | if __name__ in {"__main__", "__mp_main__"}: 19 | main() 20 | -------------------------------------------------------------------------------- /packaging/docker-compose-build-wine-arm64.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | run_pyinstaller: 4 | image: linaro/wine-arm64 5 | volumes: 6 | - ./clangarm64:/clangarm64 7 | - ../:/src 8 | command: wine-arm64 cmd /c "cd /src/packaging && set PATH=/clangarm64/bin;%PATH% && pyinstaller libresvip.spec" -------------------------------------------------------------------------------- /packaging/docker-compose-msys2-clangarm64.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | install_mingw_dependencies: 4 | image: ghcr.io/msys2/msys2-docker-experimental 5 | volumes: 6 | - ./clangarm64:/root/.wine/drive_c/msys64/clangarm64 7 | - ./install_msys2_requirements.sh:/root/.wine/drive_c/install_msys2_requirements.sh:ro 8 | command: msys2 -c "bash /c/install_msys2_requirements.sh" || exit 0 9 | 10 | install_python_dependencies: 11 | image: linaro/wine-arm64 12 | volumes: 13 | - ./clangarm64:/clangarm64 14 | - ../:/src 15 | command: > 16 | wine-arm64 cmd /c "cd /src/dist && 17 | set PATH=/clangarm64/bin;%PATH% && 18 | dir *.whl /b > requirements.txt && 19 | python -m pip install -r requirements.txt --no-deps && 20 | cd ../packaging && 21 | python -m pip install -r requirements-desktop.txt" 22 | depends_on: 23 | install_mingw_dependencies: 24 | condition: service_completed_successfully -------------------------------------------------------------------------------- /packaging/macos-entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.apple.security.cs.allow-jit 7 | 8 | com.apple.security.cs.allow-unsigned-executable-memory 9 | 10 | com.apple.security.cs.disable-library-validation 11 | 12 | 13 | -------------------------------------------------------------------------------- /packaging/requirements-desktop.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/packaging/requirements-desktop.in -------------------------------------------------------------------------------- /packaging/requirements-flet.in: -------------------------------------------------------------------------------- 1 | flet-permission-handler -------------------------------------------------------------------------------- /packaging/requirements-mobile.in: -------------------------------------------------------------------------------- 1 | pydantic==2.9.1 2 | pydantic-core==2.23.3 -------------------------------------------------------------------------------- /packaging/requirements-pyinstaller.in: -------------------------------------------------------------------------------- 1 | shellingham 2 | pyinstaller==6.14.0 ; platform_system != "Windows" or platform_machine == "arm64" 3 | https://github.com/webcomics/pyinstaller-builder/releases/download/snapshot/pyinstaller-6.14.0-py3-none-any.whl ; platform_system == "Windows" and platform_machine != "arm64" 4 | pillow ; sys_platform == "darwin" 5 | -------------------------------------------------------------------------------- /packaging/requirements-pywebview.in: -------------------------------------------------------------------------------- 1 | pywebview -------------------------------------------------------------------------------- /scripts/babel.cfg: -------------------------------------------------------------------------------- 1 | [extractors] 2 | yapsy_plugin = extract_messages:extract_from_plugin_metadata 3 | qt_ts = extract_messages:extract_from_qt_ts 4 | 5 | [yapsy_plugin: **.yapsy-plugin] 6 | 7 | [qt_ts: **.ts] 8 | 9 | [python: **.py] -------------------------------------------------------------------------------- /scripts/batch_compile_catalog.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | 3 | from babel.messages import setuptools_frontend 4 | 5 | if __name__ == "__main__": 6 | base_dir = pathlib.Path("../libresvip") 7 | for file_path in base_dir.rglob("**/*.po"): 8 | if file_path.parent.name == "LC_MESSAGES": 9 | continue 10 | cmdinst = setuptools_frontend.compile_catalog() 11 | cmdinst.initialize_options() 12 | cmdinst.domain = file_path.stem 13 | cmdinst.directory = str(file_path.parent / "locales") 14 | cmdinst.output_file = str(file_path.with_suffix(".mo")) 15 | cmdinst.finalize_options() 16 | cmdinst.run() 17 | -------------------------------------------------------------------------------- /scripts/gen_snake_case_pyi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | python -m PySide6.support.generate_pyi all --feature snake_case true_property -------------------------------------------------------------------------------- /scripts/patch_qt_resource.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | import subprocess 3 | 4 | if __name__ == "__main__": 5 | subprocess.call( 6 | [ 7 | "pyside6-qmlformat", 8 | "-i", 9 | *(str(qml_path) for qml_path in pathlib.Path("../libresvip/res/qml").rglob("**/*.qml")), 10 | ] 11 | ) 12 | subprocess.call( 13 | [ 14 | "pyside6-rcc", 15 | "--binary", 16 | "-o", 17 | "../libresvip/res/resources.rcc", 18 | "../libresvip/res/qml/resources.qrc", 19 | ] 20 | ) 21 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/tests/__init__.py -------------------------------------------------------------------------------- /tests/data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoulMelody/LibreSVIP/b2240d20b2fb0acd8d32304e9e33273eb86e7a92/tests/data/.gitkeep --------------------------------------------------------------------------------