46 Commits

Author SHA1 Message Date
EillesWan
3ba8fdad8c Merge 2022-05-11 15:23:44 +08:00
EillesWan
7357a09e5f 无主要的修改,即将更换窗口库 2022-05-11 15:19:40 +08:00
bgArray
3bc19ac396 update README.md. 2022-05-06 11:59:04 +00:00
EillesWan
f3c5044800 撤销了disp类,但是bug依旧没有变化。 2022-04-24 17:56:57 +08:00
EillesWan
ca2e8c9155 更新。 2022-04-21 23:52:16 +08:00
EillesWan
1715735800 Merge 2022-04-08 01:29:39 +08:00
EillesWan
d22b5b0c42 我不知道这样有没有用,但是这确实是更新了bdx操作,我不知道bug在哪里 2022-04-08 01:26:35 +08:00
Eilles Wan
549dd3dbf9 删除文件 msctplugin 2022-04-07 16:19:48 +00:00
Eilles Wan
a65bfeba20 删除文件 Musicreater.New.py 2022-04-07 16:19:33 +00:00
EillesWan
7edf979aee 修复bdx生成不了的问题 2022-04-07 18:07:32 +08:00
EillesWan
ae83f9c21e 更新了内部数据格式文档,修复部分bug 2022-04-05 00:55:43 +08:00
EillesWan
dd34ac9998 紧急更新,修复了无法将整首歌转换bdx的bug,其余bug正在发现。 2022-04-03 21:38:17 +08:00
EillesWan
2da06136c5 Merge branch 'master' of https://gitee.com/EillesWan/Musicreater 2022-04-03 00:51:39 +08:00
EillesWan
e9f4230a2d 金羿生日快乐~ 2022-04-03 00:51:34 +08:00
bgArray
1b7ab73c02 update README_EN.md. 2022-04-01 07:54:34 +00:00
EillesWan
2624c081bb 生活不易,改README出气 2022-04-01 15:09:03 +08:00
EillesWan
87cc189da8 修正单词拼写错误 2022-04-01 15:07:22 +08:00
Eilles Wan
668bf480b2 重命名 README_en.md 为 README_EN.md 2022-04-01 06:42:30 +00:00
EillesWan
4cc3f2678f 没事?没事就改README! 2022-04-01 14:38:50 +08:00
EillesWan
701e9d5129 Merge branch 'master' of https://gitee.com/EillesWan/Musicreater 2022-04-01 14:23:08 +08:00
EillesWan
8dd2694e82 左改改右改改,就是不改代码/qwq 2022-04-01 14:23:03 +08:00
bgArray
ac962f0ab7 update README.md. 2022-04-01 05:50:48 +00:00
EillesWan
b800384547 Merge branch 'master' of https://gitee.com/EillesWan/Musicreater 2022-04-01 12:48:41 +08:00
EillesWan
5da1041664 喵喵喵? 2022-04-01 12:48:35 +08:00
Eilles Wan
966ce515c3 update README.md. 2022-04-01 04:22:57 +00:00
EillesWan
349c255f5f LOGO 2022-04-01 11:53:43 +08:00
bgArray
cbb77086d0 update README.md. 2022-04-01 03:17:14 +00:00
bgArray
280e50f4cb update README.md. 2022-04-01 02:55:58 +00:00
bgArray
a2a37be8ef update README.md. 2022-04-01 02:33:10 +00:00
Eilles Wan
7acd6b7e38 update resources/myWords.txt. 移除上一次更改 2022-03-31 01:23:11 +00:00
bgArray
4c95f76cf9 update 道法重大更新 2022-03-30 03:01:08 +00:00
Eilles Wan
8a1a159eb8 update README.md. 2022-03-29 08:51:53 +00:00
Eilles Wan
cb43caef26 update README.md. 2022-03-29 08:51:29 +00:00
Eilles Wan
200167ef84 update README.md. 2022-03-29 08:51:23 +00:00
EillesWan
7e0a127406 Merge branch 'master' of https://gitee.com/EillesWan/Musicreater 2022-03-29 16:46:40 +08:00
EillesWan
5e70dd73a1 重大更新,我新增了很多名言名句!!! 2022-03-29 16:46:31 +08:00
bgArray
7229b12e99 删除文件 languages/log 2022-03-28 15:13:37 +00:00
bgArray
074124bc3d 删除文件 .idea 2022-03-28 15:13:09 +00:00
bgArray
91446bfd81 翻译保存器 2022-03-28 23:12:24 +08:00
EillesWan
5011efcdee Merge branch 'master' of https://gitee.com/EillesWan/Musicreater 2022-03-28 20:42:12 +08:00
EillesWan
3b4af19379 暂存更改以便pull 2022-03-28 20:40:17 +08:00
EillesWan
d3d89d2567 增强对于Linux的支持 2022-03-28 20:29:36 +08:00
EillesWan
441d1e9982 我把旧的MMFM的日志一起加入进来,作为历史的参考。 2022-03-28 14:04:30 +08:00
EillesWan
77e738cb7e 修改读我档 2022-03-28 12:33:35 +08:00
EillesWan
46b6884e64 Merge branch 'master' of https://gitee.com/EillesWan/Musicreater 2022-03-26 21:01:29 +08:00
EillesWan
d0a63d0f8e 为了pull,暂存更改 2022-03-26 21:01:23 +08:00
58 changed files with 3132 additions and 2496 deletions

BIN
AutoInstaller/MSCT Auto Installer Executable file

Binary file not shown.

View File

@@ -35,35 +35,86 @@ A free opensource software which is used for creating all kinds of musics in Min
# 下面为正文
# 一定会好起来的
from msctspt.bugReporter import version
from msctLib.buildIN import version
__ver__ = f'{version.version[1]} {version.version[0]}'
__author__ = '金羿Eilles'
from msctLib.display import *
import msctLib.display as disp
from msctLib.function import *
from msctLib.data import uniteIO
hb = r''' __ __
/\ \/\ \
\ \ \_\ \ __ _____ _____ __ __
\ \ _ \ /'__`\ /\ '__`\ /\ '__`\ /\ \/\ \
\ \ \ \ \ /\ \L\.\_\ \ \L\ \\ \ \L\ \\ \ \_\ \
\ \_\ \_\\ \__/.\_\\ \ ,__/ \ \ ,__/ \/`____ \
\/_/\/_/ \/__/\/_/ \ \ \/ \ \ \/ `/___/> \
\ \_\ \ \_\ /\___/
\/_/ \/_/ \/__/
____ __ __ __
/\ _`\ __ /\ \__ /\ \ /\ \
\ \ \L\ \ /\_\ _ __ \ \ ,_\\ \ \___ \_\ \ __ __ __
\ \ _ <'\/\ \ /\`'__\\ \ \/ \ \ _ `\ /'_` \ /'__`\ /\ \/\ \
\ \ \L\ \\ \ \\ \ \/ \ \ \_ \ \ \ \ \ /\ \L\ \ /\ \L\.\_\ \ \_\ \
\ \____/ \ \_\\ \_\ \ \__\ \ \_\ \_\\ \___,_\\ \__/.\_\\/`____ \
\/___/ \/_/ \/_/ \/__/ \/_/\/_/ \/__,_ / \/__/\/_/ `/___/> \
/\___/
\/__/ '''
def __main__():
disp()
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')
os.system('cls')
for i in range(len(hb)):
print(hb[i], end='', flush=True)
time.sleep(random.random() * 0.001)
input("金羿 生日快乐!")
elif '三月初五' in zhdate.ZhDate.today().chinese():
input('缅怀先祖 祭祀忠勇 勿忘国耻 振兴中华')
else:
def test():
print('!!!', end=' ')
def test2():
print('???', end=' ')
window = disp.disp(
disp.root,
geometry='1200x800',
menuWidget={
'文件': {'新建': test, '打开': test},
'编辑': {'撤销': test, '重做': test},
'视图': {'缩放': test},
'帮助': {'关于': disp.authorWindowStarter},
},
title='音·创 0.2 测试中',
buttons=[
{
'新建': ('', test2),
'打开': ('', test2)
},
{
'测试': ('', test2)
}
],
debug=True,
)
if __name__ == '__main__':
__main__()
__main__()

