diff --git a/Musicreater.New.py b/Musicreater.New.py index 2420ed4..ec75b8e 100644 --- a/Musicreater.New.py +++ b/Musicreater.New.py @@ -71,7 +71,7 @@ hb = r''' __ __ def __main__(): - import datetime,time,random,os,sys + import datetime,time,random,os,sys,zhdate if datetime.date.today().month == 4 and datetime.date.today().day == 3: if sys.platform == 'win32': os.system('color 4e') @@ -80,6 +80,9 @@ def __main__(): print(hb[i], end='', flush=True) time.sleep(random.random() * 0.001) input("金羿 生日快乐!") + elif '三月初五' in zhdate.ZhDate.today().chinese(): + input('缅怀先祖 祭祀忠勇 勿忘国耻 振兴中华') + else: disp() diff --git a/README.md b/README.md index a71c811..f0065dc 100644 --- a/README.md +++ b/README.md @@ -137,8 +137,8 @@ python3 Musicreater.py * - [ ] 4.修改UI界面使之适应当前功能 * - [ ] 5.支持自动给音符盒绑定更多的音色 * - [ ] 6.可以由.schematic文件导入地图,亦可反向处理 -* - [ ] 7.制作软件下载器使用户更直观地操作 -* - [x] 8.支持自定义创建websockeet服务器播放音乐(感谢由 Fuckcraft “鸣凤鸽子”等 带来的我的世界websocket服务器功能) +* - [x] 7.制作软件下载器使用户更直观地操作 +* - [x] 8.支持自定义创建websockeet服务器播放音乐 * - [ ] 9.支持使用红石播放音乐 * - [ ] 10.支持采用延时的播放器 * - [ ] 11.支持使用bdx导出结构 diff --git a/README_EN.md b/README_EN.md index 1447bc4..a6c82a3 100644 --- a/README_EN.md +++ b/README_EN.md @@ -128,31 +128,6 @@ Musicreater - > function (package) - > the following four new functions 1. QQ 4740437765 -## TO-DO - -* - [x] 可以使用由神羽提供的音乐资源包 -* - [x] Language Support -* - [x] .bdx encode support -* - [ ] 1.可以导出自定义的结构文件用于存储要导入地图中的结构 -* - [ ] 2.progress bar -* - [ ] 3.可以将音乐写入音符盒(红乐) -* - [ ] 4.修改UI界面使之适应当前功能 -* - [ ] 5.支持自动给音符盒绑定更多的音色 -* - [ ] 6.可以由.schematic文件导入地图,亦可反向处理 -* - [ ] 7.制作软件下载器使用户更直观地操作 -* - [x] 8.支持自定义创建websockeet服务器播放音乐(感谢由 Fuckcraft “鸣凤鸽子”等 带来的我的世界websocket服务器功能) -* - [ ] 9.支持使用红石播放音乐 -* - [ ] 10.支持采用延时的播放器 -* - [ ] 11.支持使用bdx导出结构 -* - [ ] 12.支持采用tp的方法播放 -* - [ ] 13.支持识别曲谱(简谱)图片解析音乐 -* - [ ] 14.支持使用瀑布流的方式播放音乐 -* - [ ] 15.支持读入Everyone Piano的曲谱文件(.eop) -* - [ ] 16.支持读入Musescore的通用曲谱文件,即musicXML(.mscz、.mscx) -* - [ ] 17.支持自动搜寻地图目录位置(网易&微软) -* - [ ] 18.支持读入JPword曲谱文件(.jpd) -* - [ ] 19.新的UI设计,以及UI主题文件 -* - [ ] 20.以小节为单位做音符播放时间对标 diff --git a/msctLib/__pycache__/display.cpython-38.pyc b/msctLib/__pycache__/display.cpython-38.pyc index c8ad2c6..9fadcc9 100644 Binary files a/msctLib/__pycache__/display.cpython-38.pyc and b/msctLib/__pycache__/display.cpython-38.pyc differ diff --git a/msctLib/__pycache__/log.cpython-38.pyc b/msctLib/__pycache__/log.cpython-38.pyc index 341344e..a7e7571 100644 Binary files a/msctLib/__pycache__/log.cpython-38.pyc and b/msctLib/__pycache__/log.cpython-38.pyc differ diff --git a/msctLib/display.py b/msctLib/display.py index 15202af..fc3710e 100644 --- a/msctLib/display.py +++ b/msctLib/display.py @@ -11,8 +11,12 @@ from msctLib.log import log DEFAULTBLUE = (0, 137, 242) +# 0089F2 + WEAKBLUE = (0, 161, 231) LIGHTBLUE = (38, 226, 255) +# 26E2FF + RED = (255, 52, 50) PURPLE = (171, 112, 255) GREEN = (0, 255, 33) @@ -73,7 +77,7 @@ class disp: ''' # 载入参量 注意!图标将不被载入参数 - self.root = root + self.__root = root '''窗口根''' self.title = title @@ -94,6 +98,9 @@ class disp: self.notemap = notemap '''音符列表''' + self.infoBar = infobar + '''信息显示版''' + self.debug = debug @@ -113,13 +120,13 @@ class disp: def setTitle(self) -> None: '''设置窗口标题''' - self.root.title = self.title + self.__root.title = self.title if self.debug: log(f"设置窗口标题{self.title}") def setGeometry(self,geometry:str = '0x0') -> None: '''设置窗口大小''' - self.root.geometry(geometry) + self.__root.geometry(geometry) if self.debug: log(f"设置窗口大小{geometry}") @@ -132,17 +139,17 @@ class disp: if not self.debug: try: if default: - self.root.iconbitmap(bitmap, default) + self.__root.iconbitmap(bitmap, default) log(f'设置图标为{bitmap},默认为{default}') else: - self.root.iconbitmap(bitmap) + self.__root.iconbitmap(bitmap) log(f'设置图标为{bitmap}') return True except Exception as e: log(str(e), 'ERROR') return False else: - self.root.iconbitmap(bitmap, default) + self.__root.iconbitmap(bitmap, default) return def setMenu(self) -> None: @@ -158,7 +165,7 @@ class disp: log('无法读取菜单信息', 'WARRING') # 如果不是空参数则新建菜单 self.RootMenu = {} - self.mainMenuBar = tk.Menu(self.root) + self.mainMenuBar = tk.Menu(self.__root) for menuName, menuCmd in self.menuWidgets.items(): # 取得一个菜单名和一堆菜单函数及其显示名称 menu = tk.Menu(self.mainMenuBar, tearoff=0) @@ -169,7 +176,7 @@ class disp: menu.add_separator() self.mainMenuBar.add_cascade(label=menuName, menu=menu) self.RootMenu[menuName] = menu - self.root.config(menu=self.mainMenuBar) + self.__root.config(menu=self.mainMenuBar) def addMenu(self, menuRoot: str = '', menuLabel: str = '', menuCommand=None): '''增加一个菜单项 @@ -209,7 +216,7 @@ class disp: :信息显示版 InfoBar ''' self._wordviewBar = tk.Label( - self.root, bg='white', fg='black', text=self.wordView, font=(fontPattern[0], 30) + self.__root, bg='white', fg='black', text=self.wordView, font=(fontPattern[0], 30) ) self.setWordView(self.wordView) diff --git a/msctLib/开发说明兼指南.md b/msctLib/开发说明兼指南.md index b172873..5c51d48 100644 --- a/msctLib/开发说明兼指南.md +++ b/msctLib/开发说明兼指南.md @@ -52,55 +52,128 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文 - 变量 - 1. root - 窗口根,即一个Tk类,注意,外部调用请不要直接访问窗口根 - 因为这可不一定是Tk的类,加载其他窗口组件的话就是其他的 - 了。 - 2. title + 1. `infoBar` + + 信息显示栏,一个字符串,用于显示一些信息。 + + + 2. `title` + 窗口标题,字符串 - 3. menuWidgets - 对于窗口菜单的设定,其格式详见下方`setMenu`函数 - 4. wordView + + + 3. `menuWidgets` + + 对于窗口菜单的设定,其格式如下: + ```python + menuWidgets: dist = { # 菜单项目 + str"菜单名" : dict{ + str"选项名"|None : 选项函数 + }, + ... + } + ``` + + 注: + `菜单名` : `str` 显示在菜单上的字符串 + `选项名` : `str` 显示在菜单选项上的字符串 + `选项函数` : `function` 菜单调取的函数(无返回值,无入参) + 当 `选项名` 的布尔值判定为 `False` 的时候,无论 `选项函数` 为何,皆插入一段分割线,但 `选项函数` 不得为空 + + + 4. `wordView` + 显示在言论上的文字,字符串 - 5. buttons + + + 5. `buttons` + 快捷功能按钮的列表,列表的元素为字典,字典的键是按钮的名称,值为一个元组,元组中含有两个元素,其中元组的第1个元素为按钮图标,是一个图片的路径;第2个元素为执行的函数,其值应当是一个函数对象。 + ```python button: list = [ # 操作按钮部分 - dict = { - 按钮名称 : tuple(按钮图标,执行函数) + dict{ + str"按钮名称" : tuple( + 按钮图标, + 执行函数 + ) }, + ... ], ``` - 6. settingBox + + + 6. `settingBox` + 设置框,用于设置音乐的基本属性,例如词作者,曲作者等,设置格式如下: + ```python settingbox: list = [ #设置部分显示的字样及其对应的设置函数 - ( + tuple( 设置名称:str, 值类型:tuple, 显示内容:str, 设置操作函数:, - ) + ), + ... ] ``` + 其中,值类型可以是如下几个项 1. `('str',)` 字符串类型,使用文本框输入数据 2. `('bool',)` 布尔类型,使用复选框输入数据 - 3. `('num',最小值:int,最大值:int,步长:int = 1)` 数值类型,使用数值滑动条输入数据 + 3. `('num',最小值:float,最大值:float,步长:float = 1)` 数值类型,使用数值滑动条输入数据 4. `('list',列表项:list)` 单选类型,即列表中多选一,使用单选框输入数据 + 其中,值操作函数需要有一个参数,用于传递用户提供的设置值。 + + + 7. `notemap` + + 音符数据表,用于存储曲谱信息,存储格式如下 + ```python + notemap: list = [ # 音轨列表 + dict{ # 单个音轨 + 'instrument' : str"乐器", + 'velocity' : int 响度, + # 这里理论上需要写一个小节多少个X分音符 + # 以及小节里的都是几分音符 + # 但是这个留给以后来支持 + int 小节编号 : [ # 一个小节 + tuple( # 一个音符 + 时间 : int, + 持续 : int, + 乐器 : str, + 采样 : float, + 响度 : int, + ), + ... + ], + ... + }, + ... + ] + ``` + + 其中,对于每个音符: + 1. 时间 单位:帧 当前音符开始时,距离当前小节开始所经过的帧数 + 2. 持续 单位:帧 当前音符持续的帧数 + 3. 乐器 当前音符使用的乐器,需要在乐器列表中有所注册 + 4. 采样 当前音符在MC的采样音高(不含打击乐器) + 5. 响度 单位:格的-1次方 音符播放源距离播放者的距离的倒数 + - 函数 1. `setMenu`对菜单的基础设定 - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python + ```python { 菜单名 : { 选项名 : 选项函数 } } - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ``` 注: `菜单名` : `str` 显示在菜单上的字符串 @@ -155,13 +228,16 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文 - # 这里是全局设置 - 'name' : str, #项目名,即包名 - 'title': str, #音乐名称 - 'repeation': bool, #是否开启重复播放 - 'player_selection': str, #玩家选择器,用于选择播放的的玩家 - # 下面是音轨独立设置 - 'track_name': str, #此音轨的名字 - 'track_sbname': str, #此音轨所使用的计分板 - - 变量 - 使用类中的变量可以对类中的内容进行实时修改 +#### ??? + +全曲的设置应该如下: +```python +标题 : str = '无名' +副标题 : str = '' +作曲 : str = '佚名' +作词 : str = '' +歌曲版权信息 : str = '' +# bpm 暂时不需要 + + +``` \ No newline at end of file diff --git a/msctspt/__pycache__/bugReporter.cpython-38.pyc b/msctspt/__pycache__/bugReporter.cpython-38.pyc index 4820a20..cb5547d 100644 Binary files a/msctspt/__pycache__/bugReporter.cpython-38.pyc and b/msctspt/__pycache__/bugReporter.cpython-38.pyc differ diff --git a/msctspt/bugReporter.py b/msctspt/bugReporter.py index 3ee437a..03cf602 100644 --- a/msctspt/bugReporter.py +++ b/msctspt/bugReporter.py @@ -93,11 +93,11 @@ class report: class version: libraries = ( 'mido', 'amulet', 'amulet-core', 'amulet-nbt', 'piano_transcription_inference', 'pypinyin', - 'pyinstaller', 'py7zr','websockets', 'torch', 'requests' + 'pyinstaller', 'py7zr','websockets', 'torch', 'requests', 'zhdate' ) """当前所需库""" - version = ('0.2.0', 'Delta',) + version = ('0.1.6', 'Delta',) """当前版本""" def __init__(self) -> None: diff --git a/resources/MSCT Dev Log.txt b/resources/MSCT Dev Log.txt index cb0f94d..ed7f103 100644 --- a/resources/MSCT Dev Log.txt +++ b/resources/MSCT Dev Log.txt @@ -6,27 +6,6 @@ Copyright © W-YI 2022 本软件是金羿前作函数音创和世界音创的集合版本,同时增加了大量功能更新。 - To-Do -1.可以导出自定义的结构文件用于存储要导入地图中的结构 -2.进度条 -3.可以将音乐写入音符盒(红乐) -4.修改UI界面使之适应当前功能 -5.支持自动给音符盒绑定更多的音色 -6.可以由.schematic文件导入地图,亦可反向处理 -7.制作软件下载器使用户更直观地操作 -8.支持自定义创建websockeet服务器播放音乐(感谢由 Fuckcraft “鸣凤鸽子”等 带来的我的世界websocket服务器功能) -9.支持使用红石播放音乐 -10.支持采用延时的播放器 -11.支持使用bdx导出结构 -12.支持采用tp的方法播放 -13.支持识别曲谱(简谱)图片解析音乐 -14.支持使用瀑布流的方式播放音乐 -15.支持读入Everyone Piano的曲谱文件(.eop) -16.支持读入Musescore的通用曲谱文件,即musicXML(.mscz、.mscx) -17.支持自动搜寻地图目录位置(网易&微软) -18.支持读入JPword曲谱文件(.jpd) -19.新的UI设计,以及UI主题文件 -20.以小节为单位做音符播放时间对标 =============== 2022 年度挑战 @@ -53,6 +32,16 @@ Copyright © W-YI 2022 10.新增下载器,无需用户从源代码安装 + Delta 0.1.5 +2022 4 4 +0.新增金羿生日祝福 +1.修复诸多问题 +2.正在往0.2版本迭代更新 +3.预计半年之内可以发布新版本 +4.支持使用自动安装器下载安装 +5. + + Delta 0.1.5.2 2022 2 1 农历大年初一 0.程序图标完善