mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2024-11-11 01:27:35 +08:00
更新了内部数据格式文档,修复部分bug
This commit is contained in:
parent
dd34ac9998
commit
ae83f9c21e
@ -71,7 +71,7 @@ hb = r''' __ __
|
|||||||
|
|
||||||
|
|
||||||
def __main__():
|
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 datetime.date.today().month == 4 and datetime.date.today().day == 3:
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
os.system('color 4e')
|
os.system('color 4e')
|
||||||
@ -80,6 +80,9 @@ def __main__():
|
|||||||
print(hb[i], end='', flush=True)
|
print(hb[i], end='', flush=True)
|
||||||
time.sleep(random.random() * 0.001)
|
time.sleep(random.random() * 0.001)
|
||||||
input("金羿 生日快乐!")
|
input("金羿 生日快乐!")
|
||||||
|
elif '三月初五' in zhdate.ZhDate.today().chinese():
|
||||||
|
input('缅怀先祖 祭祀忠勇 勿忘国耻 振兴中华')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
disp()
|
disp()
|
||||||
|
|
||||||
|
@ -137,8 +137,8 @@ python3 Musicreater.py
|
|||||||
* - [ ] 4.修改UI界面使之适应当前功能
|
* - [ ] 4.修改UI界面使之适应当前功能
|
||||||
* - [ ] 5.支持自动给音符盒绑定更多的音色
|
* - [ ] 5.支持自动给音符盒绑定更多的音色
|
||||||
* - [ ] 6.可以由.schematic文件导入地图,亦可反向处理
|
* - [ ] 6.可以由.schematic文件导入地图,亦可反向处理
|
||||||
* - [ ] 7.制作软件下载器使用户更直观地操作
|
* - [x] 7.制作软件下载器使用户更直观地操作
|
||||||
* - [x] 8.支持自定义创建websockeet服务器播放音乐(感谢由 Fuckcraft <https://github.com/fuckcraft> “鸣凤鸽子”等 带来的我的世界websocket服务器功能)
|
* - [x] 8.支持自定义创建websockeet服务器播放音乐
|
||||||
* - [ ] 9.支持使用红石播放音乐
|
* - [ ] 9.支持使用红石播放音乐
|
||||||
* - [ ] 10.支持采用延时的播放器
|
* - [ ] 10.支持采用延时的播放器
|
||||||
* - [ ] 11.支持使用bdx导出结构
|
* - [ ] 11.支持使用bdx导出结构
|
||||||
|
25
README_EN.md
25
README_EN.md
@ -128,31 +128,6 @@ Musicreater - > function (package) - > the following four new functions
|
|||||||
|
|
||||||
1. QQ 4740437765
|
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 <https://github.com/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.以小节为单位做音符播放时间对标
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -11,8 +11,12 @@ from msctLib.log import log
|
|||||||
|
|
||||||
|
|
||||||
DEFAULTBLUE = (0, 137, 242)
|
DEFAULTBLUE = (0, 137, 242)
|
||||||
|
# 0089F2
|
||||||
|
|
||||||
WEAKBLUE = (0, 161, 231)
|
WEAKBLUE = (0, 161, 231)
|
||||||
LIGHTBLUE = (38, 226, 255)
|
LIGHTBLUE = (38, 226, 255)
|
||||||
|
# 26E2FF
|
||||||
|
|
||||||
RED = (255, 52, 50)
|
RED = (255, 52, 50)
|
||||||
PURPLE = (171, 112, 255)
|
PURPLE = (171, 112, 255)
|
||||||
GREEN = (0, 255, 33)
|
GREEN = (0, 255, 33)
|
||||||
@ -73,7 +77,7 @@ class disp:
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
# 载入参量 注意!图标将不被载入参数
|
# 载入参量 注意!图标将不被载入参数
|
||||||
self.root = root
|
self.__root = root
|
||||||
'''窗口根'''
|
'''窗口根'''
|
||||||
|
|
||||||
self.title = title
|
self.title = title
|
||||||
@ -94,6 +98,9 @@ class disp:
|
|||||||
self.notemap = notemap
|
self.notemap = notemap
|
||||||
'''音符列表'''
|
'''音符列表'''
|
||||||
|
|
||||||
|
self.infoBar = infobar
|
||||||
|
'''信息显示版'''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.debug = debug
|
self.debug = debug
|
||||||
@ -113,13 +120,13 @@ class disp:
|
|||||||
|
|
||||||
def setTitle(self) -> None:
|
def setTitle(self) -> None:
|
||||||
'''设置窗口标题'''
|
'''设置窗口标题'''
|
||||||
self.root.title = self.title
|
self.__root.title = self.title
|
||||||
if self.debug:
|
if self.debug:
|
||||||
log(f"设置窗口标题{self.title}")
|
log(f"设置窗口标题{self.title}")
|
||||||
|
|
||||||
def setGeometry(self,geometry:str = '0x0') -> None:
|
def setGeometry(self,geometry:str = '0x0') -> None:
|
||||||
'''设置窗口大小'''
|
'''设置窗口大小'''
|
||||||
self.root.geometry(geometry)
|
self.__root.geometry(geometry)
|
||||||
if self.debug:
|
if self.debug:
|
||||||
log(f"设置窗口大小{geometry}")
|
log(f"设置窗口大小{geometry}")
|
||||||
|
|
||||||
@ -132,17 +139,17 @@ class disp:
|
|||||||
if not self.debug:
|
if not self.debug:
|
||||||
try:
|
try:
|
||||||
if default:
|
if default:
|
||||||
self.root.iconbitmap(bitmap, default)
|
self.__root.iconbitmap(bitmap, default)
|
||||||
log(f'设置图标为{bitmap},默认为{default}')
|
log(f'设置图标为{bitmap},默认为{default}')
|
||||||
else:
|
else:
|
||||||
self.root.iconbitmap(bitmap)
|
self.__root.iconbitmap(bitmap)
|
||||||
log(f'设置图标为{bitmap}')
|
log(f'设置图标为{bitmap}')
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log(str(e), 'ERROR')
|
log(str(e), 'ERROR')
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
self.root.iconbitmap(bitmap, default)
|
self.__root.iconbitmap(bitmap, default)
|
||||||
return
|
return
|
||||||
|
|
||||||
def setMenu(self) -> None:
|
def setMenu(self) -> None:
|
||||||
@ -158,7 +165,7 @@ class disp:
|
|||||||
log('无法读取菜单信息', 'WARRING')
|
log('无法读取菜单信息', 'WARRING')
|
||||||
# 如果不是空参数则新建菜单
|
# 如果不是空参数则新建菜单
|
||||||
self.RootMenu = {}
|
self.RootMenu = {}
|
||||||
self.mainMenuBar = tk.Menu(self.root)
|
self.mainMenuBar = tk.Menu(self.__root)
|
||||||
for menuName, menuCmd in self.menuWidgets.items():
|
for menuName, menuCmd in self.menuWidgets.items():
|
||||||
# 取得一个菜单名和一堆菜单函数及其显示名称
|
# 取得一个菜单名和一堆菜单函数及其显示名称
|
||||||
menu = tk.Menu(self.mainMenuBar, tearoff=0)
|
menu = tk.Menu(self.mainMenuBar, tearoff=0)
|
||||||
@ -169,7 +176,7 @@ class disp:
|
|||||||
menu.add_separator()
|
menu.add_separator()
|
||||||
self.mainMenuBar.add_cascade(label=menuName, menu=menu)
|
self.mainMenuBar.add_cascade(label=menuName, menu=menu)
|
||||||
self.RootMenu[menuName] = 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):
|
def addMenu(self, menuRoot: str = '', menuLabel: str = '', menuCommand=None):
|
||||||
'''增加一个菜单项
|
'''增加一个菜单项
|
||||||
@ -209,7 +216,7 @@ class disp:
|
|||||||
:信息显示版 InfoBar
|
:信息显示版 InfoBar
|
||||||
'''
|
'''
|
||||||
self._wordviewBar = tk.Label(
|
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)
|
self.setWordView(self.wordView)
|
||||||
|
@ -52,55 +52,128 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
|
|||||||
|
|
||||||
- 变量
|
- 变量
|
||||||
|
|
||||||
1. root
|
1. `infoBar`
|
||||||
窗口根,即一个Tk类,注意,外部调用请不要直接访问窗口根
|
|
||||||
因为这可不一定是Tk的类,加载其他窗口组件的话就是其他的
|
信息显示栏,一个字符串,用于显示一些信息。
|
||||||
了。
|
|
||||||
2. title
|
|
||||||
|
2. `title`
|
||||||
|
|
||||||
窗口标题,字符串
|
窗口标题,字符串
|
||||||
3. menuWidgets
|
|
||||||
对于窗口菜单的设定,其格式详见下方`setMenu`函数
|
|
||||||
4. wordView
|
3. `menuWidgets`
|
||||||
|
|
||||||
|
对于窗口菜单的设定,其格式如下:
|
||||||
|
```python
|
||||||
|
menuWidgets: dist = { # 菜单项目
|
||||||
|
str"菜单名" : dict{
|
||||||
|
str"选项名"|None : <function>选项函数
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
注:
|
||||||
|
`菜单名` : `str` 显示在菜单上的字符串
|
||||||
|
`选项名` : `str` 显示在菜单选项上的字符串
|
||||||
|
`选项函数` : `function` 菜单调取的函数(无返回值,无入参)
|
||||||
|
当 `选项名` 的布尔值判定为 `False` 的时候,无论 `选项函数` 为何,皆插入一段分割线,但 `选项函数` 不得为空
|
||||||
|
|
||||||
|
|
||||||
|
4. `wordView`
|
||||||
|
|
||||||
显示在言论上的文字,字符串
|
显示在言论上的文字,字符串
|
||||||
5. buttons
|
|
||||||
|
|
||||||
|
5. `buttons`
|
||||||
|
|
||||||
快捷功能按钮的列表,列表的元素为字典,字典的键是按钮的名称,值为一个元组,元组中含有两个元素,其中元组的第1个元素为按钮图标,是一个图片的路径;第2个元素为执行的函数,其值应当是一个函数对象。
|
快捷功能按钮的列表,列表的元素为字典,字典的键是按钮的名称,值为一个元组,元组中含有两个元素,其中元组的第1个元素为按钮图标,是一个图片的路径;第2个元素为执行的函数,其值应当是一个函数对象。
|
||||||
|
|
||||||
```python
|
```python
|
||||||
button: list = [ # 操作按钮部分
|
button: list = [ # 操作按钮部分
|
||||||
dict = {
|
dict{
|
||||||
按钮名称 : tuple(按钮图标,执行函数)
|
str"按钮名称" : tuple(
|
||||||
|
按钮图标,
|
||||||
|
执行函数
|
||||||
|
)
|
||||||
},
|
},
|
||||||
|
...
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
6. settingBox
|
|
||||||
|
|
||||||
|
6. `settingBox`
|
||||||
|
|
||||||
设置框,用于设置音乐的基本属性,例如词作者,曲作者等,设置格式如下:
|
设置框,用于设置音乐的基本属性,例如词作者,曲作者等,设置格式如下:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
settingbox: list = [ #设置部分显示的字样及其对应的设置函数
|
settingbox: list = [ #设置部分显示的字样及其对应的设置函数
|
||||||
(
|
tuple(
|
||||||
设置名称:str,
|
设置名称:str,
|
||||||
值类型:tuple,
|
值类型:tuple,
|
||||||
显示内容:str,
|
显示内容:str,
|
||||||
设置操作函数:<function>,
|
设置操作函数:<function>,
|
||||||
)
|
),
|
||||||
|
...
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
其中,值类型可以是如下几个项
|
其中,值类型可以是如下几个项
|
||||||
1. `('str',)` 字符串类型,使用文本框输入数据
|
1. `('str',)` 字符串类型,使用文本框输入数据
|
||||||
2. `('bool',)` 布尔类型,使用复选框输入数据
|
2. `('bool',)` 布尔类型,使用复选框输入数据
|
||||||
3. `('num',最小值:int,最大值:int,步长:int = 1)` 数值类型,使用数值滑动条输入数据
|
3. `('num',最小值:float,最大值:float,步长:float = 1)` 数值类型,使用数值滑动条输入数据
|
||||||
4. `('list',列表项:list)` 单选类型,即列表中多选一,使用单选框输入数据
|
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`对菜单的基础设定
|
1. `setMenu`对菜单的基础设定
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python
|
```python
|
||||||
{
|
{
|
||||||
菜单名 : {
|
菜单名 : {
|
||||||
选项名 : 选项函数
|
选项名 : 选项函数
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
```
|
||||||
|
|
||||||
注:
|
注:
|
||||||
`菜单名` : `str` 显示在菜单上的字符串
|
`菜单名` : `str` 显示在菜单上的字符串
|
||||||
@ -155,13 +228,16 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 这里是全局设置
|
#### ???
|
||||||
'name' : str, #项目名,即包名
|
|
||||||
'title': str, #音乐名称
|
全曲的设置应该如下:
|
||||||
'repeation': bool, #是否开启重复播放
|
```python
|
||||||
'player_selection': str, #玩家选择器,用于选择播放的的玩家
|
标题 : str = '无名'
|
||||||
# 下面是音轨独立设置
|
副标题 : str = ''
|
||||||
'track_name': str, #此音轨的名字
|
作曲 : str = '佚名'
|
||||||
'track_sbname': str, #此音轨所使用的计分板
|
作词 : str = ''
|
||||||
- 变量
|
歌曲版权信息 : str = ''
|
||||||
使用类中的变量可以对类中的内容进行实时修改
|
# bpm 暂时不需要
|
||||||
|
|
||||||
|
|
||||||
|
```
|
Binary file not shown.
@ -93,11 +93,11 @@ class report:
|
|||||||
class version:
|
class version:
|
||||||
libraries = (
|
libraries = (
|
||||||
'mido', 'amulet', 'amulet-core', 'amulet-nbt', 'piano_transcription_inference', 'pypinyin',
|
'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:
|
def __init__(self) -> None:
|
||||||
|
@ -6,27 +6,6 @@ Copyright © W-YI 2022
|
|||||||
本软件是金羿前作函数音创和世界音创的集合版本,同时增加了大量功能更新。
|
本软件是金羿前作函数音创和世界音创的集合版本,同时增加了大量功能更新。
|
||||||
|
|
||||||
|
|
||||||
To-Do
|
|
||||||
1.可以导出自定义的结构文件用于存储要导入地图中的结构
|
|
||||||
2.进度条
|
|
||||||
3.可以将音乐写入音符盒(红乐)
|
|
||||||
4.修改UI界面使之适应当前功能
|
|
||||||
5.支持自动给音符盒绑定更多的音色
|
|
||||||
6.可以由.schematic文件导入地图,亦可反向处理
|
|
||||||
7.制作软件下载器使用户更直观地操作
|
|
||||||
8.支持自定义创建websockeet服务器播放音乐(感谢由 Fuckcraft <https://github.com/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 年度挑战
|
2022 年度挑战
|
||||||
@ -53,6 +32,16 @@ Copyright © W-YI 2022
|
|||||||
10.新增下载器,无需用户从源代码安装
|
10.新增下载器,无需用户从源代码安装
|
||||||
|
|
||||||
|
|
||||||
|
Delta 0.1.5
|
||||||
|
2022 4 4
|
||||||
|
0.新增金羿生日祝福
|
||||||
|
1.修复诸多问题
|
||||||
|
2.正在往0.2版本迭代更新
|
||||||
|
3.预计半年之内可以发布新版本
|
||||||
|
4.支持使用自动安装器下载安装
|
||||||
|
5.
|
||||||
|
|
||||||
|
|
||||||
Delta 0.1.5.2
|
Delta 0.1.5.2
|
||||||
2022 2 1 农历大年初一
|
2022 2 1 农历大年初一
|
||||||
0.程序图标完善
|
0.程序图标完善
|
||||||
|
Loading…
Reference in New Issue
Block a user