425
Musicreater.main.py Normal file
View File

@@ -0,0 +1,425 @@
# -*- coding: utf-8 -*-
'''音·创的Tkinter GUI窗口界面显示主程序
:若要使用其他界面显示,请详见:
:开发说明|指南'''
import tkinter as tk
import tkinter.simpledialog as sdialog
import tkinter.filedialog as fdialog
from msctLib.log import log
DEFAULTBLUE = (0, 137, 242)
# 0089F2
WEAKBLUE = (0, 161, 231)
LIGHTBLUE = (38, 226, 255)
# 26E2FF
RED = (255, 52, 50)
# FF3432
PURPLE = (171, 112, 255)
# AB70FF
GREEN = (0, 255, 33)
# 00FF21
WHITE = (242, 244, 246)
# F2F4F6
BLACK = (18, 17, 16)
# 121110
backgroundColor = WHITE
frontgroundColor = BLACK
loadingColor = DEFAULTBLUE
errorColor = RED
okColor = GREEN
tipsColor = PURPLE
# 注UI界面字体、代码字体
fontPattern = ('DengXian Light', 'Fira Code')
# =========================================================
# 设定函数部分
# =========================================================
def setTitle(__root, title_: str = '') -> None:
'''设置窗口标题
:param title: str 窗口标题'''
if title:
self.title = title_
__root.title(self.title)
if self.debug:
log(f"设置窗口标题 {self.title}")
def setGeometry(__root, geometry: str = '0x0') -> None:
'''设置窗口大小
:param geometry: str 窗口大小'''
__root.geometry(geometry)
if self.debug:
log(f"设置窗口大小{geometry}")
def setIcon(__root, bitmap: str = './musicreater.ico', default: str = '') -> bool:
'''设置窗口图标
:param bitmap: str 图标路径
:param default: str 设置对于全局的默认图标路径
注意default参数仅在Windows下有效其意为将所有没有图标的窗口设置默认图标。如果在非Windows环境使用default参数将会引发一个错误
:retuen bool 是否成功设置图标'''
try:
if default:
__root.iconbitmap(bitmap, default)
log(f'设置图标为{bitmap},默认为{default}')
else:
__root.iconbitmap(bitmap)
log(f'设置图标为{bitmap}')
return True
except Exception as e:
log(str(e), 'ERROR')
if self.debug:
raise e
return False
def setMenu(__root) -> None:
'''设置根菜单'''
if not self.menuWidgets:
# 如果传入空参数则返回当前菜单
try:
return self._RootMenu
except Exception as E:
if self.debug:
raise E
log('无法读取菜单信息', 'WARRING')
# 如果不是空参数则新建菜单
log('新建一个菜单')
self._RootMenu = {}
self._mainMenuBar = tk.Menu(__root)
for menuName, menuCmd in self.menuWidgets.items():
# 取得一个菜单名和一堆菜单函数及其显示名称
menu = tk.Menu(self._mainMenuBar, tearoff=0)
for cmdName, cmdFunc in menuCmd.items():
if cmdName:
menu.add_command(label=cmdName, command=cmdFunc)
log('菜单项 -- ' + cmdName)
else:
menu.add_separator()
log('分隔符 -- 分隔符')
self._mainMenuBar.add_cascade(label=menuName, menu=menu)
self._RootMenu[menuName] = menu
log('计入一个菜单 -- ' + menuName)
__root.config(menu=self._mainMenuBar)
log('菜单设置完毕')
def addMenu(menuRoot: str = '', menuLabel: str = '', menuCommand=None):
'''增加一个菜单项
:param menuRoot : str
菜单的根菜单,即所属的菜单上的文字
:param menuLabel : str
所需要增加的项目显示的文字
:param menuCommand : <function>
'''
if menuRoot in self._RootMenu.keys:
# 如果已经有父菜单
if menuLabel:
# 增加菜单指令
self._RootMenu[menuRoot].add_command(
label=menuLabel, command=menuCommand
)
else:
# 增加分隔栏
self._RootMenu[menuRoot].add_separator()
else:
# 没有父菜单则新增一个父菜单
menu = tk.Menu(self._mainMenuBar, tearoff=False)
if menuLabel:
menu.add_command(label=menuLabel, command=menuCommand)
else:
menu.add_separator()
self._mainMenuBar.add_cascade(label=menuRoot, menu=menu)
self._RootMenu[menuRoot] = menu
def initWidget(__root) -> None:
'''设置窗口小部件,分为:
:言·论 WordView
:快捷按钮面板 ButtonBar
:设置框 SettingBar
:音轨框 TrackBar
:各个音轨的显示框 TrackFrame
:信息显示版 InfoBar
'''
self._wordviewBar = tk.Label(
__root,
bg='black',
fg='white',
text=self.wordView,
font=(fontPattern[0], 30),
)
# 定义 言·论 版面
log('言·论版面设置完成')
self._infoBar = tk.Label(
__root,
bg='white',
fg='black',
text=self.infoBar,
font=(fontPattern[0], 10),
)
# 定义 信息显示版
log('信息显示版设置完成')
self._buttonBar = tk.Frame(
__root,
bd=2,
)
# 定义 快捷按钮面板. 注意这里是以一个Frame为容器而不是一个Button列表后面的版面也以Frame容器居多
self.setButtonBar(self.buttons)
self._wordviewBar.pack(side='top', fill='x')
self._buttonBar.pack(side='top', fill='x')
self._infoBar.pack(side='bottom', fill='x')
def setButtonBar(
self,
buttonList: list = [],
defaultMissingTexturePath: str = './resources/uimage/missing_texture.png',
separatorButtonTexturePath: str = './resources/uimage/separator_line.png',
) -> None:
'''设置快捷按钮面板
:param buttonList : list
快捷按钮列表,每个元素为一个字典,字典的键为按钮名称,值为一个元组,元组中第一项为按钮的图标,第二项为按钮的回调函数
'''
# 图标应该如下
# 新建 打开 保存 |
self._buttonBarList = []
'''按钮对象列表,注意软件调用的时候千万别动!'''
separatorimg = tk.PhotoImage(file=separatorButtonTexturePath)
for buttons in buttonList:
# 循环每个按钮组
for name, args in buttons.items():
# 循环每个按钮
try:
img = tk.PhotoImage(file=args[0])
except:
log('载入图片失败,使用默认图片','WARNING')
if self.debug:
raise FileNotFoundError(f'图片{args[0]}不存在')
img = tk.PhotoImage(file=defaultMissingTexturePath)
button = tk.Button(
self._buttonBar,
text=name,
command=args[1],
image=img,
bd=2,
compound='center',
font=(fontPattern[0], 10),
)
button.pack(side='left', padx=5, pady=5)
self._buttonBarList.append(button)
# 添加按钮
tk.Label(self._buttonBar, image=separatorimg).pack(
side='left', padx=5, pady=5
)
def setWordView(self, text: str) -> None:
'''重新设置言·论版的文字'''
self._wordviewBar['text'] = text
def setInfoBar(self, text: str) -> None:
'''重新设置信息显示版的文字'''
self._infoBar['text'] = text
# =========================================================
# 预置函数部分
# =========================================================
def authorWindowStarter(
authors: tuple = (
('金羿', 'Email EillesWan@outlook.com', 'QQ 2647547478'),
('诸葛亮与八卦阵', 'QQ 474037765'),
)
):
'''自定义作者界面'''
from languages.lang import _
from languages.lang import DEFAULTLANGUAGE
from msctLib.buildIN import version
authorWindow = tk.Tk()
authorWindow.title(_('关于'))
authorWindow.geometry('550x600') # 像素
tk.Label(authorWindow, text='', font=('', 15)).pack()
tk.Label(authorWindow, text=_('F音创'), font=('', 35)).pack()
tk.Label(
authorWindow,
text='{} {}'.format(version.version[1] , version.version[0]),
font=('', 15),
).pack()
# pack 的side可以赋值为LEFT RTGHT TOP BOTTOM
# grid 的row 是列数、column是行排注意这是针对空间控件本身大小来的即是指向当前控件的第几个。
# place的 x、y是(x,y)坐标
rylogo = tk.PhotoImage(file='./resources/RyounLogo.png')
tk.Label(
authorWindow,
image=rylogo,
width=200,
height=200,
).pack()
tk.Label(authorWindow, text=_('凌云pairs'), font=('', 20)).pack()
tk.Label(authorWindow, text='', font=('', 15)).pack()
tk.Label(authorWindow, text=_('开发者'), font=('', 15)).pack()
for i in authors:
for j in i:
tk.Label(
authorWindow,
text=j,
font=(
'',
17 if i.index(j) == 0 else 15,
'bold' if i.index(j) == 0 else '',
),
).pack()
tk.Label(authorWindow, text='', font=('', 5)).pack()
if DEFAULTLANGUAGE != 'zh-CN':
tk.Label(authorWindow, text=_('译者'), font=('', 15)).pack()
for i in _('TRANSLATERS').split(';'):
for j in i.split(','):
tk.Label(
authorWindow,
text=j,
font=(
'',
17 if i.split(',').index(j) == 0 else 15,
'bold' if i.split(',').index(j) == 0 else '',
),
).pack()
def exitAboutWindow():
authorWindow.destroy()
tk.Button(authorWindow, text=_('确定'), command=exitAboutWindow).pack()
authorWindow.mainloop()
class ProgressBar:
def __init__(
self,
root: tk.Tk = tk.Tk(),
style: tuple = (DEFAULTBLUE, BLACK, WHITE),
type: bool = False,
info: str = '',
debug: bool = False,
) -> None:
'''建立一个进度条或者加载等待界面
:param root : tk.Tk
建立进度条的根窗口
:param style : tuple
设置主题颜色,第一个参数为进度条或者等待转圈圈的颜色,第二个参数为前景色,第三个是背景色
:param type : bool
类型,为 False 时为进度条,为 True 时为等待板
:param info : str
显示的附加信息
:param debug : bool
是否输出日志到控制台'''
self.root = root
# TODO
# 单选框与复选框
if __name__ == '__mian__':
# __root,
# debug: bool = False,
# title: str = '音·创',
# geometry: str = '0x0',
# iconbitmap: tuple = ('./resources/musicreater.ico', './resources/musicreater.ico'),
# menuWidget: dict = {},
# wordView: str = '音·创 Musicreater',
# buttons: list = [],
# settingBox: list = [],
# notemap: list = [],
# infobar: str = '就绪',
'''使用参数建立基本的 音·创 窗口
:param root 根窗口
:param debug 是否将日志输出到控制台
:param title 窗口标题
wordview: str #言论部分显示的字样
button: list = [ # 操作按钮部分
dict = {
按钮名称 : tuple(按钮图标,执行函数)
},
],
settingbox: list = [ # 设置部分显示的字样及其对应的设置函数
(
设置名称:str,
值类型:tuple,
显示内容:str,
设置操作函数:<function>,
)
],
map: list = [ # 一首曲目的音符数据
音符数据
]
:param infobar str 显示信息用
'''
if debug:
log('载入参数')
# 载入参量 注意!图标将不被载入参数
self.title = title
'''窗口标题'''
self.menuWidgets = menuWidget
'''菜单设定项'''
self.wordView = wordView
'''言·论 所显示的文字'''
self.buttons = buttons
'''快捷功能按钮'''
self.settingBox = settingBox
'''设置框'''
self.notemap = notemap
'''音符列表'''
self.infoBar = infobar
'''信息显示版所显示的文字'''
self.debug = debug
'''是否打开调试模式'''
self.setTitle(__root,)
self.setGeometry(__root, geometry)
self.setIcon(__root, *iconbitmap)
self.setMenu(__root)
self.initWidget(__root)
self.start(__root)
def start(self, __root) -> None:
# 启动主消息循环
__root.mainloop()

