mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2026-01-25 05:02:02 +00:00
Compare commits
40 Commits
v0.2.0.0-D
...
oldUI
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79f99dd7ed | ||
|
|
af21b75b70 | ||
|
|
75df9dc167 | ||
|
|
7edf979aee | ||
|
|
ae83f9c21e | ||
|
|
dd34ac9998 | ||
|
|
2da06136c5 | ||
|
|
e9f4230a2d | ||
|
|
1b7ab73c02 | ||
|
|
2624c081bb | ||
|
|
87cc189da8 | ||
|
|
668bf480b2 | ||
|
|
4cc3f2678f | ||
|
|
701e9d5129 | ||
|
|
8dd2694e82 | ||
|
|
ac962f0ab7 | ||
|
|
b800384547 | ||
|
|
5da1041664 | ||
|
|
966ce515c3 | ||
|
|
349c255f5f | ||
|
|
cbb77086d0 | ||
|
|
280e50f4cb | ||
|
|
a2a37be8ef | ||
|
|
7acd6b7e38 | ||
|
|
4c95f76cf9 | ||
|
|
8a1a159eb8 | ||
|
|
cb43caef26 | ||
|
|
200167ef84 | ||
|
|
7e0a127406 | ||
|
|
5e70dd73a1 | ||
|
|
7229b12e99 | ||
|
|
074124bc3d | ||
|
|
91446bfd81 | ||
|
|
5011efcdee | ||
|
|
3b4af19379 | ||
|
|
d3d89d2567 | ||
|
|
441d1e9982 | ||
|
|
77e738cb7e | ||
|
|
46b6884e64 | ||
|
|
d0a63d0f8e |
BIN
AutoInstaller/MSCT Auto Installer
Executable file
BIN
AutoInstaller/MSCT Auto Installer
Executable file
Binary file not shown.
@@ -1,69 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
# W-YI 金羿
|
|
||||||
# QQ 2647547478
|
|
||||||
# 音·创 开发交流群 861684859
|
|
||||||
# Email EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
|
|
||||||
# 版权所有 Team-Ryoun 金羿("Eilles Wan") & 诸葛亮与八卦阵("bgArray")
|
|
||||||
# 若需转载或借鉴 请附作者
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
音·创 (Musicreater)
|
|
||||||
一款免费开源的 《我的世界:基岩版》 音乐制作软件
|
|
||||||
Musicreater (音·创)
|
|
||||||
A free opensource software which is used for creating all kinds of musics in Minecraft
|
|
||||||
|
|
||||||
Copyright 2022 Team-Ryoun
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the 'License');
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an 'AS IS' BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# 代码写的并非十分的漂亮,还请大佬多多包涵;本软件源代码依照Apache软件协议公开
|
|
||||||
|
|
||||||
|
|
||||||
# 下面为正文
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from msctspt.bugReporter import version
|
|
||||||
|
|
||||||
__ver__ = f'{version.version[1]} {version.version[0]}'
|
|
||||||
__author__ = '金羿Eilles'
|
|
||||||
|
|
||||||
from msctLib.display import *
|
|
||||||
|
|
||||||
from msctLib.function import *
|
|
||||||
|
|
||||||
from msctLib.data import uniteIO
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __main__():
|
|
||||||
|
|
||||||
disp()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
__main__()
|
|
||||||
@@ -186,7 +186,7 @@ def __main__():
|
|||||||
print('音·创 正在启动……')
|
print('音·创 正在启动……')
|
||||||
|
|
||||||
print('载入日志功能...')
|
print('载入日志功能...')
|
||||||
from nmcsup.log import log
|
from msctLib.log import log
|
||||||
from nmcsup.log import end
|
from nmcsup.log import end
|
||||||
print('完成!')
|
print('完成!')
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ def __main__():
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
os.chdir(__file__[:len(__file__) - __file__[len(__file__)::-1].index('/')])
|
os.chdir(__file__[:len(__file__) - __file__[len(__file__)::-1].index('/')])
|
||||||
except FileNotFoundError:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
log('其他平台:{} 更新执行位置,当前文件位置 {}'.format(sys.platform, __file__))
|
log('其他平台:{} 更新执行位置,当前文件位置 {}'.format(sys.platform, __file__))
|
||||||
print('完成!')
|
print('完成!')
|
||||||
@@ -1299,7 +1299,6 @@ def __main__():
|
|||||||
initialfile=dataset[0]['mainset']['PackName'] + '.bdx')
|
initialfile=dataset[0]['mainset']['PackName'] + '.bdx')
|
||||||
|
|
||||||
maxHeight = 200
|
maxHeight = 200
|
||||||
print(maxHeight) # 使用变量
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
maxHeight = tkinter.simpledialog.askinteger(title=READABLETEXT[28],
|
maxHeight = tkinter.simpledialog.askinteger(title=READABLETEXT[28],
|
||||||
@@ -1320,7 +1319,7 @@ def __main__():
|
|||||||
|
|
||||||
log('获得文件名:' + fileName)
|
log('获得文件名:' + fileName)
|
||||||
|
|
||||||
res = music2BDX(fileName, dire, dataset[0], )
|
res = music2BDX(fileName, dire, dataset[0], height = maxHeight )
|
||||||
log('转换结束!\n' + str(res))
|
log('转换结束!\n' + str(res))
|
||||||
tkinter.messagebox.showinfo(READABLETEXT[33], READABLETEXT[124].format(str(res)))
|
tkinter.messagebox.showinfo(READABLETEXT[33], READABLETEXT[124].format(str(res)))
|
||||||
|
|
||||||
@@ -1470,7 +1469,10 @@ def __main__():
|
|||||||
|
|
||||||
root.title(READABLETEXT[41].format(__version__))
|
root.title(READABLETEXT[41].format(__version__))
|
||||||
root.geometry('900x900') # 像素
|
root.geometry('900x900') # 像素
|
||||||
root.iconbitmap('./resources/musicreater.ico', './resources/musicreater.ico')
|
try:
|
||||||
|
root.iconbitmap(bitmap='./resources/musicreater.ico', default='./resources/musicreater.ico')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
print('完成!')
|
print('完成!')
|
||||||
|
|
||||||
@@ -1612,6 +1614,7 @@ def __main__():
|
|||||||
dataset[0]['musics'][NowMusic]['set']['FileName'] = a
|
dataset[0]['musics'][NowMusic]['set']['FileName'] = a
|
||||||
RefreshMusic(NowMusic)
|
RefreshMusic(NowMusic)
|
||||||
print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event)
|
print(event) # 保证变量使用(虽然我不清楚金羿这为啥不调用要写个event)
|
||||||
|
# 滚滚滚,这个函数不能无参! ——金羿
|
||||||
|
|
||||||
print('标签点击命令加载完成!')
|
print('标签点击命令加载完成!')
|
||||||
|
|
||||||
@@ -1819,6 +1822,11 @@ def __main__():
|
|||||||
DownFrame = tk.Frame(root, bg='blue')
|
DownFrame = tk.Frame(root, bg='blue')
|
||||||
|
|
||||||
# 经典名言语录
|
# 经典名言语录
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
if datetime.date.today().month == 4 and datetime.date.today().day == 3:
|
||||||
|
tk.Label(DownFrame, text='金羿生日快乐!!',fg='yellow', bg='red', font=('DengXian', 20, 'bold')).pack(fill='x')
|
||||||
|
else:
|
||||||
import random
|
import random
|
||||||
texts = open('./resources/myWords.txt', 'r', encoding='utf-8').readlines()
|
texts = open('./resources/myWords.txt', 'r', encoding='utf-8').readlines()
|
||||||
tk.Label(DownFrame, text=texts[random.randint(0, len(texts) - 1)].replace('\n', '').replace('\\n', '\n'),
|
tk.Label(DownFrame, text=texts[random.randint(0, len(texts) - 1)].replace('\n', '').replace('\\n', '\n'),
|
||||||
|
|||||||
90
README.md
90
README.md
@@ -1,38 +1,51 @@
|
|||||||
# 音·创 Musicreater
|
<h1 align="center">音·创 Musicreater</h1>
|
||||||
|
|
||||||
[](https://choosealicense.com/licenses/apache-2.0/)
|
<p align="center">
|
||||||
[](https://space.bilibili.com/397369002/)
|
<img width="128" height="128" src="https://s1.ax1x.com/2022/04/01/qhfOPA.png" >
|
||||||
[](https://space.bilibili.com/604072474)
|
</p>
|
||||||
[](https://github.com/psf/black)
|
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://forthebadge.com/images/badges/built-with-love.svg">
|
||||||
|
<p>
|
||||||
|
|
||||||
|
[![][Bilibili: 凌云金羿]](https://space.bilibili.com/397369002/)
|
||||||
|
[![][Bilibili: 诸葛亮与八卦阵]](https://space.bilibili.com/604072474)
|
||||||
|
[![CodeStyle: black]](https://github.com/psf/black)
|
||||||
|
[![][python]](https://www.python.org/)
|
||||||
|
[![][license]](LICENSE)
|
||||||
|
[![][release]](../../releases)
|
||||||
|
|
||||||
### 介绍
|
简体中文🇨🇳 | [English🇬🇧](README_EN.md)
|
||||||
|
|
||||||
音·创 Musicreater 是由凌天之云创新应用软件开发团队开发的一款免费开源的 **《我的世界:基岩版》** 音乐制作软件
|
## 软件介绍🚀
|
||||||
|
|
||||||
欢迎加群:861684859
|
音·创 Musicreater 是一款免费开源的 **《我的世界:基岩版》** 音乐制作软件
|
||||||
|
|
||||||
### 作者
|
欢迎加群:[861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr)
|
||||||
|
|
||||||
金羿 Eilles:我的世界基岩版指令师,个人开发者,B站不知名UP主,在校高中生。
|
**注意注意注意!!!本程序尚在测试与开发阶段,且代码重构未完成,请自行定夺使用。**
|
||||||
|
|
||||||
|
## 软件作者✒
|
||||||
|
|
||||||
|
金羿 Eilles:我的世界基岩版指令师,个人开发者,B站不知名UP主,南昌在校高中生。
|
||||||
|
|
||||||
诸葛亮与八卦阵 bgArray:我的世界基岩版玩家,喜欢编程和音乐,深圳初一学生。
|
诸葛亮与八卦阵 bgArray:我的世界基岩版玩家,喜欢编程和音乐,深圳初一学生。
|
||||||
|
|
||||||
### 软件架构
|
## 软件架构🏢
|
||||||
|
|
||||||
软件采用 *Python* 作为第一语言,目前还没有使用其他语言辅助。使用 *Tkinter* 为图形库。
|
软件采用 *Python* 作为第一语言,目前还没有使用其他语言辅助。使用可更换的UI结构库,即开发人员可以通过更换display.py文件随心所欲地切换UI库;后期将支持插件自加载。
|
||||||
|
|
||||||
支持 Windows7+ 以及各个支持 Python3.8 的 Linux
|
支持 Windows7+ 以及各个支持 Python3.6+ 的 Linux
|
||||||
|
|
||||||
***各位开发人员注意!!!多语言支持请使用函数`_`加载文字!!!如需补充,请在简体中文的语言文件(zh-CN.lang)中补充!!!***
|
***各位开发人员注意!!!多语言支持请使用函数`_`加载文字!!!如需补充,请在简体中文的语言文件(zh-CN.lang)中补充!!!***
|
||||||
|
|
||||||
|
## 使用教程📕
|
||||||
|
|
||||||
### 安装教程
|
### 安装教程
|
||||||
|
|
||||||
下载音·创自动安装器,将其放在你希望安装音·创的位置,运行后将自动安装。
|
下载[音·创自动安装器](https://gitee.com/EillesWan/Musicreater/releases/v0.2.0.0-Delta),将其放在你希望安装音·创的位置,运行后将自动安装。
|
||||||
|
|
||||||
提示:下载源最好选择2GitHub。
|
提示:下载源最好选择\"2 GitHub\"。
|
||||||
|
|
||||||
### 从源代码运行教程
|
### 从源代码运行教程
|
||||||
|
|
||||||
@@ -67,15 +80,13 @@ python3 补全库.py
|
|||||||
python3 Musicreater.py
|
python3 Musicreater.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### 使用说明
|
### 使用说明
|
||||||
|
|
||||||
1. 直接运行就好
|
1. 直接运行就好
|
||||||
2. 看得懂简体中文字的不一定全会用
|
2. 后期会出详细的使用教程
|
||||||
3. 最好要懂一点点英文
|
3. 如果在使用过程中发现了bug拜托请上报给我,详见下方联系方式
|
||||||
|
|
||||||
|
## 诸葛亮与八卦阵的关于羽音缭绕资源包应用地说明(不必要)📖
|
||||||
### 诸葛亮与八卦阵的说明(不必要)
|
|
||||||
|
|
||||||
1. 首先!这里的提示是给想使用多音色资源包的人的,如果你想用就请下载 [神羽资源包(神羽自己的链接)](https://pan.baidu.com/s/11uoq5zwN7c3rX-98DqVpJg)提取码:ek3t
|
1. 首先!这里的提示是给想使用多音色资源包的人的,如果你想用就请下载 [神羽资源包(神羽自己的链接)](https://pan.baidu.com/s/11uoq5zwN7c3rX-98DqVpJg)提取码:ek3t
|
||||||
2. 下载到你自己电脑上某个位置,可以不放置于本项目下。音色资源包较大,可以选取只下载:
|
2. 下载到你自己电脑上某个位置,可以不放置于本项目下。音色资源包较大,可以选取只下载:
|
||||||
@@ -92,7 +103,7 @@ python3 Musicreater.py
|
|||||||
6. 如果你想使用音色资源包来制作函数,那么解析时你应该用 *音创*->编辑->从midi导入音轨且用新方法解析,
|
6. 如果你想使用音色资源包来制作函数,那么解析时你应该用 *音创*->编辑->从midi导入音轨且用新方法解析,
|
||||||
然后再使用 *音创*->函数(包)->下面的四个新函数
|
然后再使用 *音创*->函数(包)->下面的四个新函数
|
||||||
|
|
||||||
### 致谢
|
## 致谢🙏
|
||||||
|
|
||||||
1. 感谢由 [Fuckcraft](https://github.com/fuckcraft) “鸣凤鸽子”等 带来的我的世界websocket服务器功能
|
1. 感谢由 [Fuckcraft](https://github.com/fuckcraft) “鸣凤鸽子”等 带来的我的世界websocket服务器功能
|
||||||
2. 感谢 昀梦\<QQ1515399885\> 找出指令生成错误bug并指正
|
2. 感谢 昀梦\<QQ1515399885\> 找出指令生成错误bug并指正
|
||||||
@@ -103,8 +114,9 @@ python3 Musicreater.py
|
|||||||
7. 感谢广大群友为此程序提供的测试等支持
|
7. 感谢广大群友为此程序提供的测试等支持
|
||||||
8. 若您对我们有所贡献但您的名字没有显示在此列表中,请联系我!
|
8. 若您对我们有所贡献但您的名字没有显示在此列表中,请联系我!
|
||||||
|
|
||||||
|
## 联系我们📞
|
||||||
|
|
||||||
### 作者\<*金羿*\>(W-YI)联系方式
|
### 作者\<*金羿*\>(Eilles)联系方式
|
||||||
|
|
||||||
1. QQ 2647547478
|
1. QQ 2647547478
|
||||||
2. 电邮 EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
|
2. 电邮 EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
|
||||||
@@ -113,3 +125,37 @@ python3 Musicreater.py
|
|||||||
### 作者\<*诸葛亮与八卦阵*\>(bgArray) 联系方式
|
### 作者\<*诸葛亮与八卦阵*\>(bgArray) 联系方式
|
||||||
|
|
||||||
1. QQ 4740437765
|
1. QQ 4740437765
|
||||||
|
|
||||||
|
## 待办事项
|
||||||
|
|
||||||
|
* - [x] 可以使用由神羽提供的音乐资源包
|
||||||
|
* - [x] 支持多语言
|
||||||
|
* - [x] 支持创建可被Fastbuilder导入的.BDX文件支持
|
||||||
|
* - [ ] 1.可以导出自定义的结构文件用于存储要导入地图中的结构
|
||||||
|
* - [ ] 2.进度条
|
||||||
|
* - [ ] 3.可以将音乐写入音符盒(红乐)
|
||||||
|
* - [ ] 4.修改UI界面使之适应当前功能
|
||||||
|
* - [ ] 5.支持自动给音符盒绑定更多的音色
|
||||||
|
* - [ ] 6.可以由.schematic文件导入地图,亦可反向处理
|
||||||
|
* - [x] 7.制作软件下载器使用户更直观地操作
|
||||||
|
* - [x] 8.支持自定义创建websockeet服务器播放音乐
|
||||||
|
* - [ ] 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.以小节为单位做音符播放时间对标
|
||||||
|
|
||||||
|
|
||||||
|
[Bilibili: 凌云金羿]: https://img.shields.io/badge/Bilibili-%E5%87%8C%E4%BA%91%E9%87%91%E7%BE%BF-00A1E7?style=for-the-badge
|
||||||
|
[Bilibili: 诸葛亮与八卦阵]: https://img.shields.io/badge/Bilibili-%E8%AF%B8%E8%91%9B%E4%BA%AE%E4%B8%8E%E5%85%AB%E5%8D%A6%E9%98%B5-00A1E7?style=for-the-badge
|
||||||
|
[CodeStyle: black]: https://img.shields.io/badge/code%20style-black-121110.svg?style=for-the-badge
|
||||||
|
[python]: https://img.shields.io/badge/python-3.6-AB70FF?style=for-the-badge
|
||||||
|
[release]: https://img.shields.io/github/v/release/EillesWan/Musicreater?style=for-the-badge
|
||||||
|
[license]: https://img.shields.io/badge/Licence-Apache-228B22?style=for-the-badge
|
||||||
|
|||||||
@@ -1,41 +1,57 @@
|
|||||||
# Musicreater
|
<h1 align="center">音·创 Musicreater</h1>
|
||||||
|
|
||||||
[](https://choosealicense.com/licenses/apache-2.0/)
|
<p align="center">
|
||||||
[](https://space.bilibili.com/397369002/)
|
<img width="128" height="128" src="https://s1.ax1x.com/2022/04/01/qhfOPA.png" >
|
||||||
[](https://space.bilibili.com/604072474)
|
</p>
|
||||||
[](https://github.com/psf/black)
|
|
||||||
|
|
||||||
### Introduction
|
<p align="center">
|
||||||
|
<img src="https://forthebadge.com/images/badges/built-with-love.svg">
|
||||||
|
<p>
|
||||||
|
|
||||||
Musicreater(音·创) is an Eilles(*W-YI*)'s app that is used for creating musics in **Minecraft: Bedrock Edition**.
|
[![][Bilibili: Eilles]](https://space.bilibili.com/397369002/)
|
||||||
|
[![][Bilibili: bgArray]](https://space.bilibili.com/604072474)
|
||||||
|
[![CodeStyle: black]](https://github.com/psf/black)
|
||||||
|
![][python]
|
||||||
|
[![][license]](LICENSE)
|
||||||
|
[![][release]](../../releases)
|
||||||
|
|
||||||
Welcome to join our QQ group: 861684859
|
[简体中文🇨🇳](README.md) | English🇬🇧
|
||||||
|
|
||||||
### Author
|
**Notice that the language support of *README* may be a little SLOW.**
|
||||||
|
|
||||||
Eilles (金羿):The main author, who developed the most and especially the principal parts of Musicreater, and its predecessors, which has been called as "*Minecraft Function Music Maker*", "*Note Fun Creater*", "*Note World Creater*"(now ,they are united as ***Musicreater***!)
|
## Introduction🚀
|
||||||
|
|
||||||
|
Musicreater(音·创) is an free open source software which is used for making and also creating music in **Minecraft: Bedrock Edition**.
|
||||||
|
|
||||||
|
Welcome to join our QQ group: [861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr)
|
||||||
|
|
||||||
|
**ATTENTION!** This software is under testing and developing, there is still a lot of bugs needed to be fixed. Please use it wisely.
|
||||||
|
|
||||||
|
### Authors✒
|
||||||
|
|
||||||
|
Eilles (金羿):A high school student, individual developer, unfamous BilibiliUPer, which knows a little about commands in *Minecraft: Bedrock Edition*
|
||||||
|
|
||||||
bgArray "诸葛亮与八卦阵": Fix bugs, improve code aesthetics, add new functions, change data format, etc.
|
bgArray "诸葛亮与八卦阵": Fix bugs, improve code aesthetics, add new functions, change data format, etc.
|
||||||
|
|
||||||
### Framework
|
### Framework🏢
|
||||||
|
|
||||||
Using *Python* to develop, using Tkinter as a graphics library.
|
Developed under *Python3.8 3.9*. However, theoretically support Python3.6+.
|
||||||
|
|
||||||
Support Windows7+ && Linux (that supports Python3.8)
|
Support Windows7+ && Linux (that supports Python3.6+)
|
||||||
|
|
||||||
***ATTENTION TO DEVELOPERS!!! TO SUPPORT DIFFERENT LANGUAGES, PLEASE USE CONSTANT `READABLETEXT` TO OUTPUT!!! IF YOU NEED TO SUPPLEMENT, PLEASE ADD THEM IN SIMPLEFIED CHINESE\'S LANGUAGE FILE(zhCN.py), WHEATHER WHAT LANGUAGE YOU USE!!!***
|
***ATTENTION TO DEVELOPERS!!! TO SUPPORT DIFFERENT LANGUAGES, PLEASE USE FUNCTION(METHOD) `_` TO LOAD TEXTs!!! IF YOU NEED TO SUPPLEMENT, PLEASE ADD THEM IN SIMPLEFIED CHINESE\'S LANGUAGE FILE(zh-CN.lang), WHEATHER WHAT LANGUAGE YOU USE!!!***
|
||||||
|
|
||||||
|
## Instructions📕
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
Download the *[MSCT Auto Installer]()*, put it in a directory that you want to install *Musicreater* into.
|
Download the *[MSCT Auto Installer](https://github.com/EillesWan/Musicreater/releases/tag/v0.2.0.0-Delta)*, put it in a directory that you want to install *Musicreater* into. Then run the auto installer and it will help you to install the *Musicreator* as well as Python3.8(if you haven\'t install it)
|
||||||
Then run the auto installer and it will help you to install the *Musicreator*
|
|
||||||
|
|
||||||
Tips: You'd better choose the 2GitHub download source
|
Tips: You'd better choose the \"2 GitHub\" download source
|
||||||
|
|
||||||
### Run with Source Code
|
### Run with Source Code
|
||||||
|
|
||||||
#### Windows
|
#### Windows7+
|
||||||
|
|
||||||
0. First, download the source code pack of Musicreater.
|
0. First, download the source code pack of Musicreater.
|
||||||
[Download from Gitee (Need to Login)](https://gitee.com/EillesWan/Musicreater/repository/archive/master.zip)
|
[Download from Gitee (Need to Login)](https://gitee.com/EillesWan/Musicreater/repository/archive/master.zip)
|
||||||
@@ -67,15 +83,13 @@ python3 补全库.py
|
|||||||
python3 Musicreater.py
|
python3 Musicreater.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Instructions of Using
|
||||||
|
|
||||||
### Instructions
|
1. Just run Musicreater.pyc(or .py) if you have installed well
|
||||||
|
2. Detailed instructions is coming soon
|
||||||
|
3. If you find a bug, could you please report it to me? My contact info is right below.
|
||||||
|
|
||||||
1. Just make u understand the Chinese
|
## Explanation of the use of *PlumeAudioSurrounding Resource Pack* by bgArray (unnecessary)📖
|
||||||
2. If u dont understand, u can come to the QQ group or email me to ask questions
|
|
||||||
3. The English Edition is comming soon.
|
|
||||||
|
|
||||||
|
|
||||||
### Explanation of bgArray 诸葛亮与八卦阵 (unnecessary)
|
|
||||||
|
|
||||||
1. First! The tips here are for those who want to use the multi tone resource package, [Shenyu resource package (Shenyu's own link)](https://pan.baidu.com/s/11uoq5zwN7c3rX-98DqVpJg) \(Extraction code: `ek3t`\)
|
1. First! The tips here are for those who want to use the multi tone resource package, [Shenyu resource package (Shenyu's own link)](https://pan.baidu.com/s/11uoq5zwN7c3rX-98DqVpJg) \(Extraction code: `ek3t`\)
|
||||||
2. Download it to any location on your PC. Note that it does ***not*** need to be placed in the directory where *Musicreater* are. The audio resource package is large, so you can choose to download only:`神羽资源包_乐器、音源的资源包\羽音缭绕-midiout_25.0`.
|
2. Download it to any location on your PC. Note that it does ***not*** need to be placed in the directory where *Musicreater* are. The audio resource package is large, so you can choose to download only:`神羽资源包_乐器、音源的资源包\羽音缭绕-midiout_25.0`.
|
||||||
@@ -90,7 +104,7 @@ python3 Musicreater.py
|
|||||||
6. If you want to use the Miracle Plume Bedrock Edition Audio Resource Pack to make .mcfunction s, you should use Musicreater -> Edit - > Import audio tracks from MIDI and parse them with a new method, and then use it
|
6. If you want to use the Miracle Plume Bedrock Edition Audio Resource Pack to make .mcfunction s, you should use Musicreater -> Edit - > Import audio tracks from MIDI and parse them with a new method, and then use it
|
||||||
Musicreater - > function (package) - > the following four new functions
|
Musicreater - > function (package) - > the following four new functions
|
||||||
|
|
||||||
### Thanks
|
## Thanks🙏
|
||||||
|
|
||||||
1. Thank [Fuckcraft](https://github.com/fuckcraft) *(“鸣凤鸽子” ,etc)* for the function of Creating the Websocket Server for Minecraft: Bedrock Edition.
|
1. Thank [Fuckcraft](https://github.com/fuckcraft) *(“鸣凤鸽子” ,etc)* for the function of Creating the Websocket Server for Minecraft: Bedrock Edition.
|
||||||
- *!! They have given me the rights to directly copy the lib into Musicreater*
|
- *!! They have given me the rights to directly copy the lib into Musicreater*
|
||||||
@@ -102,13 +116,25 @@ Musicreater - > function (package) - > the following four new functions
|
|||||||
7. Thanks for a lot of groupmates who support me and help me to test the program.
|
7. Thanks for a lot of groupmates who support me and help me to test the program.
|
||||||
8. If you have give me some help but u haven't been in the list, please contact me.
|
8. If you have give me some help but u haven't been in the list, please contact me.
|
||||||
|
|
||||||
|
## Contact Information📞
|
||||||
|
|
||||||
### Contact *Eilles(W-YI)*(金羿)
|
### Author *Eilles*(金羿)
|
||||||
|
|
||||||
1. QQ 2647547478
|
1. QQ 2647547478
|
||||||
2. E-mail EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
|
2. E-mail EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
|
||||||
3. WeChat WYI_DoctorYI
|
3. WeChat WYI_DoctorYI
|
||||||
|
|
||||||
### Contact *bgArray*(诸葛亮与八卦阵)
|
### Author *bgArray*(诸葛亮与八卦阵)
|
||||||
|
|
||||||
1. QQ 4740437765
|
1. QQ 4740437765
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Bilibili: Eilles]: https://img.shields.io/badge/Bilibili-%E5%87%8C%E4%BA%91%E9%87%91%E7%BE%BF-00A1E7?style=for-the-badge
|
||||||
|
[Bilibili: bgArray]: https://img.shields.io/badge/Bilibili-%E8%AF%B8%E8%91%9B%E4%BA%AE%E4%B8%8E%E5%85%AB%E5%8D%A6%E9%98%B5-00A1E7?style=for-the-badge
|
||||||
|
[CodeStyle: black]: https://img.shields.io/badge/code%20style-black-121110.svg?style=for-the-badge
|
||||||
|
[python]: https://img.shields.io/badge/python-3.6-AB70FF?style=for-the-badge
|
||||||
|
[release]: https://img.shields.io/github/v/release/EillesWan/Musicreater?style=for-the-badge
|
||||||
|
[license]: https://img.shields.io/badge/Licence-Apache-228B22?style=for-the-badge
|
||||||
Binary file not shown.
BIN
languages/__pycache__/__init__.cpython-37.pyc
Normal file
BIN
languages/__pycache__/__init__.cpython-37.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
languages/__pycache__/lang.cpython-37.pyc
Normal file
BIN
languages/__pycache__/lang.cpython-37.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
languages/__pycache__/zhCN.cpython-37.pyc
Normal file
BIN
languages/__pycache__/zhCN.cpython-37.pyc
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,13 @@
|
|||||||
zh-CN
|
zh-ME
|
||||||
简体中文 中国大陆
|
喵喵文 中国大陆
|
||||||
Simplified Chinese, Chinese Mainland
|
Meow Catsese, China Mainland
|
||||||
简体中文 中国大陆
|
喵喵喵~ 祖国喵~
|
||||||
|
金羿,Email EillesWan@outlook.com,QQ 2647547478
|
||||||
|
音创创喵~
|
||||||
|
音·创 Musicreater
|
||||||
|
音创创喵的主人们
|
||||||
|
凌天之云创新我的世界开发团队\n×\n凌天之云创新计算机应用软件开发团队
|
||||||
|
~ 主人们 ~
|
||||||
|
~ 爸爸妈妈们 ~
|
||||||
|
好哒~
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ def __loadLanguage(languageFilename: str):
|
|||||||
from msctLib.log import log
|
from msctLib.log import log
|
||||||
log(f'丢失对于 {line[0]} 的本地化文本', 'WARRING')
|
log(f'丢失对于 {line[0]} 的本地化文本', 'WARRING')
|
||||||
langkeys = _text.keys()
|
langkeys = _text.keys()
|
||||||
|
# print(_text)
|
||||||
return _text
|
return _text
|
||||||
|
|
||||||
|
|
||||||
@@ -180,6 +181,8 @@ if __name__ == '__main__':
|
|||||||
Translatetextbar.edit_redo()
|
Translatetextbar.edit_redo()
|
||||||
Translatetextbar.bind("<Control-y>", ctrlY)
|
Translatetextbar.bind("<Control-y>", ctrlY)
|
||||||
|
|
||||||
|
Translatetextbar.bind("<Control-s>", _autoSave)
|
||||||
|
|
||||||
tk.Button(Translaterame, text='保存', command=_autoSave).pack(side='bottom', fill='x')
|
tk.Button(Translaterame, text='保存', command=_autoSave).pack(side='bottom', fill='x')
|
||||||
|
|
||||||
tk.Label(Orignrame, text='中文原文').pack(side='top')
|
tk.Label(Orignrame, text='中文原文').pack(side='top')
|
||||||
|
|||||||
BIN
msctLib/__pycache__/__init__.cpython-37.pyc
Normal file
BIN
msctLib/__pycache__/__init__.cpython-37.pyc
Normal file
Binary file not shown.
BIN
msctLib/__pycache__/__init__.cpython-39.pyc
Normal file
BIN
msctLib/__pycache__/__init__.cpython-39.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
msctLib/__pycache__/log.cpython-37.pyc
Normal file
BIN
msctLib/__pycache__/log.cpython-37.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
msctLib/__pycache__/log.cpython-39.pyc
Normal file
BIN
msctLib/__pycache__/log.cpython-39.pyc
Normal file
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)
|
||||||
@@ -46,6 +50,7 @@ class disp:
|
|||||||
buttons: list = [],
|
buttons: list = [],
|
||||||
settingBox: list = [],
|
settingBox: list = [],
|
||||||
notemap: list = [],
|
notemap: list = [],
|
||||||
|
infobar:str = '就绪',
|
||||||
) -> None:
|
) -> None:
|
||||||
'''使用参数建立基本的 音·创 窗口
|
'''使用参数建立基本的 音·创 窗口
|
||||||
:param root 根窗口
|
:param root 根窗口
|
||||||
@@ -68,75 +73,100 @@ class disp:
|
|||||||
map: list = [ # 一首曲目的音符数据
|
map: list = [ # 一首曲目的音符数据
|
||||||
音符数据
|
音符数据
|
||||||
]
|
]
|
||||||
|
:param infobar 显示信息用
|
||||||
'''
|
'''
|
||||||
|
|
||||||
self.root = root
|
# 载入参量 注意!图标将不被载入参数
|
||||||
|
self.__root = root
|
||||||
|
'''窗口根'''
|
||||||
|
|
||||||
self.title = title
|
self.title = title
|
||||||
self.geometry = geometry
|
'''窗口标题'''
|
||||||
self.menuWidget = menuWidget
|
|
||||||
|
self.menuWidgets = menuWidget
|
||||||
|
'''菜单设定项'''
|
||||||
|
|
||||||
self.wordView = wordView
|
self.wordView = wordView
|
||||||
|
'''言·论'''
|
||||||
|
|
||||||
self.buttons = buttons
|
self.buttons = buttons
|
||||||
|
'''快捷功能按钮'''
|
||||||
|
|
||||||
self.settingBox = settingBox
|
self.settingBox = settingBox
|
||||||
|
'''设置框'''
|
||||||
|
|
||||||
self.notemap = notemap
|
self.notemap = notemap
|
||||||
|
'''音符列表'''
|
||||||
|
|
||||||
self.setTitle(title, debug)
|
self.infoBar = infobar
|
||||||
self.setGeometry(geometry, debug)
|
'''信息显示版'''
|
||||||
self.setIcon(*iconbitmap, debug=debug)
|
|
||||||
|
|
||||||
self.setMenu(menuWidget)
|
|
||||||
|
|
||||||
self.initWidget(wordView, buttons, settingBox, notemap)
|
|
||||||
|
|
||||||
|
self.debug = debug
|
||||||
|
'''是否打开调试模式'''
|
||||||
|
|
||||||
|
self.setTitle()
|
||||||
|
self.setGeometry(geometry)
|
||||||
|
self.setIcon(*iconbitmap)
|
||||||
|
|
||||||
|
self.setMenu()
|
||||||
|
|
||||||
|
self.initWidget()
|
||||||
|
|
||||||
|
# =========================================================
|
||||||
# 设定函数部分
|
# 设定函数部分
|
||||||
def setTitle(self, title: str = '', debug: bool = False) -> None:
|
# =========================================================
|
||||||
'''设置窗口标题'''
|
|
||||||
self.root.title = title
|
|
||||||
if debug:
|
|
||||||
log(f"设置窗口标题{title}")
|
|
||||||
|
|
||||||
def setGeometry(self, geometry: str = '0x0', debug: bool = False) -> None:
|
def setTitle(self) -> None:
|
||||||
|
'''设置窗口标题'''
|
||||||
|
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 debug:
|
if self.debug:
|
||||||
log(f"设置窗口大小{geometry}")
|
log(f"设置窗口大小{geometry}")
|
||||||
|
|
||||||
def setIcon(
|
def setIcon(
|
||||||
self, bitmap: str = './musicreater.ico', default: str = '', debug: bool = False
|
self, bitmap: str = './musicreater.ico', default: str = ''
|
||||||
) -> None:
|
) -> None:
|
||||||
'''设置窗口图标
|
'''设置窗口图标
|
||||||
注意,default参数仅在Windows下有效,其意为将所有没有图标的窗口设置默认图标
|
注意,default参数仅在Windows下有效,其意为将所有没有图标的窗口设置默认图标
|
||||||
如果在非Windows环境使用default参数,一个Error将被升起'''
|
如果在非Windows环境使用default参数,一个Error将被升起'''
|
||||||
if not 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, menuWidgets: dict = {}, debug: bool = False) -> None:
|
def setMenu(self) -> None:
|
||||||
'''设置根菜单'''
|
'''设置根菜单'''
|
||||||
if not menuWidgets:
|
if not self.menuWidgets:
|
||||||
# 如果传入空参数则返回当前菜单
|
# 如果传入空参数则返回当前菜单
|
||||||
try:
|
try:
|
||||||
return self.RootMenu
|
return self.RootMenu
|
||||||
except Exception as E:
|
except Exception as E:
|
||||||
if debug:
|
if self.debug:
|
||||||
raise E
|
raise E
|
||||||
else:
|
else:
|
||||||
log('无法读取菜单信息', 'WARRING')
|
log('无法读取菜单信息', 'WARRING')
|
||||||
# 如果不是空参数则新建菜单
|
# 如果不是空参数则新建菜单
|
||||||
self.RootMenu = {}
|
self.RootMenu = {}
|
||||||
self.mainMenuBar = tk.Menu(self.root)
|
self.mainMenuBar = tk.Menu(self.__root)
|
||||||
for menuName, menuCmd in menuWidgets.items():
|
for menuName, menuCmd in self.menuWidgets.items():
|
||||||
# 取得一个菜单名和一堆菜单函数及其显示名称
|
# 取得一个菜单名和一堆菜单函数及其显示名称
|
||||||
menu = tk.Menu(self.mainMenuBar, tearoff=0)
|
menu = tk.Menu(self.mainMenuBar, tearoff=0)
|
||||||
for cmdName, cmdFunc in menuCmd.items():
|
for cmdName, cmdFunc in menuCmd.items():
|
||||||
@@ -146,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):
|
||||||
'''增加一个菜单项
|
'''增加一个菜单项
|
||||||
@@ -176,13 +206,7 @@ class disp:
|
|||||||
self.mainMenuBar.add_cascade(label=menuRoot, menu=menu)
|
self.mainMenuBar.add_cascade(label=menuRoot, menu=menu)
|
||||||
self.RootMenu[menuRoot] = menu
|
self.RootMenu[menuRoot] = menu
|
||||||
|
|
||||||
def initWidget(
|
def initWidget(self,) -> None:
|
||||||
self,
|
|
||||||
wordView: str = '音·创 Musicreater',
|
|
||||||
buttons: list = [],
|
|
||||||
settingBox: list = [],
|
|
||||||
notemap: list = [],
|
|
||||||
) -> None:
|
|
||||||
'''设置窗口小部件,分为:
|
'''设置窗口小部件,分为:
|
||||||
:言·论 WordView
|
:言·论 WordView
|
||||||
:快捷按钮面板 ButtonBar
|
:快捷按钮面板 ButtonBar
|
||||||
@@ -191,33 +215,38 @@ class disp:
|
|||||||
:各个音轨的显示框 TrackFrame
|
:各个音轨的显示框 TrackFrame
|
||||||
:信息显示版 InfoBar
|
:信息显示版 InfoBar
|
||||||
'''
|
'''
|
||||||
self._wordviewBar = tk.Label(self.root, bg='white', fg='black', text=wordView)
|
self._wordviewBar = tk.Label(
|
||||||
|
self.__root, bg='white', fg='black', text=self.wordView, font=(fontPattern[0], 30)
|
||||||
|
)
|
||||||
|
|
||||||
self.setWordView(wordView)
|
self.setWordView(self.wordView)
|
||||||
|
|
||||||
def setWordView(self, text: str) -> None:
|
def setWordView(self, text: str) -> None:
|
||||||
self._wordviewBar['text'] = text
|
self._wordviewBar['text'] = text
|
||||||
|
|
||||||
|
|
||||||
|
# =========================================================
|
||||||
# 预置函数部分
|
# 预置函数部分
|
||||||
def authorMenu(
|
# =========================================================
|
||||||
|
|
||||||
|
def authorWindowStarter(
|
||||||
authors: tuple = (
|
authors: tuple = (
|
||||||
('金羿', 'Email EillesWan@outlook.com', 'QQ 2647547478'),
|
('金羿', 'Email EillesWan@outlook.com', 'QQ 2647547478'),
|
||||||
('诸葛亮与八卦阵', 'QQ 474037765'),
|
('诸葛亮与八卦阵', 'QQ 474037765'),
|
||||||
),
|
)
|
||||||
translaters: tuple = None,
|
|
||||||
):
|
):
|
||||||
'''自定义作者界面'''
|
'''自定义作者界面'''
|
||||||
from languages.lang import _
|
from languages.lang import _
|
||||||
from languages.lang import DEFAULTLANGUAGE
|
from languages.lang import DEFAULTLANGUAGE
|
||||||
from msctLib.buildIN import version
|
from msctLib.buildIN import version
|
||||||
|
|
||||||
aabw = tk.Tk()
|
authorWindow = tk.Tk()
|
||||||
aabw.title(_('关于'))
|
authorWindow.title(_('关于'))
|
||||||
aabw.geometry('550x600') # 像素
|
authorWindow.geometry('550x600') # 像素
|
||||||
tk.Label(aabw, text='', font=('', 15)).pack()
|
tk.Label(authorWindow, text='', font=('', 15)).pack()
|
||||||
tk.Label(aabw, text=_('F音创'), font=('', 35)).pack()
|
tk.Label(authorWindow, text=_('F音创'), font=('', 35)).pack()
|
||||||
tk.Label(
|
tk.Label(
|
||||||
aabw,
|
authorWindow,
|
||||||
text='{} {}'.format(version.version[1] + version.version[0]),
|
text='{} {}'.format(version.version[1] + version.version[0]),
|
||||||
font=('', 15),
|
font=('', 15),
|
||||||
).pack()
|
).pack()
|
||||||
@@ -225,18 +254,18 @@ class disp:
|
|||||||
# grid 的row 是列数、column是行排,注意,这是针对空间控件本身大小来的,即是指向当前控件的第几个。
|
# grid 的row 是列数、column是行排,注意,这是针对空间控件本身大小来的,即是指向当前控件的第几个。
|
||||||
# place的 x、y是(x,y)坐标
|
# place的 x、y是(x,y)坐标
|
||||||
tk.Label(
|
tk.Label(
|
||||||
aabw,
|
authorWindow,
|
||||||
image=tk.PhotoImage(file='./resources/RyounLogo.png'),
|
image=tk.PhotoImage(file='./resources/RyounLogo.png'),
|
||||||
width=200,
|
width=200,
|
||||||
height=200,
|
height=200,
|
||||||
).pack()
|
).pack()
|
||||||
tk.Label(aabw, text=_('凌云pairs'), font=('', 20)).pack()
|
tk.Label(authorWindow, text=_('凌云pairs'), font=('', 20)).pack()
|
||||||
tk.Label(aabw, text='', font=('', 15)).pack()
|
tk.Label(authorWindow, text='', font=('', 15)).pack()
|
||||||
tk.Label(aabw, text=_('开发者'), font=('', 15)).pack()
|
tk.Label(authorWindow, text=_('开发者'), font=('', 15)).pack()
|
||||||
for i in authors:
|
for i in authors:
|
||||||
for j in i:
|
for j in i:
|
||||||
tk.Label(
|
tk.Label(
|
||||||
aabw,
|
authorWindow,
|
||||||
text=j,
|
text=j,
|
||||||
font=(
|
font=(
|
||||||
'',
|
'',
|
||||||
@@ -244,13 +273,13 @@ class disp:
|
|||||||
'bold' if i.index(j) == 0 else '',
|
'bold' if i.index(j) == 0 else '',
|
||||||
),
|
),
|
||||||
).pack()
|
).pack()
|
||||||
tk.Label(aabw, text='', font=('', 5)).pack()
|
tk.Label(authorWindow, text='', font=('', 5)).pack()
|
||||||
if DEFAULTLANGUAGE != 'zh-CN':
|
if DEFAULTLANGUAGE != 'zh-CN':
|
||||||
tk.Label(aabw, text=_('译者'), font=('', 15)).pack()
|
tk.Label(authorWindow, text=_('译者'), font=('', 15)).pack()
|
||||||
for i in _('TRANSLATERS').split(';'):
|
for i in _('TRANSLATERS').split(';'):
|
||||||
for j in i.split(','):
|
for j in i.split(','):
|
||||||
tk.Label(
|
tk.Label(
|
||||||
aabw,
|
authorWindow,
|
||||||
text=j,
|
text=j,
|
||||||
font=(
|
font=(
|
||||||
'',
|
'',
|
||||||
@@ -260,11 +289,11 @@ class disp:
|
|||||||
).pack()
|
).pack()
|
||||||
|
|
||||||
def exitAboutWindow():
|
def exitAboutWindow():
|
||||||
aabw.destroy()
|
authorWindow.destroy()
|
||||||
|
|
||||||
tk.Button(aabw, text=_('确定'), command=exitAboutWindow).pack()
|
tk.Button(authorWindow, text=_('确定'), command=exitAboutWindow).pack()
|
||||||
|
|
||||||
aabw.mainloop()
|
authorWindow.mainloop()
|
||||||
|
|
||||||
|
|
||||||
class ProgressBar:
|
class ProgressBar:
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ StrStartTime = str(datetime.datetime.now()).replace(':', '_')[:-7]
|
|||||||
'''字符串型的程序开始时间'''
|
'''字符串型的程序开始时间'''
|
||||||
|
|
||||||
|
|
||||||
def log(info:str = '',level : str = 'INFO', isPrinted:bool = False):
|
def log(info:str = '',level : str = 'INFO', isPrinted:bool = True):
|
||||||
'''将信息连同当前时间载入日志
|
'''将信息连同当前时间载入日志
|
||||||
:param info : str
|
:param info : str
|
||||||
日志信息
|
日志信息
|
||||||
@@ -66,12 +66,12 @@ def log(info:str = '',level : str = 'INFO', isPrinted:bool = False):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
if not os.path.exists('./log/'):
|
if not os.path.exists('./logs/'):
|
||||||
os.makedirs('./log/')
|
os.makedirs('./logs/')
|
||||||
|
|
||||||
outputinfo = f'{str(datetime.datetime.now())[11:19]}-[{level}] {info}'
|
outputinfo = f'{str(datetime.datetime.now())[11:19]}-[{level}] {info}'
|
||||||
|
|
||||||
with open('./log/'+StrStartTime+'.msct.log', 'a',encoding='UTF-8') as f:
|
with open('./logs/'+StrStartTime+'.msct.log', 'a',encoding='UTF-8') as f:
|
||||||
f.write(outputinfo+'\n')
|
f.write(outputinfo+'\n')
|
||||||
|
|
||||||
if isPrinted:
|
if isPrinted:
|
||||||
|
|||||||
@@ -50,17 +50,130 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
|
|||||||
}
|
}
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- 变量
|
||||||
|
|
||||||
|
1. `infoBar`
|
||||||
|
|
||||||
|
信息显示栏,一个字符串,用于显示一些信息。
|
||||||
|
|
||||||
|
|
||||||
|
2. `title`
|
||||||
|
|
||||||
|
窗口标题,字符串
|
||||||
|
|
||||||
|
|
||||||
|
3. `menuWidgets`
|
||||||
|
|
||||||
|
对于窗口菜单的设定,其格式如下:
|
||||||
|
```python
|
||||||
|
menuWidgets: dist = { # 菜单项目
|
||||||
|
str"菜单名" : dict{
|
||||||
|
str"选项名"|None : <function>选项函数
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
注:
|
||||||
|
`菜单名` : `str` 显示在菜单上的字符串
|
||||||
|
`选项名` : `str` 显示在菜单选项上的字符串
|
||||||
|
`选项函数` : `function` 菜单调取的函数(无返回值,无入参)
|
||||||
|
当 `选项名` 的布尔值判定为 `False` 的时候,无论 `选项函数` 为何,皆插入一段分割线,但 `选项函数` 不得为空
|
||||||
|
|
||||||
|
|
||||||
|
4. `wordView`
|
||||||
|
|
||||||
|
显示在言论上的文字,字符串
|
||||||
|
|
||||||
|
|
||||||
|
5. `buttons`
|
||||||
|
|
||||||
|
快捷功能按钮的列表,列表的元素为字典,字典的键是按钮的名称,值为一个元组,元组中含有两个元素,其中元组的第1个元素为按钮图标,是一个图片的路径;第2个元素为执行的函数,其值应当是一个函数对象。
|
||||||
|
|
||||||
|
```python
|
||||||
|
button: list = [ # 操作按钮部分
|
||||||
|
dict{
|
||||||
|
str"按钮名称" : tuple(
|
||||||
|
按钮图标,
|
||||||
|
执行函数
|
||||||
|
)
|
||||||
|
},
|
||||||
|
...
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
6. `settingBox`
|
||||||
|
|
||||||
|
设置框,用于设置音乐的基本属性,例如词作者,曲作者等,设置格式如下:
|
||||||
|
|
||||||
|
```python
|
||||||
|
settingbox: list = [ #设置部分显示的字样及其对应的设置函数
|
||||||
|
tuple(
|
||||||
|
设置名称:str,
|
||||||
|
值类型:tuple,
|
||||||
|
显示内容:str,
|
||||||
|
设置操作函数:<function>,
|
||||||
|
),
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
其中,值类型可以是如下几个项
|
||||||
|
1. `('str',)` 字符串类型,使用文本框输入数据
|
||||||
|
2. `('bool',)` 布尔类型,使用复选框输入数据
|
||||||
|
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`对菜单的基础设定
|
1. `setMenu`对菜单的基础设定
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python
|
```python
|
||||||
{
|
{
|
||||||
菜单名 : {
|
菜单名 : {
|
||||||
选项名 : 选项函数
|
选项名 : 选项函数
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
```
|
||||||
|
|
||||||
注:
|
注:
|
||||||
`菜单名` : `str` 显示在菜单上的字符串
|
`菜单名` : `str` 显示在菜单上的字符串
|
||||||
@@ -115,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 暂时不需要
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
'''此文件为音·创的插件加载程序,为了满足各平台需求,使用的是CLI界面'''
|
|
||||||
|
|
||||||
# W-YI 金羿
|
|
||||||
# QQ 2647547478
|
|
||||||
# 音·创 开发交流群 861684859
|
|
||||||
# Email EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
|
|
||||||
# 版权所有 Team-Ryoun 金羿
|
|
||||||
# 若需转载或借鉴 请附作者
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
Copyright 2022 Eilles Wan (金羿)
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the 'License');
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an 'AS IS' BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# 代码写的并非十分的漂亮,还请大佬多多包涵;本软件源代码依照Apache软件协议公开
|
|
||||||
|
|
||||||
|
|
||||||
# 下面为正文
|
|
||||||
|
|
||||||
|
|
||||||
print("""
|
|
||||||
音·创 插件管理
|
|
||||||
Musicreater PLUGINS Management
|
|
||||||
""")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BIN
msctspt/__pycache__/__init__.cpython-37.pyc
Normal file
BIN
msctspt/__pycache__/__init__.cpython-37.pyc
Normal file
Binary file not shown.
BIN
msctspt/__pycache__/bugReporter.cpython-37.pyc
Normal file
BIN
msctspt/__pycache__/bugReporter.cpython-37.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
msctspt/__pycache__/threadOpera.cpython-37.pyc
Normal file
BIN
msctspt/__pycache__/threadOpera.cpython-37.pyc
Normal file
Binary file not shown.
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:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import amulet
|
|||||||
from amulet.api.block import Block
|
from amulet.api.block import Block
|
||||||
from amulet.utils.world_utils import block_coords_to_chunk_coords as bc2cc
|
from amulet.utils.world_utils import block_coords_to_chunk_coords as bc2cc
|
||||||
from amulet_nbt import TAG_String as ts
|
from amulet_nbt import TAG_String as ts
|
||||||
from nmcsup.log import log
|
from msctLib.log import log
|
||||||
|
|
||||||
|
|
||||||
def hans2pinyin(hans, style=3):
|
def hans2pinyin(hans, style=3):
|
||||||
@@ -33,11 +33,8 @@ def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, playerSel
|
|||||||
commands = []
|
commands = []
|
||||||
length = len(List)
|
length = len(List)
|
||||||
j = 1
|
j = 1
|
||||||
print(List)
|
|
||||||
for k in range(len(List)):
|
for k in range(len(List)):
|
||||||
i = List[k][0]
|
i = List[k][0]
|
||||||
print(i)
|
|
||||||
print(type(i))
|
|
||||||
try:
|
try:
|
||||||
commands.append(
|
commands.append(
|
||||||
f"execute @a{playerSelection} ~ ~ ~ execute @s[scores={{{ScoreboardName}="
|
f"execute @a{playerSelection} ~ ~ ~ execute @s[scores={{{ScoreboardName}="
|
||||||
@@ -54,7 +51,6 @@ def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, playerSel
|
|||||||
pass
|
pass
|
||||||
# a += List[i][1]
|
# a += List[i][1]
|
||||||
# commands.append("\n\n# 凌云我的世界开发团队 x 凌云软件开发团队 : W-YI(金羿)\n")
|
# commands.append("\n\n# 凌云我的世界开发团队 x 凌云软件开发团队 : W-YI(金羿)\n")
|
||||||
print(commands)
|
|
||||||
return commands
|
return commands
|
||||||
|
|
||||||
|
|
||||||
@@ -268,6 +264,7 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
|
|||||||
:return 返回一个列表,其中包含了音乐生成的所有的指令方块数据"""
|
:return 返回一个列表,其中包含了音乐生成的所有的指令方块数据"""
|
||||||
from msctspt.threadOpera import NewThread
|
from msctspt.threadOpera import NewThread
|
||||||
|
|
||||||
|
|
||||||
allblocks = []
|
allblocks = []
|
||||||
'''需要放置的方块'''
|
'''需要放置的方块'''
|
||||||
baseDire = direction
|
baseDire = direction
|
||||||
@@ -275,14 +272,15 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
|
|||||||
direction = list(direction)
|
direction = list(direction)
|
||||||
|
|
||||||
def trackDealing(direction,track):
|
def trackDealing(direction,track):
|
||||||
|
print('=========DEBUG=========音轨起方块:', direction)
|
||||||
blocks = []
|
blocks = []
|
||||||
cmdList = classList_conversion_SinglePlayer(track['notes'], track['set']['ScoreboardName'],
|
cmdList = classList_conversion_SinglePlayer(track['notes'], track['set']['ScoreboardName'],
|
||||||
music['mainset']['PlayerSelect'], isProsess)
|
music['mainset']['PlayerSelect'], isProsess)
|
||||||
if len(cmdList) == 0:
|
if len(cmdList) == 0:
|
||||||
return
|
return []
|
||||||
elif cmdList is []:
|
elif cmdList is []:
|
||||||
return
|
return []
|
||||||
dire = direction
|
dire = direction.copy()
|
||||||
down = False
|
down = False
|
||||||
'''当前是否为向下的阶段?'''
|
'''当前是否为向下的阶段?'''
|
||||||
# 开头的指令方块
|
# 开头的指令方块
|
||||||
@@ -300,8 +298,9 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
|
|||||||
# :4 x轴负方向 无条件
|
# :4 x轴负方向 无条件
|
||||||
# :5 x轴正方向 无条件
|
# :5 x轴正方向 无条件
|
||||||
for cmd in cmdList:
|
for cmd in cmdList:
|
||||||
|
print('=========DEBUG=========方块:', dire)
|
||||||
blocks.append(formCmdBlock(dire, cmd, 5 if (down is False and dire[1] == height + direction[1]) or (
|
blocks.append(formCmdBlock(dire, cmd, 5 if (down is False and dire[1] == height + direction[1]) or (
|
||||||
down and dire[1] == direction + 1) else 0 if down else 1, 2, needRedstone=False))
|
down and dire[1] == direction[1] + 1) else 0 if down else 1, 2, needRedstone=False))
|
||||||
if down:
|
if down:
|
||||||
if dire[1] > direction[1] + 1:
|
if dire[1] > direction[1] + 1:
|
||||||
dire[1] -= 1
|
dire[1] -= 1
|
||||||
@@ -309,15 +308,15 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
|
|||||||
if dire[1] < height + direction[1]:
|
if dire[1] < height + direction[1]:
|
||||||
dire[1] += 1
|
dire[1] += 1
|
||||||
|
|
||||||
if (down is False and dire[1] == height + direction[1]) or (down and dire[1] == direction + 1):
|
if (down is False and dire[1] == height + direction[1]) or (down and dire[1] == direction[1] + 1):
|
||||||
down = not down
|
down = not down
|
||||||
dire[0] += 1
|
dire[0] += 1
|
||||||
return blocks
|
return blocks
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
for track in music['musics']:
|
for track in music['musics']:
|
||||||
threads.append(NewThread(trackDealing,(direction,track)))
|
threads.append(NewThread(trackDealing,(direction.copy(),track)))
|
||||||
threads[threads.__len__()-1].start()
|
threads[-1].start()
|
||||||
direction[2] += 2
|
direction[2] += 2
|
||||||
|
|
||||||
for th in threads:
|
for th in threads:
|
||||||
|
|||||||
62
nmcsup/MMFM Cpp E Develop Log.txt
Normal file
62
nmcsup/MMFM Cpp E Develop Log.txt
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
《我的世界》函数音乐生成器
|
||||||
|
C++版本开发日志
|
||||||
|
|
||||||
|
我在本年初提出此计划,由于学业原因,便延迟计划开始编写代码。
|
||||||
|
|
||||||
|
Beta V0.1 - 20200920
|
||||||
|
0.新增命令help
|
||||||
|
1.新增命令make
|
||||||
|
2.新增命令form
|
||||||
|
3.新增命令exit
|
||||||
|
4.能够根据输入的CDEFGAB转换成.mcfunction
|
||||||
|
5.命令行界面操作
|
||||||
|
|
||||||
|
Beta V0.2 - 20200921
|
||||||
|
0.修改命令make为write
|
||||||
|
1.新增可设置代替实体名
|
||||||
|
2.新增可设置计分板名
|
||||||
|
3.新增乐曲标题设定项
|
||||||
|
4.新增循环模式设定项
|
||||||
|
5.由于"器"一字被网易屏蔽,修改程序名为"我的世界函数音乐生成者"
|
||||||
|
|
||||||
|
Beta V0.3 - 20200922
|
||||||
|
0.修改命令write为make
|
||||||
|
1.将代替实体名加入设定项
|
||||||
|
2.将计分板名加入设定项
|
||||||
|
3.将乐曲标题加入设定项
|
||||||
|
|
||||||
|
Beta V0.4 - 20200923
|
||||||
|
0.新增生成文件名称设定项
|
||||||
|
1.新增bug:最后三个音符的指令不写入文件(DE001)
|
||||||
|
2.新增命令ver可显示版本及关于信息
|
||||||
|
|
||||||
|
Beta V0.5 - 20200925
|
||||||
|
0.修改命令make为write
|
||||||
|
1.新增设定项文件路径
|
||||||
|
2.支持音符由简谱1234567音调表示
|
||||||
|
3.支持休止符0
|
||||||
|
|
||||||
|
Beta V0.6 - 20200926
|
||||||
|
0.修改命令write为make
|
||||||
|
1.修复bug:最后三个音符的指令不写入文件(DE001)
|
||||||
|
2.新增命令buld
|
||||||
|
3.新增命令comd
|
||||||
|
4.由help打开的帮助菜单由一页变为两页
|
||||||
|
5.命令行窗口大小自动调整
|
||||||
|
|
||||||
|
Beta V0.7 - 20200927
|
||||||
|
0.新增命令mdir,可以直接生成整个函数包
|
||||||
|
1.新增命令ldir,可以查看当前目录信息
|
||||||
|
3.新增指令look,可以显示指定文本文件内容
|
||||||
|
4.删除退出时的等待按键提示
|
||||||
|
5.新增bug:使用look查看文件结束后有几率卡崩或无法显示提示符">>>"(DE002、DE003)
|
||||||
|
6.新增bug:mdir无法使用(DE004)
|
||||||
|
|
||||||
|
TO-DO Beta V0.8_中秋国庆版 - 20200929
|
||||||
|
0.新增彩蛋命令国庆,在国庆期间输入可以得到一份中国国旗字符画
|
||||||
|
1.新增彩蛋命令中秋,在中秋期间输入可以得到一份月亮字符画
|
||||||
|
——此版本直接跳过
|
||||||
|
|
||||||
|
Beta V0.9 - 20201224
|
||||||
|
0.修复bug:mdir无法使用(DE004)
|
||||||
|
1.新增bug:mdir一运行立马产生错误并停止运行(DE005)
|
||||||
126
nmcsup/MMFM Py E Development Log.txt
Normal file
126
nmcsup/MMFM Py E Development Log.txt
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
这是MMFM(我的世界函数音乐生成器)的Python版本日志
|
||||||
|
我从2021年5月移植,中间停更了一段时间。
|
||||||
|
|
||||||
|
Beta V 0.0.0
|
||||||
|
2021 5 ?15 - 2021 5 23
|
||||||
|
1.将C++版本全部有用的功能移植至Python版本
|
||||||
|
2.新增了可更改的音乐乐器
|
||||||
|
3.新增了可更改的语言包Chinese
|
||||||
|
4.附带应用"jsonread - lang"可用于新增语言文本
|
||||||
|
5.支持全部音阶,但不支持附点、X分音符等
|
||||||
|
|
||||||
|
Beta V 0.0.1
|
||||||
|
2021 6 5
|
||||||
|
1.可读取不同的语言文件,通过lang指令完成
|
||||||
|
2.新增English语言包
|
||||||
|
3.在输入非内部指令时以命令行运行
|
||||||
|
|
||||||
|
Beta V 0.0.2
|
||||||
|
2021 6 13
|
||||||
|
1.支持设置项保存
|
||||||
|
2.语言设置移至设置项中
|
||||||
|
3.新增RESET命令以重置所有设置项至默认
|
||||||
|
4.支持休止符(“0”)
|
||||||
|
5.设置项更加人性化
|
||||||
|
|
||||||
|
Beta V 0.0.3
|
||||||
|
2021 6 14
|
||||||
|
1.支持全平台(能运行Python的平台)
|
||||||
|
2.安卓系统下不需要从源地址运行
|
||||||
|
3.设置中给出乐器列表并需要使用在列表内的乐器
|
||||||
|
|
||||||
|
Beta V 0.0.4
|
||||||
|
2021 6 14
|
||||||
|
1.新增win指令支持窗口化输入
|
||||||
|
2.语言包English停止支持
|
||||||
|
3.停止支持的语言包部分将使用Chinese语言包
|
||||||
|
4.输出结果更加人性化
|
||||||
|
5.停止支持输入非内部命令以系统指令运行
|
||||||
|
|
||||||
|
Formal V 0.0.1
|
||||||
|
2021 6 21 - 2021 6 22
|
||||||
|
1*.支持附点、延音等时间延长谱号
|
||||||
|
2*.支持X分音符等时间缩短谱号
|
||||||
|
3.删除win指令支持的窗口化输入,即禁止窗口运行
|
||||||
|
4.新增日志系统,程序运行将载入日志以便检查
|
||||||
|
*实际上输入的时候是不支持的,只是支持了修改音符延长时间而已
|
||||||
|
|
||||||
|
|
||||||
|
Formal V 0.0.2
|
||||||
|
2121 6 22
|
||||||
|
1.解决了字符串解析为列表时出现的问题
|
||||||
|
2.停止调整命令行窗口大小
|
||||||
|
3.解决了输入的音符被除重的问题
|
||||||
|
4.buld指令建立的附加包中新增startXXX函数用于初始设定
|
||||||
|
|
||||||
|
|
||||||
|
Formal V 0.0.3
|
||||||
|
2021 6 29
|
||||||
|
1.新增save、load指令支持工程文件存取
|
||||||
|
2.新增default指令存储默认设置
|
||||||
|
3.输入exit指令退出时不会保存为默认设置
|
||||||
|
4.新增delog指令在Windows系统下删除日志文件
|
||||||
|
|
||||||
|
|
||||||
|
Formal V 0.0.4 ~ 0.0.4.2
|
||||||
|
2021 6 30
|
||||||
|
1.支持midi解析,能够通过midi文件解析音符,且仅支持打击乐器,即音长为0的声音,不能解析音的长度,解析仅包含note_on消息而不包含note_off消息,且暂时不能解析音乐附带的其他信息
|
||||||
|
2.新增彩蛋指令TAFTCPC(the Anniversary of the Founding of The Communist Party of China) -(0.0.4.1)
|
||||||
|
3.修复读取文件时读取内容不正确的问题 -(0.0.4.2)
|
||||||
|
|
||||||
|
|
||||||
|
Formal V0.0.4.3
|
||||||
|
2021 7 1
|
||||||
|
1.内部代码优化,更加模块化,便于以后窗口化调用
|
||||||
|
|
||||||
|
|
||||||
|
Formal V0.0.5 ~ 0.0.5.2
|
||||||
|
2021 7 3 ~ 2021 7 4
|
||||||
|
1.支持同时编辑、生成多个音乐函数
|
||||||
|
2.支持一个项目中保存多个文件
|
||||||
|
3.支持同一函数中出现不同的乐器 -(0.0.5.1)
|
||||||
|
4.读取midi文件时支持音长的自动解析读取,并支持选择音轨 -(0.0.5.2)
|
||||||
|
5.修复了编辑不同乐器时出现闪退的问题 -(0.0.5.2)
|
||||||
|
|
||||||
|
|
||||||
|
Formal V0.0.5.3
|
||||||
|
2021 7 5
|
||||||
|
1.修复了存储工程文件时的崩溃问题
|
||||||
|
2.读取midi时支持通过音轨自动生成不同的函数文件
|
||||||
|
3.修复了生成函数文件中计分板为浮点数的问题
|
||||||
|
4.修复文件路径不正确的问题
|
||||||
|
5.新增应用bat脚本(仅Windows):可以快速启动、可以清除日志
|
||||||
|
6.新增开发bat脚本(仅Windows):可以快速编译文件并启动测试、可以快速编译文件、可以快速启动测试
|
||||||
|
|
||||||
|
|
||||||
|
Formal V0.0.6
|
||||||
|
2021 7 8 - 2021 7 9
|
||||||
|
1.停止对非Windows系统环境的支持
|
||||||
|
2.支持预听生成的函数,即音乐试听
|
||||||
|
3.乐曲修改设置:单个乐曲可包含多个文件序列(多个乐器),歌曲可以有自己单独的曲名、执行实体、执行计分板等独立设置;同时,每个歌曲可包含不同的乐器序列等等
|
||||||
|
4.读取的音频格式更新:音符、我的世界音调、频率(Hz),仍是字典:'str' : [ float , float ]
|
||||||
|
5.单个项目内不包含多首歌曲,但是做了预制功能:可以编辑多个项目(现在暂时不行)
|
||||||
|
6.不可单独编辑单个音符的乐器
|
||||||
|
7.放弃对语言文件的读取的支持
|
||||||
|
8.停止支持对已读取的音轨的编辑(即删除edit指令)
|
||||||
|
9.停止支持全局设置的修改,以及其相关支持(即删除当前的set、reset、default指令)
|
||||||
|
10.预制支持对于单个音轨设置的修改以及音乐主设置的修改(现在暂时不行)
|
||||||
|
11.存储的项目结构变为json文件结构,则无需zipfile库
|
||||||
|
12.生成的文件包含:支持函数(1个、循环执行)、音乐函数(多个、循环执行)、启动函数(1个、执行一次)
|
||||||
|
13.发现并修改错误:遇到休止符0时,播放会报错并停止
|
||||||
|
14.新增彩蛋指令:RYOUN,生成团队队歌文件及项目
|
||||||
|
15.项目更名为“我的世界函数音乐构建”
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TO-DO
|
||||||
|
1.支持从midi文件的元信息中收取音符信息并自动生成
|
||||||
|
2.Windows平台下支持窗口化
|
||||||
|
3.支持使用WebSocket接口自动播放已编辑的音乐
|
||||||
|
4.可以编辑多个项目
|
||||||
|
5.能够自动将一个长串的音乐分成多个函数文件
|
||||||
|
6.对于单个音轨设置的修改以及音乐主设置的修改
|
||||||
|
7.支持汇报崩溃记录(通过邮件附件的方式)
|
||||||
BIN
nmcsup/__pycache__/__init__.cpython-37.pyc
Normal file
BIN
nmcsup/__pycache__/__init__.cpython-37.pyc
Normal file
Binary file not shown.
BIN
nmcsup/__pycache__/log.cpython-37.pyc
Normal file
BIN
nmcsup/__pycache__/log.cpython-37.pyc
Normal file
Binary file not shown.
BIN
nmcsup/__pycache__/vers.cpython-37.pyc
Normal file
BIN
nmcsup/__pycache__/vers.cpython-37.pyc
Normal file
Binary file not shown.
@@ -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 年度挑战
|
||||||
@@ -40,7 +19,7 @@ Copyright © W-YI 2022
|
|||||||
新更新日志
|
新更新日志
|
||||||
|
|
||||||
Delta 0.2.0
|
Delta 0.2.0
|
||||||
2022 2 10 ~ 2022 3
|
2022 2 10 ~ 2022 x
|
||||||
1.进行了大量的代码重构,使之更加易于开发
|
1.进行了大量的代码重构,使之更加易于开发
|
||||||
2.对功能进行了精简优化,能够更加方便的开发新功能
|
2.对功能进行了精简优化,能够更加方便的开发新功能
|
||||||
3.完善程序的一些外观与性能优化,使用了更多多线程板块
|
3.完善程序的一些外观与性能优化,使用了更多多线程板块
|
||||||
@@ -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.程序图标完善
|
||||||
|
|||||||
BIN
resources/msctIcon.png
Normal file
BIN
resources/msctIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 123 KiB |
BIN
resources/msctIcon_256px.png
Normal file
BIN
resources/msctIcon_256px.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
resources/msctIcon_512px.png
Normal file
BIN
resources/msctIcon_512px.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 123 KiB |
@@ -64,7 +64,7 @@ A man achieve with challenges.
|
|||||||
你们——会祝福下一个时代吗? ——原神
|
你们——会祝福下一个时代吗? ——原神
|
||||||
任何旅途中的旅伴同行,都会有分别的一日。 ——原神
|
任何旅途中的旅伴同行,都会有分别的一日。 ——原神
|
||||||
「永恒」最接近于天理 ——原神
|
「永恒」最接近于天理 ——原神
|
||||||
等旅途到达了终点,再考虑停留于何处吧。 ——原神
|
等旅途到达了终点,再考虑停留于何处吧 ——原神
|
||||||
人海中相遇,本是缘分。 ——原神
|
人海中相遇,本是缘分。 ——原神
|
||||||
凡缘朦朦仙缘滔
|
凡缘朦朦仙缘滔
|
||||||
因果红尘渺渺,烟消 ——原神
|
因果红尘渺渺,烟消 ——原神
|
||||||
@@ -99,3 +99,42 @@ A man achieve with challenges.
|
|||||||
苦痛的旅程中盘错着举世的谎言
|
苦痛的旅程中盘错着举世的谎言
|
||||||
欲落的花会告诉你我无尽的思念,而风会在此刻替我拥抱住你。 ——蝶<1361223398>
|
欲落的花会告诉你我无尽的思念,而风会在此刻替我拥抱住你。 ——蝶<1361223398>
|
||||||
仰望这深邃的夜空,明星洒下的光,总是无尽斑驳
|
仰望这深邃的夜空,明星洒下的光,总是无尽斑驳
|
||||||
|
欲知后事如何,唯有后世来分说 ——b站BV1jm4y1S76q
|
||||||
|
曲高未必人不识,自有知音和清词 ——原神
|
||||||
|
接引春雷焚身骨,化灰以养万类荣 ——原神
|
||||||
|
浮世景色百千年依旧,人之在世却如白露与泡影 ——原神
|
||||||
|
今古诸事,激荡中流,宏图待看新秀 ——原神
|
||||||
|
烟花易逝,人情长存 ——原神
|
||||||
|
正因为我们都是须臾之人,才更应该珍惜须臾的美好 ——原神
|
||||||
|
如果说,生命的脚印终有一天会被时间的尘埃掩埋,那么我们就永远不能停下脚步 ——明日方舟
|
||||||
|
只要不停下脚步,道路就会不断延伸。 ——某B站用户
|
||||||
|
红色光芒从遥远的地平线上浮现,影月留给人间的黑暗逐渐退潮 ——明日方舟
|
||||||
|
如果没有人有了解真相的意愿,那就算把真相撒播在街道上,也不会发芽的 ——明日方舟
|
||||||
|
永远不要否定善行,道德和良知永远不会错 ——明日方舟
|
||||||
|
唯独死亡不可避免,唯独生命不可辜负 ——少女前线
|
||||||
|
人即像树,枝叶越向往明亮的天空,根须越深入幽暗的地底 ——尼采
|
||||||
|
沉默不代表服从,生活在黑暗里,不代表放弃光明 ——少女前线
|
||||||
|
但行前路终无悔,只盼万事在人为 ——废墟图书馆
|
||||||
|
我忘却了所有悲剧,所见之处皆是奇迹 ——空洞骑士
|
||||||
|
只要坚信自己的道路,就无所谓天气是晴是雨。 ——原神
|
||||||
|
在这个真实的太过分的世界里,每个人都需要仰望星空 ——原神
|
||||||
|
当你重新踏上旅途之后,一定要记得旅途本身的意义 ——原神
|
||||||
|
识花鸟之一趣,照月风之长路 ——原神
|
||||||
|
只要不失去你的崇高,整个世界都会向你敞开 ——原神
|
||||||
|
每个人都是一个自己的精神支柱 ——GitHub Copliot
|
||||||
|
I am a dreamer, but I am not a dreamer. ——GitHub Copliot
|
||||||
|
The only thing that makes a dream impossible is the fear of failure. ——GitHub Copliot
|
||||||
|
A dream is a wish that you have or something that you have dreamed of in your mind. ——GitHub Copliot
|
||||||
|
It is not the strongest of the species that survives, nor the most intelligent, nor the fastest. ——GitHub Copliot
|
||||||
|
To be a dreamer is to be a free spirit. ——GitHub Copliot
|
||||||
|
To be or not to be is a question. ——莎士比亚
|
||||||
|
即使身躯残破,也要在战场上拼杀到最后一刻,要战斗到流干最后一滴血为止。 ——原神
|
||||||
|
朋友之间,也许就是要心知肚明才好 ——原神
|
||||||
|
轻盈的风,偶尔也会变得沉重…虽然,只是凡人难以察觉的短短一瞬 ——原神
|
||||||
|
我听过树的歌、乌云和雨的歌、遥远北方的青色飞龙悠远的吟唱,也听过我降落在地面上时,狐、兔,和地里的虫颤抖的协奏 ——原神
|
||||||
|
无人来书写我们的故事,我们就是故事本身。
|
||||||
|
故事的种子是生活与旅行 ——原神
|
||||||
|
每个人的「生活(故事)」,都只属于自己… ——原神
|
||||||
|
如果我们要再会,就在夕阳与海面相遇的地方再会吧。 ——原神
|
||||||
|
到那时,再让我看看你如同钻石一般明净而璀璨的灵魂,是否蒙上了一缕尘埃吧。 ——原神
|
||||||
|
水过时迁
|
||||||
|
|||||||
Reference in New Issue
Block a user