mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2025-09-04 03:16:23 +00:00
史诗级更新!支持导出mcstructure库,更改部分API和文档,修改了部分代码格式,新增红乐测试
This commit is contained in:
@ -15,8 +15,10 @@
|
||||
```python
|
||||
import Musicreater # 导入转换库
|
||||
|
||||
old_execute_format = False # 指定是否使用旧的execute指令语法(即1.18及以前的《我的世界:基岩版》语法)
|
||||
|
||||
# 首先新建转换对象。
|
||||
conversion = Musicreater.midiConvert()
|
||||
conversion = Musicreater.midiConvert(enable_old_exe_format = old_execute_format)
|
||||
# 值得注意的是,一个转换对象可以转换多个文件。
|
||||
# 也就是在实例化的时候不进行对文件的绑定。
|
||||
# 如果有调试需要,可以在实例化时传入参数 debug = True
|
||||
@ -26,10 +28,9 @@ conversion = Musicreater.midiConvert()
|
||||
# 地址都为字符串类型,不能传入文件流
|
||||
midi_path = "./where/you/place/.midi/files.mid"
|
||||
output_folder = "./where/you/want2/convert/into/"
|
||||
old_execute_format = False # 指定是否使用旧的execute指令语法(即1.18及以前的《我的世界:基岩版》语法)
|
||||
|
||||
# 设定基本转换参数
|
||||
conversion.convert(midi_path,output_folder,old_execute_format)
|
||||
conversion.convert(midi_path,output_folder)
|
||||
|
||||
# 进行转换并接受输出,具体的参数均在代码之文档中有相关说明
|
||||
method_id = 3 # 指定使用的转换算法
|
||||
@ -92,13 +93,13 @@ print(convertion_result)
|
||||
|
||||
考虑到进行《我的世界》游戏开发时,为了节约常加载区域,很多游戏会将指令区设立为一种层叠式的结构。这种结构会限制每一层的指令系统的高度,但是虽然长宽也是有限的,却仍然比其纵轴延伸得更加自由。
|
||||
|
||||
所以,结构的生成形状依照给定的高度和内含指令的数量决定。其$Z$轴延伸长度为指令方块数量对于给定高度之商的向下取整结果的平方根的向下取整。用数学公式的方式表达,则是:
|
||||
所以,结构的生成形状依照给定的高度和内含指令的数量决定。其 $Z$ 轴延伸长度为指令方块数量对于给定高度之商的向下取整结果的平方根的向下取整。用数学公式的方式表达,则是:
|
||||
|
||||
$$MaxZ = \left\lfloor\sqrt{\left\lfloor{\frac{NoC}{MaxH}}\right\rfloor}\right\rfloor$$
|
||||
|
||||
其中,$MaxZ$即生成结构的$Z$轴最大延伸长度,$NoC$表示链结构中所含指令方块的个数,$MaxH$表示给定的生成结构的最大高度。
|
||||
|
||||
我们的结构生成器在生成指令链时,将首先以相对坐标系$(0, 0, 0)$(即相对原点)开始,自下向上堆叠高度轴(即$Y$轴)的长,当高度轴达到了限制的高度时,便将$Z$轴向正方向堆叠`1`个方块,并开始自上向下重新堆叠,直至高度轴坐标达到相对为`0`。若当所生成结构的$Z$轴长达到了其最大延伸长度,则此结构生成器将反转$Z$轴的堆叠方向,直至$Z$轴坐标相对为`0`。如此往复,直至指令链堆叠完成。
|
||||
我们的结构生成器在生成指令链时,将首先以相对坐标系 $(0, 0, 0)$ (即相对原点)开始,自下向上堆叠高度轴(即 $Y$ 轴)的长,当高度轴达到了限制的高度时,便将 $Z$ 轴向正方向堆叠`1`个方块,并开始自上向下重新堆叠,直至高度轴坐标达到相对为`0`。若当所生成结构的 $Z$ 轴长达到了其最大延伸长度,则此结构生成器将反转 $Z$ 轴的堆叠方向,直至 $Z$ 轴坐标相对为`0`。如此往复,直至指令链堆叠完成。
|
||||
|
||||
## 播放器
|
||||
|
||||
@ -121,9 +122,9 @@ print(convertion_result)
|
||||
|`ScBd`|指定的计分板名称||
|
||||
|`x`|音发出时对应的分数值||
|
||||
|`InstID`|声音效果ID|不同的声音ID可以对应不同的乐器,详见转换[乐器对照表](./%E8%BD%AC%E6%8D%A2%E4%B9%90%E5%99%A8%E5%AF%B9%E7%85%A7%E8%A1%A8.md)|
|
||||
|`Ht`|播放点对玩家的距离|通过距离来表达声音的响度。以$S$表示此参数`Ht`,以Vol表示音量百分比,则计算公式为:$S = \frac{1}{Vol}-1$|
|
||||
|`Ht`|播放点对玩家的距离|通过距离来表达声音的响度。以 $S$ 表示此参数`Ht`,以Vol表示音量百分比,则计算公式为: $S = \frac{1}{Vol}-1$ |
|
||||
|`Vlct`|原生我的世界中规定的播放力度|这个参数是一个谜一样的存在,似乎它的值毫不重要……因为无论这个值是多少,我们听起来都差不多。当此音符所在MIDI通道为第一通道,则这个值为0.7倍MIDI指定力度,其他则为0.9倍。|
|
||||
|`Ptc`|音符的音高|这是决定音调的参数。以$P$表示此参数,$n$表示其在MIDI中的编号,$x$表示一定的音域偏移,则计算公式为:$P = 2^\frac{n-60-x}{12}$|
|
||||
|`Ptc`|音符的音高|这是决定音调的参数。以 $P$ 表示此参数, $n$ 表示其在MIDI中的编号, $x$ 表示一定的音域偏移,则计算公式为: $P = 2^\frac{n-60-x}{12}$ |
|
||||
|
||||
后四个参数决定了这个音的性质,而前两个参数仅仅是为了决定音播放的时间。
|
||||
|
||||
@ -141,9 +142,9 @@ print(convertion_result)
|
||||
|--------|-----------|----------|
|
||||
|`Tg`|播放对象|选择器或玩家名|
|
||||
|`InstID`|声音效果ID|不同的声音ID可以对应不同的乐器,详见转换[乐器对照表](./%E8%BD%AC%E6%8D%A2%E4%B9%90%E5%99%A8%E5%AF%B9%E7%85%A7%E8%A1%A8.md)|
|
||||
|`Ht`|播放点对玩家的距离|通过距离来表达声音的响度。以$S$表示此参数`Ht`,以Vol表示音量百分比,则计算公式为:$S = \frac{1}{Vol}-1$|
|
||||
|`Ht`|播放点对玩家的距离|通过距离来表达声音的响度。以 $S$ 表示此参数`Ht`,以Vol表示音量百分比,则计算公式为: $S = \frac{1}{Vol}-1$ |
|
||||
|`Vlct`|原生我的世界中规定的播放力度|这个参数是一个谜一样的存在,似乎它的值毫不重要……因为无论这个值是多少,我们听起来都差不多。当此音符所在MIDI通道为第一通道,则这个值为0.7倍MIDI指定力度,其他则为0.9倍。|
|
||||
|`Ptc`|音符的音高|这是决定音调的参数。以$P$表示此参数,$n$表示其在MIDI中的编号,$x$表示一定的音域偏移,则计算公式为:$P = 2^\frac{n-60-x}{12}$|
|
||||
|`Ptc`|音符的音高|这是决定音调的参数。以 $P$ 表示此参数, $n$ 表示其在MIDI中的编号,$x$表示一定的音域偏移,则计算公式为: $P = 2^\frac{n-60-x}{12}$ |
|
||||
|
||||
其中后四个参数决定了这个音的性质。
|
||||
|
||||
|
Reference in New Issue
Block a user