File diff suppressed because it is too large Load Diff

120
README.md
View File

@@ -1,38 +1,78 @@
# 音·创 Musicreater
<h1 align="center">音·创 Musicreater</h1>
[![Licence: Apache (shields.io)](https://img.shields.io/badge/Licence-Apache-blueviolet)](https://choosealicense.com/licenses/apache-2.0/)
[![Bilibili: 凌云金羿 (shields.io)]( https://img.shields.io/badge/Bilibili-%E5%87%8C%E4%BA%91%E9%87%91%E7%BE%BF-blueviolet)](https://space.bilibili.com/397369002/)
[![Bilibili: 诸葛亮与八卦阵 (shields.io)](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-blueviolet)](https://space.bilibili.com/604072474)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
<p align="center">
<img width="128" height="128" src="https://s1.ax1x.com/2022/05/06/Ouhghj.md.png" >
</p>
<h3 align="center">一个免费开源的《我的世界:基岩版》音乐编辑制作软件</h3>
<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)
> 是谁把科技的领域布满政治的火药
>
> 是谁把纯净的蓝天染上暗淡的沉灰
>
> 中国人民无不热爱自己伟大的祖国
>
> 我们不会忘记屈辱历史留下的惨痛
>
> 我们希望世界和平
>
> 我们希望获得世界的尊重
>
> 愿世上再也没有战争
>
> 无论是热还是冷
>
> 无论是经济还是政治
>
> 让美妙的和平的优雅的音乐响彻世界
>
> ——金羿
> 2022 5 7
### 介绍
音·创 Musicreater 是由凌天之云创新应用软件开发团队开发的一款免费开源的 **《我的世界:基岩版》** 音乐制作软件
## 软件介绍🚀
欢迎加群861684859
音·创 Musicreater 是一款免费开源的 **《我的世界:基岩版》** 音乐制作软件
### 作者
欢迎加群:[861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr)
金羿 Eilles我的世界基岩版指令师个人开发者B站不知名UP主在校高中生。
**注意注意注意!!!本程序尚在测试与开发阶段,且代码重构未完成,请自行定夺使用。**
## 软件作者✒
金羿 Eilles我的世界基岩版指令师个人开发者B站不知名UP主南昌在校高中生。
诸葛亮与八卦阵 bgArray我的世界基岩版玩家喜欢编程和音乐深圳初一学生。
### 软件架构
## 软件架构🏢
软件采用 *Python* 作为第一语言,目前还没有使用其他语言辅助。使用 *Tkinter* 为图形库
软件采用 *Python* 作为第一语言,目前还没有使用其他语言辅助。使用可更换的UI结构库即开发人员可以通过更换display.py文件随心所欲地切换UI库后期将支持插件自加载
支持 Windows7+ 以及各个支持 Python3.8 的 Linux
支持 Windows7+ 以及各个支持 Python3.6+ 的 Linux
***各位开发人员注意!!!多语言支持请使用函数`_`加载文字!!!如需补充,请在简体中文的语言文件(zh-CN.lang)中补充!!!***
## 使用教程📕
### 安装教程
下载音·创自动安装器,将其放在你希望安装音·创的位置,运行后将自动安装。
下载[音·创自动安装器](https://gitee.com/EillesWan/Musicreater/releases/v0.2.0.0-Delta),将其放在你希望安装音·创的位置,运行后将自动安装。
提示:下载源最好选择2GitHub。
提示:下载源最好选择\"2 GitHub\"
### 从源代码运行教程
@@ -67,15 +107,13 @@ python3 补全库.py
python3 Musicreater.py
```
### 使用说明
1. 直接运行就好
2. 看得懂简体中文字的不一定全会用
3. 最好要懂一点点英文
2. 后期会出详细的使用教程
3. 如果在使用过程中发现了bug拜托请上报给我详见下方联系方式
### 诸葛亮与八卦阵的说明(不必要)
## 诸葛亮与八卦阵的关于羽音缭绕资源包应用地说明(不必要)📖
1. 首先!这里的提示是给想使用多音色资源包的人的,如果你想用就请下载 [神羽资源包(神羽自己的链接)](https://pan.baidu.com/s/11uoq5zwN7c3rX-98DqVpJg)提取码:ek3t
2. 下载到你自己电脑上某个位置,可以不放置于本项目下。音色资源包较大,可以选取只下载:
@@ -92,7 +130,7 @@ python3 Musicreater.py
6. 如果你想使用音色资源包来制作函数,那么解析时你应该用 *音创*->编辑->从midi导入音轨且用新方法解析
然后再使用 *音创*->函数(包)->下面的四个新函数
### 致谢
## 致谢🙏
1. 感谢由 [Fuckcraft](https://github.com/fuckcraft) “鸣凤鸽子”等 带来的我的世界websocket服务器功能
2. 感谢 昀梦\<QQ1515399885\> 找出指令生成错误bug并指正
@@ -103,8 +141,9 @@ python3 Musicreater.py
7. 感谢广大群友为此程序提供的测试等支持
8. 若您对我们有所贡献但您的名字没有显示在此列表中,请联系我!
## 联系我们📞
### 作者\<*金羿*\>(W-YI)联系方式
### 作者\<*金羿*\>(Eilles)联系方式
1. QQ 2647547478
2. 电邮 EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
@@ -112,4 +151,39 @@ python3 Musicreater.py
### 作者\<*诸葛亮与八卦阵*\>(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

View File

@@ -1,41 +1,84 @@
# Musicreater
<h1 align="center">音·创 Musicreater</h1>
[![Licence: Apache (shields.io)](https://img.shields.io/badge/Licence-Apache-blueviolet)](https://choosealicense.com/licenses/apache-2.0/)
[![Bilibili: 凌云金羿 (shields.io)]( https://img.shields.io/badge/Bilibili-%E5%87%8C%E4%BA%91%E9%87%91%E7%BE%BF-blueviolet)](https://space.bilibili.com/397369002/)
[![Bilibili: 诸葛亮与八卦阵 (shields.io)](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-blueviolet)](https://space.bilibili.com/604072474)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
<p align="center">
<img width="128" height="128" src="https://s1.ax1x.com/2022/05/06/Ouhghj.md.png" >
</p>
### Introduction
<h3 align="center">An open source and free software of making music in Minecraft</h3>
Musicreater(音·创) is an Eilles(*W-YI*)'s app that is used for creating musics in **Minecraft: Bedrock Edition**.
<p align="center">
<img src="https://forthebadge.com/images/badges/built-with-love.svg">
<p>
Welcome to join our QQ group: 861684859
[![][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)
### Author
[简体中文🇨🇳](README.md) | English🇬🇧
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***!)
> Who has dropped political gunpowder into the technology
>
> Who has dyed clear blue sky into the dark grey
>
> All Chinese people love our great homeland
>
> We *WILL* remember the remain pain of the humiliating history
>
> We love the whole world but in peace
>
> We love everyone but under respect
>
> It is to be hoped that the war ends forever
>
> Whatever it is cold or hot
>
> Whatever it is economical or political
>
> Just let the wonderful music of peace surround the world
>
> ---- Eilles Wan
> 7/5 2022
**Notice that the language support of *README* may be a little SLOW.**
## 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.
### 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
Download the *[MSCT Auto Installer]()*, 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*
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)
Tips: You'd better choose the 2GitHub download source
Tips: You'd better choose the \"2 GitHub\" download source
### Run with Source Code
#### Windows
#### Windows7+
0. First, download the source code pack of Musicreater.
[Download from Gitee (Need to Login)](https://gitee.com/EillesWan/Musicreater/repository/archive/master.zip)
@@ -67,15 +110,13 @@ python3 补全库.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
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)
## Explanation of the use of *PlumeAudioSurrounding Resource Pack* by 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`\)
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 +131,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
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.
- *!! They have given me the rights to directly copy the lib into Musicreater*
@@ -102,13 +143,24 @@ 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.
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
2. E-mail EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com
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.

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +1,13 @@
zh-CN
简体中文 中国大陆
Simplified Chinese, Chinese Mainland
简体中文 中国大陆
zh-ME
喵喵文 中国大陆
Meow Catsese, China Mainland
喵喵喵~ 祖国喵~
金羿,Email EillesWan@outlook.com,QQ 2647547478
音创创喵~
音·创 Musicreater
音创创喵的主人们
凌天之云创新我的世界开发团队\n×\n凌天之云创新计算机应用软件开发团队
~ 主人们 ~
~ 爸爸妈妈们 ~
好哒~

View File

@@ -84,14 +84,16 @@ def __loadLanguage(languageFilename: str):
from msctLib.log import log
log(f'丢失对于 {line[0]} 的本地化文本', 'WARRING')
langkeys = _text.keys()
# print(_text)
return _text
if not DEFAULTLANGUAGE == 'zh-CN':
if DEFAULTLANGUAGE in LANGUAGELIST.keys():
_TEXT = __loadLanguage('./languages/' + DEFAULTLANGUAGE + '.lang')
else:
raise KeyError(f'无法打开默认语言{DEFAULTLANGUAGE}')
if DEFAULTLANGUAGE in LANGUAGELIST.keys():
_TEXT = __loadLanguage('./languages/' + DEFAULTLANGUAGE + '.lang')
else:
log(f"无法打开当前本地化文本{DEFAULTLANGUAGE}", level='ERROR')
raise KeyError(f'无法打开默认语言{DEFAULTLANGUAGE}')
def wordTranslate(singleWord: str, debug: bool = False):
@@ -112,7 +114,7 @@ def _(text: str, debug: bool = False):
if debug:
raise KeyError(f'无法找到翻译文本{text}')
else:
log(f'无法找到本地化文本{text}','ERROR')
log(f'无法找到本地化文本{text}','WARRING')
return ''
@@ -180,6 +182,8 @@ if __name__ == '__main__':
Translatetextbar.edit_redo()
Translatetextbar.bind("<Control-y>", ctrlY)
Translatetextbar.bind("<Control-s>", _autoSave)
tk.Button(Translaterame, text='保存', command=_autoSave).pack(side='bottom', fill='x')
tk.Label(Orignrame, text='中文原文').pack(side='top')

View File

@@ -5,7 +5,7 @@
# 也切勿在正文结尾放!
LANGKEY zh-CN
LANGCHINESENAME 简体中文 中国大陆
LANGENGLIFHNAME Simplified Chinese, Chinese Mainland
LANGENGLISHNAME Simplified Chinese, Chinese Mainland
LANGLOCALNAME 简体中文 中国大陆
MSCT 音·创
F音创 音·创 Musicreater

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -6,7 +6,7 @@
class version:
libraries = (
'mido', 'amulet', 'amulet-core', 'amulet-nbt', 'piano_transcription_inference', 'pypinyin',
'pyinstaller', 'py7zr','websockets', 'torch', 'requests'
'pyinstaller', 'py7zr','websockets', 'zhdate', 'requests'
)
"""当前所需库"""

View File

@@ -1,297 +0,0 @@
# -*- coding: utf-8 -*-
'''音·创的GUI窗口界面显示库
:若要使用其他界面显示,请详见:
:开发说明|指南'''
import tkinter as tk
import tkinter.simpledialog as sdialog
import tkinter.filedialog as fdialog
from msctLib.log import log
DEFAULTBLUE = (0, 137, 242)
WEAKBLUE = (0, 161, 231)
LIGHTBLUE = (38, 226, 255)
RED = (255, 52, 50)
PURPLE = (171, 112, 255)
GREEN = (0, 255, 33)
WHITE = (242, 244, 246)
BLACK = (18, 17, 16)
backgroundColor = WHITE
frontgroundColor = BLACK
loadingColor = DEFAULTBLUE
errorColor = RED
okColor = GREEN
tipsColor = PURPLE
# 注UI界面字体、代码字体
fontPattern = ('DengXian Light', 'Fira Code')
class disp:
'''音·创 的基本Tk窗口显示库'''
def __init__(
self,
root: tk.Tk = tk.Tk(),
debug: bool = False,
title: str = '音·创',
geometry: str = '0x0',
iconbitmap: tuple = ('', ''),
menuWidget: dict = {},
wordView: str = '音·创 Musicreater',
buttons: list = [],
settingBox: list = [],
notemap: list = [],
) -> None:
'''使用参数建立基本的 音·创 窗口
:param root 根窗口
:param debug 是否将日志输出到控制台
:param title 窗口标题
wordview: str #言论部分显示的字样
button: list = [ # 操作按钮部分
dict = {
按钮名称 : tuple(按钮图标,执行函数)
},
],
settingbox: list = [ # 设置部分显示的字样及其对应的设置函数
(
设置名称:str,
值类型:tuple,
显示内容:str,
设置操作函数:<function>,
)
],
map: list = [ # 一首曲目的音符数据
音符数据
]
'''
self.root = root
self.title = title
self.geometry = geometry
self.menuWidget = menuWidget
self.wordView = wordView
self.buttons = buttons
self.settingBox = settingBox
self.notemap = notemap
self.setTitle(title, debug)
self.setGeometry(geometry, debug)
self.setIcon(*iconbitmap, debug=debug)
self.setMenu(menuWidget)
self.initWidget(wordView, buttons, settingBox, notemap)
# 设定函数部分
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:
'''设置窗口大小'''
self.root.geometry(geometry)
if debug:
log(f"设置窗口大小{geometry}")
def setIcon(
self, bitmap: str = './musicreater.ico', default: str = '', debug: bool = False
) -> None:
'''设置窗口图标
注意default参数仅在Windows下有效其意为将所有没有图标的窗口设置默认图标
如果在非Windows环境使用default参数一个Error将被升起'''
if not debug:
try:
if default:
self.root.iconbitmap(bitmap, default)
log(f'设置图标为{bitmap},默认为{default}')
else:
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)
return
def setMenu(self, menuWidgets: dict = {}, debug: bool = False) -> None:
'''设置根菜单'''
if not menuWidgets:
# 如果传入空参数则返回当前菜单
try:
return self.RootMenu
except Exception as E:
if debug:
raise E
else:
log('无法读取菜单信息', 'WARRING')
# 如果不是空参数则新建菜单
self.RootMenu = {}
self.mainMenuBar = tk.Menu(self.root)
for menuName, menuCmd in menuWidgets.items():
# 取得一个菜单名和一堆菜单函数及其显示名称
menu = tk.Menu(self.mainMenuBar, tearoff=0)
for cmdName, cmdFunc in menuCmd.items():
if cmdName:
menu.add_command(label=cmdName, command=cmdFunc)
else:
menu.add_separator()
self.mainMenuBar.add_cascade(label=menuName, menu=menu)
self.RootMenu[menuName] = menu
self.root.config(menu=self.mainMenuBar)
def addMenu(self, menuRoot: str = '', menuLabel: str = '', menuCommand=None):
'''增加一个菜单项
:param menuRoot : str
菜单的根菜单,即所属的菜单上的文字
:param menuLabel : str
所需要增加的项目显示的文字
:param menuCommand : <function>
'''
if menuRoot in self.RootMenu.keys:
# 如果已经有父菜单
if menuLabel:
# 增加菜单指令
self.RootMenu[menuRoot].add_command(
label=menuLabel, command=menuCommand
)
else:
# 增加分隔栏
self.RootMenu[menuRoot].add_separator()
else:
# 没有父菜单则新增一个父菜单
menu = tk.Menu(self.mainMenuBar, tearoff=False)
if menuLabel:
menu.add_command(label=menuLabel, command=menuCommand)
else:
menu.add_separator()
self.mainMenuBar.add_cascade(label=menuRoot, menu=menu)
self.RootMenu[menuRoot] = menu
def initWidget(
self,
wordView: str = '音·创 Musicreater',
buttons: list = [],
settingBox: list = [],
notemap: list = [],
) -> None:
'''设置窗口小部件,分为:
:言·论 WordView
:快捷按钮面板 ButtonBar
:设置框 SettingBar
:音轨框 TrackBar
:各个音轨的显示框 TrackFrame
:信息显示版 InfoBar
'''
self._wordviewBar = tk.Label(self.root, bg='white', fg='black', text=wordView)
self.setWordView(wordView)
def setWordView(self, text: str) -> None:
self._wordviewBar['text'] = text
# 预置函数部分
def authorMenu(
authors: tuple = (
('金羿', 'Email EillesWan@outlook.com', 'QQ 2647547478'),
('诸葛亮与八卦阵', 'QQ 474037765'),
),
translaters: tuple = None,
):
'''自定义作者界面'''
from languages.lang import _
from languages.lang import DEFAULTLANGUAGE
from msctLib.buildIN import version
aabw = tk.Tk()
aabw.title(_('关于'))
aabw.geometry('550x600') # 像素
tk.Label(aabw, text='', font=('', 15)).pack()
tk.Label(aabw, text=_('F音创'), font=('', 35)).pack()
tk.Label(
aabw,
text='{} {}'.format(version.version[1] + version.version[0]),
font=('', 15),
).pack()
# pack 的side可以赋值为LEFT RTGHT TOP BOTTOM
# grid 的row 是列数、column是行排注意这是针对空间控件本身大小来的即是指向当前控件的第几个。
# place的 x、y是(x,y)坐标
tk.Label(
aabw,
image=tk.PhotoImage(file='./resources/RyounLogo.png'),
width=200,
height=200,
).pack()
tk.Label(aabw, text=_('凌云pairs'), font=('', 20)).pack()
tk.Label(aabw, text='', font=('', 15)).pack()
tk.Label(aabw, text=_('开发者'), font=('', 15)).pack()
for i in authors:
for j in i:
tk.Label(
aabw,
text=j,
font=(
'',
17 if i.index(j) == 0 else 15,
'bold' if i.index(j) == 0 else '',
),
).pack()
tk.Label(aabw, text='', font=('', 5)).pack()
if DEFAULTLANGUAGE != 'zh-CN':
tk.Label(aabw, text=_('译者'), font=('', 15)).pack()
for i in _('TRANSLATERS').split(';'):
for j in i.split(','):
tk.Label(
aabw,
text=j,
font=(
'',
17 if i.split(',').index(j) == 0 else 15,
'bold' if i.split(',').index(j) == 0 else '',
),
).pack()
def exitAboutWindow():
aabw.destroy()
tk.Button(aabw, text=_('确定'), command=exitAboutWindow).pack()
aabw.mainloop()
class ProgressBar:
def __init__(
self,
root: tk.Tk = tk.Tk(),
style: tuple = (DEFAULTBLUE, BLACK, WHITE),
type: bool = False,
info: str = '',
debug: bool = False,
) -> None:
'''建立一个进度条或者加载等待界面
:param root : tk.Tk
建立进度条的根窗口
:param style : tuple
设置主题颜色,第一个参数为进度条或者等待转圈圈的颜色,第二个参数为前景色,第三个是背景色
:param type : bool
类型,为 False 时为进度条,为 True 时为等待板
:param info : str
显示的附加信息
:param debug : bool
是否输出日志到控制台'''
self.root = root
if __name__ == '__mian__':
import os
os.chdir('../')
disp.authorMenu()

View File

@@ -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
日志信息
@@ -66,16 +66,16 @@ def log(info:str = '',level : str = 'INFO', isPrinted:bool = False):
try:
if not os.path.exists('./log/'):
os.makedirs('./log/')
if not os.path.exists('./logs/'):
os.makedirs('./logs/')
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')
if isPrinted:
print(outputinfo)
input(outputinfo)
return True
except:

View File

@@ -1,6 +1,8 @@
开发说明\|指南
==============
***不要看了,这玩意没啥意义了。***
此文件旨在使后期欲参与开发之人员减轻其开发负担,同时也为了我们正在开发的人员详细说明功能与用法
掌握开发指南之后,在调用函数等的过程中将会更加方便
@@ -50,17 +52,29 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 函数
- 变量
1. `setMenu`对菜单的基础设定
1. `infoBar`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python
{
菜单名 : {
选项名 : 选项函数
}
信息显示栏,一个字符串,用于显示一些信息。
2. `title`
窗口标题,字符串
3. `menuWidgets`
对于窗口菜单的设定,其格式如下:
```python
menuWidgets: dist = { # 菜单项目
str"菜单名" : dict{
str"选项名"|None : <function>选项函数
},
...
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
注:
`菜单名` : `str` 显示在菜单上的字符串
@@ -68,6 +82,129 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
`选项函数` : `function` 菜单调取的函数(无返回值,无入参)
当 `选项名` 的布尔值判定为 `False` 的时候,无论 `选项函数` 为何,皆插入一段分割线,但 `选项函数` 不得为空
4. `wordView`
显示在言论上的文字,字符串
5. `buttons`
快捷功能按钮的列表列表的元素为字典字典的键是按钮的名称值为一个元组元组中含有两个元素其中元组的第1个元素为按钮图标是一个图片的路径第2个元素为执行的函数其值应当是一个函数对象。
值得注意的是,每个字典中包含的按钮组件会分到一个组之中,两个组之间会使用分隔符分割
```python
button: list = [
dict{ # 操作按钮部分
str"按钮名称" : tuple(
按钮图标,
执行函数
),
...
},
...
],
```
其中,如果执行图标找不到了或者无法读取了,就会使用“材质丢失”图标作为图标,当然也可以通过函数`setButtonBar`中的参数`defaultMissingTexturePath`来设置默认的在职丢失图标路径,同理,使用`separatorButtonTexturePath`可以设置默认的分割线路径……
但是啊但是我虽然建议用不同的display库来达到不同的显示效果……但我没说你们都带一套自己的图标包撒想要绘制图标包也很简单我们之后应该会出图标包的加载工具
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. `setTitle`设置窗口标题
```python
:param title: str 窗口标题
```
修改了变量`self.title`之后需要执行此函数以切换标题,或者通过此函数修改窗口标题信息。
2. `setGeometry`设置窗口大小
```python
:param geometry: str 窗口大小
```
由于不希望您经常修改窗口大小,我就没有把窗口大小的变量放在类里面。只能通过这个函数来修改窗口大小。
3. `setIcon`设置窗口图标
```python
:param bitmap: str 图标路径
:param default: str 设置对于全局的默认图标路径
:retuen bool 是否成功设置图标
```
同上,我们不希望您经常修改窗口图标,所以没有把图标路径作为变量放在类里面。所以你只能通过这个函数修改窗口的图标。
值得注意的是default参数仅在Windows下有效如果在非Windows环境使用default参数将会引发一个错误
4. `setMenu`设置窗口菜单
实例化此类之后会运行这个函数进行窗口根菜单配置,如果当前对象中没有菜单,则会对其依照类中的响应参数进行配置,如果有则返回菜单中的内容(一个字典,键为菜单名称)
2. `setWidget`对窗口部件的放置
```python
wordview: dict = { #言论部分显示的字样
@@ -79,12 +216,7 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
按钮名称 : tuple(按钮图标,执行函数)
},
],
settingbox: list = [ #设置部分显示的字样及其对应的设置函数
(
设置名称:str,
值类型:tuple,
显示内容:str,
设置操作函数:<function>,
settingbox: list = [ #设置部分显示的字样及其对应的设置函数置操作函数:<function>,
)
],
map: list = [
@@ -93,11 +225,6 @@ functions.py中会调取./addon/目录下的全部功能文件,这些功能文
```
注:
上文中,值类型可以是如下几个项
1. `('str',)` 字符串类型,使用文本框输入数据
2. `('bool',)` 布尔类型,使用复选框输入数据
3. `('num',最小值:int,最大值:int,步长:int = 1)` 数值类型,使用数值滑动条输入数据
4. `('list',列表项:list)` 单选类型,即列表中多选一,使用单选框输入数据
值得注意的是在kwgs中修改的部件设置可以在其变量中读取或热修改对应的变量如下
@@ -115,13 +242,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 暂时不需要
```

View File

@@ -36,7 +36,7 @@ print("""
Musicreater PLUGINS Management
""")
# 准备启用

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -7,7 +7,7 @@ import brotli
class BdxConverter:
__header = "BD@"
__bin_header = b"BDX"
__generator_author = b"&Musicreater"
__generator_author = b"& Musicreater"
keys = {
# x--, x++, addSmallX(-128~127), addX(-32768~32767), addBigX(-2147483648~2147483647)
@@ -16,7 +16,7 @@ class BdxConverter:
"z": [b"\x13", b"\x12", b"\x1e", b"\x18", b"\x19"],
"end": b"\x58",
"isSigned": b"\x5a",
"placeCommandBlockWithData": b"\x1b",
"placeCommandBlockWithData": b"\x1b",#用不上
"placeBlock": b"\x07"
}
@@ -82,8 +82,6 @@ class BdxConverter:
:return:
"""
_types = b""
for block in self.blocks:
# print(f"当前方块:{block['block_name']}, 位置: {block['direction']}]")
diff = self.move_pointer(self.direction, block["direction"])
@@ -182,7 +180,7 @@ class BdxConverter:
:return: bytes of command_block
"""
block_id = b"\x1b" + self.block_type.index(block["block_name"]).to_bytes(2, byteorder="big", signed=False)
block_id = b"\x24"
particular_value = block["particular_value"].to_bytes(2, byteorder="big", signed=False)
block_header = block_id + particular_value
for i in [

View File

@@ -90,48 +90,4 @@ class report:
os.remove("./Temps&Logs.zip")
class version:
libraries = (
'mido', 'amulet', 'amulet-core', 'amulet-nbt', 'piano_transcription_inference', 'pypinyin',
'pyinstaller', 'py7zr','websockets', 'torch', 'requests'
)
"""当前所需库"""
version = ('0.2.0', 'Delta',)
"""当前版本"""
def __init__(self) -> None:
self.libraries = version.libraries
"""当前所需库"""
self.version = version.version
"""当前版本"""
def installLibraries(self,index:str = 'https://pypi.tuna.tsinghua.edu.cn/simple'):
"""安装全部开发用库"""
from sys import platform
import os
if platform == 'win32':
import shutil
try:
shutil.rmtree(os.getenv('APPDATA') + '\\Musicreater\\')
except FileNotFoundError:
pass
for i in self.libraries:
print("安装库:" + i)
os.system(f"python -m pip install {i} -i {index}")
elif platform == 'linux':
os.system("sudo apt-get install python3-pip")
os.system("sudo apt-get install python3-tk")
os.system("sudo apt-get install python3-tkinter")
for i in self.libraries:
print("安装库:" + i)
os.system(f"sudo python3 -m pip install {i} -i {index}")
def __call__(self):
'''直接安装库,顺便返回一下当前版本'''
self.installLibraries()
return self.version
from msctLib.buildIN import version

View File

@@ -12,7 +12,7 @@ import amulet
from amulet.api.block import Block
from amulet.utils.world_utils import block_coords_to_chunk_coords as bc2cc
from amulet_nbt import TAG_String as ts
from nmcsup.log import log
from msctLib.log import log
def hans2pinyin(hans, style=3):
@@ -33,11 +33,8 @@ def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, playerSel
commands = []
length = len(List)
j = 1
print(List)
for k in range(len(List)):
i = List[k][0]
print(i)
print(type(i))
try:
commands.append(
f"execute @a{playerSelection} ~ ~ ~ execute @s[scores={{{ScoreboardName}="
@@ -54,7 +51,6 @@ def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, playerSel
pass
# a += List[i][1]
# commands.append("\n\n# 凌云我的世界开发团队 x 凌云软件开发团队 : W-YI金羿\n")
print(commands)
return commands
@@ -192,6 +188,14 @@ def formCmdBlock(direction: Iterable, command: str, particularValue: int, implus
"needRedstone": int #是否需要红石 1 bytes
}
'''
# for particularValue, is like this
# :0 下 无条件
# :1 上 无条件
# :2 z轴负方向 无条件
# :3 z轴正方向 无条件
# :4 x轴负方向 无条件
# :5 x轴正方向 无条件
print(f"==[DEBUG]=={direction}: {command} {'' if particularValue == 0 else '' if particularValue ==1 else 'z-' if particularValue ==2 else 'z+' if particularValue==3 else 'x-' if particularValue==4 else 'x+'} {'脉冲' if impluse==0 else '循环' if impluse ==1 else '连锁'} {'有条件' if condition else '无条件'} {'需要红石' if needRedstone else '不需要红石'}")
return {"direction": direction,
"block_name": "command_block",
"particular_value": particularValue,
@@ -268,6 +272,7 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
:return 返回一个列表,其中包含了音乐生成的所有的指令方块数据"""
from msctspt.threadOpera import NewThread
allblocks = []
'''需要放置的方块'''
baseDire = direction
@@ -275,14 +280,15 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
direction = list(direction)
def trackDealing(direction,track):
# print('=========DEBUG=========音轨起方块:', direction)
blocks = []
cmdList = classList_conversion_SinglePlayer(track['notes'], track['set']['ScoreboardName'],
music['mainset']['PlayerSelect'], isProsess)
if len(cmdList) == 0:
return
return []
elif cmdList is []:
return
dire = direction
return []
dire = direction.copy()
down = False
'''当前是否为向下的阶段?'''
# 开头的指令方块
@@ -300,8 +306,9 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
# :4 x轴负方向 无条件
# :5 x轴正方向 无条件
for cmd in cmdList:
# print('=========DEBUG=========方块:', dire)
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 dire[1] > direction[1] + 1:
dire[1] -= 1
@@ -309,20 +316,21 @@ def music2cmdBlocks(direction: Iterable, music: dict, isProsess: bool = False, h
if dire[1] < height + direction[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
dire[0] += 1
return blocks
threads = []
for track in music['musics']:
threads.append(NewThread(trackDealing,(direction,track)))
threads[threads.__len__()-1].start()
threads.append(NewThread(trackDealing,(direction.copy(),track)))
threads[-1].start()
direction[2] += 2
for th in threads:
allblocks += th.getResult()
print(allblocks)
return allblocks

View 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)

View 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.支持汇报崩溃记录(通过邮件附件的方式)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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 年度挑战
@@ -40,7 +19,7 @@ Copyright © W-YI 2022
新更新日志
Delta 0.2.0
2022 2 10 ~ 2022 3
2022 2 10 ~ 2022 x
1.进行了大量的代码重构,使之更加易于开发
2.对功能进行了精简优化,能够更加方便的开发新功能
3.完善程序的一些外观与性能优化,使用了更多多线程板块
@@ -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.程序图标完善

BIN
resources/UI设计图.pdn Normal file

Binary file not shown.

BIN
resources/msctIcon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
resources/msctIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -8,23 +8,23 @@
那个曾与我相伴的人 依稀在我的心头留恋
你是我灵魂中绽放出最艳丽的花朵
心之所向 意之所属
一个蛋从外面被敲开,注定被吃掉\n但从里面啄开,没准是只鹰 ——长津湖
一个蛋从外面被敲开,注定被吃掉但从里面啄开,没准是只鹰 ——长津湖
音·创
辉煌的、璀璨的、无边无际、铺天盖地的晚霞\n洒下斑驳的金光,染红了整片山河
辉煌的、璀璨的、无边无际、铺天盖地的晚霞——洒下斑驳的金光,染红了整片山河
《赫兰圣殿》
风,摇曳着,轻抚着他的脸颊\n半壁残阳正留恋着人世最后一抹温暖
风,摇曳着,轻抚着他的脸颊半壁残阳正留恋着人世最后一抹温暖
清晨的阳光将吹散人间的雾霭 照亮每一寸土壤
远方的山川 总会踏着白雾前来
梦中的世界 总被现实相依存
敌人都是自己树立的\n生存的道路上想要披荆斩棘,那就得学会化敌为友
敌人都是自己树立的生存的道路上想要披荆斩棘,那就得学会化敌为友
有光之处必有影 有影之处必有光
一生所恋 相伴相随
你的眼眸是剔透的晶灯 散发着醉人心扉的清光
海波激出透人心脾的欢呼
英雄何必要站在光中?\n深入黑暗,我自发光。
英雄何必要站在光中?深入黑暗,我自发光。
如果我们有三生三世的时间\n那我们将渡过三百乘以三百六十个潮涨潮落
善善不能用 恶恶不能去
知行合一,格物致知;远沂博索,夕惕若厉;\n蕙心执质,嘉言懿行;怀瑾握瑜,心若芷萱。
知行合一,格物致知;远沂博索,夕惕若厉;蕙心执质,嘉言懿行;怀瑾握瑜,心若芷萱。
纪念 追忆 那段不平凡的青春
守望黑夜的人,切莫忘记黎明的光彩 ——原神
与邪佞战斗的人,切莫失掉正直的心 ——原神
@@ -42,7 +42,7 @@
给大家带来笑容 这就是我存在的使命
不忘本源 牢记故地
一厢情愿即是真 心海浮沉即为灵
听戏时要点最红的名伶,\n遛鸟时要买最名贵的画眉\n——此即人生 ——原神
听戏时要点最红的名伶,遛鸟时要买最名贵的画眉——此即人生 ——原神
「精巧」是千年的积淀,而其背后皆存于「意义」
世事无常,悲喜难料 ——原神
金钱在死亡面前毫不重要
@@ -54,7 +54,7 @@ There is NO heroes, only honors.
A man achieve with challenges.
种果得果,等的就是这份收获的喜悦 ——原神
事了拂衣去,深藏功与名
万事开头虽难,倾注的情感也多;\n而欲永恒,仍需重新审视自身\n不小心处理,灵魂便留下裂纹无法挽回。
万事开头虽难,倾注的情感也多;而欲永恒,仍需重新审视自身不小心处理,灵魂便留下裂纹无法挽回。
历经历史的沉淀,留下希望的继承
身为凡民,血脉脆弱,却也坚强
民为本,社稷次之,君为轻 ——孟子
@@ -64,7 +64,7 @@ A man achieve with challenges.
你们——会祝福下一个时代吗? ——原神
任何旅途中的旅伴同行,都会有分别的一日。 ——原神
「永恒」最接近于天理 ——原神
等旅途到达了终点,再考虑停留于何处吧 ——原神
等旅途到达了终点,再考虑停留于何处吧 ——原神
人海中相遇,本是缘分。 ——原神
凡缘朦朦仙缘滔
因果红尘渺渺,烟消 ——原神
@@ -79,7 +79,7 @@ A man achieve with challenges.
除了路途中的花与枫叶,还有心中的「道」 ——原神
只有败北,才能感悟差距,才有机会成长 ——原神
命运的邂逅,必定有其意义 ——原神
万商云来,千船继至。\n百货迭出,诸海历览。\n ——原神
万商云来,千船继至。百货迭出,诸海历览。 ——原神
现状越是难以置信,我们越是不能停下脚步。 ——原神
古老的文明孕育着最美丽的传说 ——原神
百川奔流 雨露不休
@@ -99,3 +99,45 @@ A man achieve with challenges.
苦痛的旅程中盘错着举世的谎言
欲落的花会告诉你我无尽的思念,而风会在此刻替我拥抱住你。 ——蝶<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. ——莎士比亚
即使身躯残破,也要在战场上拼杀到最后一刻,要战斗到流干最后一滴血为止。 ——原神
朋友之间,也许就是要心知肚明才好 ——原神
轻盈的风,偶尔也会变得沉重…虽然,只是凡人难以察觉的短短一瞬 ——原神
我听过树的歌、乌云和雨的歌、遥远北方的青色飞龙悠远的吟唱,也听过我降落在地面上时,狐、兔,和地里的虫颤抖的协奏 ——原神
无人来书写我们的故事,我们就是故事本身。
故事的种子是生活与旅行 ——原神
每个人的「生活(故事)」,都只属于自己… ——原神
如果我们要再会,就在夕阳与海面相遇的地方再会吧。 ——原神
到那时,再让我看看你如同钻石一般明净而璀璨的灵魂,是否蒙上了一缕尘埃吧。 ——原神
水过时迁
Waterrun Timepass
人们都害怕生离死别,怕的是痛苦与遗憾 ——原神
俗话说「旧的不去新的不来」,一个圆满的句号标志着一段新的旅途的开始 ——原神

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Binary file not shown.