mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2024-11-11 01:27:35 +08:00
日志和bug修改
This commit is contained in:
parent
7e13b22d46
commit
81eb8e5376
@ -658,6 +658,7 @@ def __main__():
|
||||
except ValueError: # 测试完为ValueError,故修改语法
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire is None or Outdire == '':
|
||||
return
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
402
nmcsup/const.py
402
nmcsup/const.py
@ -1,105 +1,103 @@
|
||||
"""音创系列的音符对照表 以及一系列常数"""
|
||||
|
||||
# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日
|
||||
# 统计:致命(三级)错误:0个;警告(二级)错误:0个;语法(一级)错误:109个
|
||||
|
||||
|
||||
notes = {
|
||||
'....A' : [0.074, 27.5, 'wood', 8],
|
||||
'....A#' : [0.0787, 29.135, 'wood', 9],
|
||||
'....B' : [0.083, 30.868, 'wood', 10],
|
||||
'...C' : [0.088, 32.703, 'wood', 11],
|
||||
'...C#' : [0.094, 34.648, 'wood', 12],
|
||||
'...D' : [0.1, 36.708, 'wood', 13],
|
||||
'...D#' : [0.105, 38.891, 'log', 0],
|
||||
'...E' : [0.11, 41.203, 'log', 1],
|
||||
'...F' : [0.12, 43.654, 'log', 2],
|
||||
'...F#' : [0.125, 46.249, 'wood', 0],
|
||||
'...G' : [0.13, 48.999, 'wood', 1],
|
||||
'...G#' : [0.14, 51.913, 'wood', 2],
|
||||
'...A' : [0.15, 55.0, 'wood', 3],
|
||||
'...A#' : [0.16, 58.27, 'wood', 4],
|
||||
'...B' : [0.17, 61.735, 'wood', 5],
|
||||
'..C' : [0.18, 65.406, 'wool', 0],
|
||||
'..C#' : [0.19, 69.296, 'wool', 1],
|
||||
'..D' : [0.2, 73.416, 'wool', 2],
|
||||
'..D#' : [0.21, 77.782, 'wool', 3],
|
||||
'..E' : [0.22, 82.407, 'wool', 4],
|
||||
'..F' : [0.235, 87.307, 'wool', 5],
|
||||
'..F#' : [0.25, 92.499, 'concretepowder', 0],
|
||||
'..G' : [0.26, 97.999, 'concretepowder', 1],
|
||||
'..G#' : [0.28, 103.826, 'concretepowder', 2],
|
||||
'..A' : [0.3, 110.0, 'concretepowder', 3],
|
||||
'..A#' : [0.31, 116.541, 'concretepowder', 4],
|
||||
'..B' : [0.33, 123.471, 'concretepowder', 5],
|
||||
'.C' : [0.35, 130.813, 'concretepowder', 6],
|
||||
'.C#' : [0.37, 138.591, 'concretepowder', 7],
|
||||
'.D' : [0.4, 146.832, 'concretepowder', 8],
|
||||
'.D#' : [0.42, 155.563, 'concretepowder', 9],
|
||||
'.E' : [0.44, 164.814, 'concretepowder', 10],
|
||||
'.F' : [0.47, 174.614, 'concretepowder', 11],
|
||||
'.F#' : [0.5, 184.997, 'concretepowder', 12],
|
||||
'.G' : [0.53, 195.998, 'concretepowder', 13],
|
||||
'.G#' : [0.56, 207.652, 'concretepowder', 14],
|
||||
'.A' : [0.6, 220.0, 'concretepowder', 15],
|
||||
'.A#' : [0.63, 233.082, 'concrete', 0],
|
||||
'.B' : [0.67, 246.942, 'concrete', 1],
|
||||
'C' : [0.7, 261.626, 'concrete', 2],
|
||||
'C#' : [0.75, 277.183, 'concrete', 3],
|
||||
'D' : [0.8, 293.665, 'concrete', 4],
|
||||
'D#' : [0.84, 311.127, 'concrete', 5],
|
||||
'E' : [0.9, 329.628, 'concrete', 6],
|
||||
'F' : [0.94, 349.228, 'concrete', 7],
|
||||
'F#' : [1.0, 369.994, 'concrete', 8],
|
||||
'G' : [1.05, 391.995, 'concrete', 9],
|
||||
'G#' : [1.12, 415.305, 'concrete', 10],
|
||||
'A' : [1.2, 440.0, 'concrete', 11],
|
||||
'A#' : [1.25, 466.164, 'concrete', 12],
|
||||
'B' : [1.33, 493.883, 'concrete', 13],
|
||||
'`C' : [1.4, 523.251, 'concrete', 14],
|
||||
'`C#' : [1.5, 554.365, 'concrete', 15],
|
||||
'`D' : [1.6, 587.33, 'stained_hardened_clay', 0],
|
||||
'`D#' : [1.7, 622.254, 'stained_hardened_clay', 1],
|
||||
'`E' : [1.8, 659.255, 'stained_hardened_clay', 2],
|
||||
'`F' : [1.9, 698.456, 'stained_hardened_clay', 3],
|
||||
'`F#' : [2.0, 739.989, 'stained_hardened_clay', 4],
|
||||
'`G' : [2.1, 783.991, 'stained_hardened_clay', 5],
|
||||
'`G#' : [2.24, 830.609, 'stained_hardened_clay', 6],
|
||||
'`A' : [2.4, 880.0, 'stained_hardened_clay', 7],
|
||||
'`A#' : [2.5, 932.328, 'stained_hardened_clay', 8],
|
||||
'`B' : [2.67, 987.767, 'stained_hardened_clay', 9],
|
||||
'``C' : [2.83, 1046.502, 'stained_hardened_clay', 10],
|
||||
'``C#' : [3.0, 1108.731, 'stained_hardened_clay', 11],
|
||||
'``D' : [3.17, 1174.659, 'stained_hardened_clay', 12],
|
||||
'``D#' : [3.36, 1244.508, 'stained_hardened_clay', 13],
|
||||
'``E' : [3.56, 1318.51, 'stained_hardened_clay', 14],
|
||||
'``F' : [3.78, 1396.913, 'stained_hardened_clay', 15],
|
||||
'``F#' : [4.0, 1479.978, 'white_glazed_terracotta', 0],
|
||||
'``G' : [4.24, 1567.982, 'orange_glazed_terracotta', 0],
|
||||
'``G#' : [4.5, 1661.219, 'magenta_glazed_terracotta', 0],
|
||||
'``A' : [4.76, 1760.0, 'light_blue_glazed_terracotta', 0],
|
||||
'``A#' : [5.04, 1864.655, 'yellow_glazed_terracotta', 0],
|
||||
'``B' : [5.34, 1975.533, 'lime_glazed_terracotta', 0],
|
||||
'```C' : [5.66, 2093.005, 'pink_glazed_terracotta', 0],
|
||||
'```C#' : [6.0, 2217.461, 'gray_glazed_terracotta', 0],
|
||||
'```D' : [6.35, 2349.318, 'silver_glazed_terracotta', 0],
|
||||
'```D#' : [6.73, 2489.016, 'cyan_glazed_terracotta', 0],
|
||||
'```E' : [7.13, 2637.02, 'purple_glazed_terracotta', 0],
|
||||
'```F' : [7.55, 2793.826, 'blue_glazed_terracotta', 0],
|
||||
'```F#' : [8.0, 2959.955, 'brown_glazed_terracotta', 0],
|
||||
'```G' : [8.47, 3135.963, 'green_glazed_terracotta', 0],
|
||||
'```G#' : [8.98, 3322.438, 'red_glazed_terracotta', 0],
|
||||
'```A' : [9.51, 3520.0, 'black_glazed_terracotta', 0],
|
||||
'```A#' : [10.08, 3729.31, 'stained_glass', 0],
|
||||
'```B' : [10.68, 3951.066, 'stained_glass', 1],
|
||||
'````C' : [11.31, 4186.009, 'stained_glass', 2],
|
||||
'0' : [0.0, 0.0, 'glass', 0]
|
||||
'....A': [0.074, 27.5, 'wood', 8],
|
||||
'....A#': [0.0787, 29.135, 'wood', 9],
|
||||
'....B': [0.083, 30.868, 'wood', 10],
|
||||
'...C': [0.088, 32.703, 'wood', 11],
|
||||
'...C#': [0.094, 34.648, 'wood', 12],
|
||||
'...D': [0.1, 36.708, 'wood', 13],
|
||||
'...D#': [0.105, 38.891, 'log', 0],
|
||||
'...E': [0.11, 41.203, 'log', 1],
|
||||
'...F': [0.12, 43.654, 'log', 2],
|
||||
'...F#': [0.125, 46.249, 'wood', 0],
|
||||
'...G': [0.13, 48.999, 'wood', 1],
|
||||
'...G#': [0.14, 51.913, 'wood', 2],
|
||||
'...A': [0.15, 55.0, 'wood', 3],
|
||||
'...A#': [0.16, 58.27, 'wood', 4],
|
||||
'...B': [0.17, 61.735, 'wood', 5],
|
||||
'..C': [0.18, 65.406, 'wool', 0],
|
||||
'..C#': [0.19, 69.296, 'wool', 1],
|
||||
'..D': [0.2, 73.416, 'wool', 2],
|
||||
'..D#': [0.21, 77.782, 'wool', 3],
|
||||
'..E': [0.22, 82.407, 'wool', 4],
|
||||
'..F': [0.235, 87.307, 'wool', 5],
|
||||
'..F#': [0.25, 92.499, 'concretepowder', 0],
|
||||
'..G': [0.26, 97.999, 'concretepowder', 1],
|
||||
'..G#': [0.28, 103.826, 'concretepowder', 2],
|
||||
'..A': [0.3, 110.0, 'concretepowder', 3],
|
||||
'..A#': [0.31, 116.541, 'concretepowder', 4],
|
||||
'..B': [0.33, 123.471, 'concretepowder', 5],
|
||||
'.C': [0.35, 130.813, 'concretepowder', 6],
|
||||
'.C#': [0.37, 138.591, 'concretepowder', 7],
|
||||
'.D': [0.4, 146.832, 'concretepowder', 8],
|
||||
'.D#': [0.42, 155.563, 'concretepowder', 9],
|
||||
'.E': [0.44, 164.814, 'concretepowder', 10],
|
||||
'.F': [0.47, 174.614, 'concretepowder', 11],
|
||||
'.F#': [0.5, 184.997, 'concretepowder', 12],
|
||||
'.G': [0.53, 195.998, 'concretepowder', 13],
|
||||
'.G#': [0.56, 207.652, 'concretepowder', 14],
|
||||
'.A': [0.6, 220.0, 'concretepowder', 15],
|
||||
'.A#': [0.63, 233.082, 'concrete', 0],
|
||||
'.B': [0.67, 246.942, 'concrete', 1],
|
||||
'C': [0.7, 261.626, 'concrete', 2],
|
||||
'C#': [0.75, 277.183, 'concrete', 3],
|
||||
'D': [0.8, 293.665, 'concrete', 4],
|
||||
'D#': [0.84, 311.127, 'concrete', 5],
|
||||
'E': [0.9, 329.628, 'concrete', 6],
|
||||
'F': [0.94, 349.228, 'concrete', 7],
|
||||
'F#': [1.0, 369.994, 'concrete', 8],
|
||||
'G': [1.05, 391.995, 'concrete', 9],
|
||||
'G#': [1.12, 415.305, 'concrete', 10],
|
||||
'A': [1.2, 440.0, 'concrete', 11],
|
||||
'A#': [1.25, 466.164, 'concrete', 12],
|
||||
'B': [1.33, 493.883, 'concrete', 13],
|
||||
'`C': [1.4, 523.251, 'concrete', 14],
|
||||
'`C#': [1.5, 554.365, 'concrete', 15],
|
||||
'`D': [1.6, 587.33, 'stained_hardened_clay', 0],
|
||||
'`D#': [1.7, 622.254, 'stained_hardened_clay', 1],
|
||||
'`E': [1.8, 659.255, 'stained_hardened_clay', 2],
|
||||
'`F': [1.9, 698.456, 'stained_hardened_clay', 3],
|
||||
'`F#': [2.0, 739.989, 'stained_hardened_clay', 4],
|
||||
'`G': [2.1, 783.991, 'stained_hardened_clay', 5],
|
||||
'`G#': [2.24, 830.609, 'stained_hardened_clay', 6],
|
||||
'`A': [2.4, 880.0, 'stained_hardened_clay', 7],
|
||||
'`A#': [2.5, 932.328, 'stained_hardened_clay', 8],
|
||||
'`B': [2.67, 987.767, 'stained_hardened_clay', 9],
|
||||
'``C': [2.83, 1046.502, 'stained_hardened_clay', 10],
|
||||
'``C#': [3.0, 1108.731, 'stained_hardened_clay', 11],
|
||||
'``D': [3.17, 1174.659, 'stained_hardened_clay', 12],
|
||||
'``D#': [3.36, 1244.508, 'stained_hardened_clay', 13],
|
||||
'``E': [3.56, 1318.51, 'stained_hardened_clay', 14],
|
||||
'``F': [3.78, 1396.913, 'stained_hardened_clay', 15],
|
||||
'``F#': [4.0, 1479.978, 'white_glazed_terracotta', 0],
|
||||
'``G': [4.24, 1567.982, 'orange_glazed_terracotta', 0],
|
||||
'``G#': [4.5, 1661.219, 'magenta_glazed_terracotta', 0],
|
||||
'``A': [4.76, 1760.0, 'light_blue_glazed_terracotta', 0],
|
||||
'``A#': [5.04, 1864.655, 'yellow_glazed_terracotta', 0],
|
||||
'``B': [5.34, 1975.533, 'lime_glazed_terracotta', 0],
|
||||
'```C': [5.66, 2093.005, 'pink_glazed_terracotta', 0],
|
||||
'```C#': [6.0, 2217.461, 'gray_glazed_terracotta', 0],
|
||||
'```D': [6.35, 2349.318, 'silver_glazed_terracotta', 0],
|
||||
'```D#': [6.73, 2489.016, 'cyan_glazed_terracotta', 0],
|
||||
'```E': [7.13, 2637.02, 'purple_glazed_terracotta', 0],
|
||||
'```F': [7.55, 2793.826, 'blue_glazed_terracotta', 0],
|
||||
'```F#': [8.0, 2959.955, 'brown_glazed_terracotta', 0],
|
||||
'```G': [8.47, 3135.963, 'green_glazed_terracotta', 0],
|
||||
'```G#': [8.98, 3322.438, 'red_glazed_terracotta', 0],
|
||||
'```A': [9.51, 3520.0, 'black_glazed_terracotta', 0],
|
||||
'```A#': [10.08, 3729.31, 'stained_glass', 0],
|
||||
'```B': [10.68, 3951.066, 'stained_glass', 1],
|
||||
'````C': [11.31, 4186.009, 'stained_glass', 2],
|
||||
'0': [0.0, 0.0, 'glass', 0]
|
||||
}
|
||||
'''音符对照表\n
|
||||
音符:[MC音调, 声音频率, 方块名称, 数据值]'''
|
||||
|
||||
|
||||
|
||||
|
||||
#方块
|
||||
# 方块
|
||||
'''
|
||||
blocks = {
|
||||
0.074 : ['stained_glass', 3],
|
||||
@ -195,126 +193,120 @@ blocks = {
|
||||
#向查理平致敬!!!!!
|
||||
'''
|
||||
|
||||
|
||||
Blocks = {
|
||||
0.074: 'barrel',
|
||||
0.0787: 'beacon',
|
||||
0.083: 'bedrock',
|
||||
0.088: 'black_glazed_terracotta',
|
||||
0.094: 'blast_furnace',
|
||||
0.1: 'blue_glazed_terracotta',
|
||||
0.105: 'blue_ice',
|
||||
0.11: 'bone_block',
|
||||
0.12: 'bookshelf',
|
||||
0.125: 'brick_block',
|
||||
0.13: 'brown_glazed_terracotta',
|
||||
0.14: 'cartography_table',
|
||||
0.15: 'carved_pumpkin',
|
||||
0.16: 'clay',
|
||||
0.17: 'coal_block',
|
||||
0.18: 'coal_ore',
|
||||
0.19: 'cobblestone',
|
||||
0.2: 'concrete',
|
||||
0.21: 'crafting_table',
|
||||
0.22: 'cyan_glazed_terracotta',
|
||||
0.235: 'diamond_block',
|
||||
0.25: 'diamond_ore',
|
||||
0.26: 'white_glazed_terracotta',
|
||||
0.28: 'dispenser',
|
||||
0.3: 'dried_kelp_block',
|
||||
0.31: 'dropper',
|
||||
0.33: 'emerald_block',
|
||||
0.35: 'emerald_ore',
|
||||
0.37: 'end_bricks',
|
||||
0.4: 'end_stone',
|
||||
0.42: 'fletching_table',
|
||||
0.44: 'furnace',
|
||||
0.47: 'glass',
|
||||
0.5: 'glowingobsidian',
|
||||
0.53: 'glowstone',
|
||||
0.56: 'gold_block',
|
||||
0.6: 'gold_ore',
|
||||
0.63: 'grass',
|
||||
0.67: 'gray_glazed_terracotta',
|
||||
0.7: 'green_glazed_terracotta',
|
||||
0.75: 'hardened_clay',
|
||||
0.8: 'hay_block',
|
||||
0.84: 'iron_block',
|
||||
0.9: 'iron_ore',
|
||||
0.94: 'jukebox',
|
||||
1.0: 'lapis_block',
|
||||
1.05: 'lapis_ore',
|
||||
1.12: 'light_blue_glazed_terracotta',
|
||||
1.2: 'lime_glazed_terracotta',
|
||||
1.25: 'lit_pumpkin',
|
||||
1.33: 'log',
|
||||
1.4: 'loom',
|
||||
1.5: 'magenta_glazed_terracotta',
|
||||
1.6: 'magma',
|
||||
1.7: 'melon_block',
|
||||
1.8: 'web',
|
||||
1.9: 'mossy_cobblestone',
|
||||
2.0: 'nether_brick',
|
||||
2.1: 'nether_wart_block',
|
||||
2.24: 'netherrack',
|
||||
2.4: 'noteblock',
|
||||
2.5: 'observer',
|
||||
2.67: 'obsidian',
|
||||
2.83: 'orange_glazed_terracotta',
|
||||
3.0: 'pink_glazed_terracotta',
|
||||
3.17: 'piston',
|
||||
3.36: 'planks',
|
||||
3.56: 'prismarine',
|
||||
3.78: 'pumpkin',
|
||||
4.0: 'purple_glazed_terracotta',
|
||||
4.24: 'purpur_block',
|
||||
4.5: 'quartz_block',
|
||||
4.76: 'quartz_ore',
|
||||
5.04: 'red_glazed_terracotta',
|
||||
5.34: 'red_nether_brick',
|
||||
5.66: 'red_sandstone',
|
||||
6.0: 'redstone_block',
|
||||
6.35: 'yellow_glazed_terracotta',
|
||||
6.73: 'sandstone',
|
||||
7.13: 'stonebrick',
|
||||
7.55: 'silver_glazed_terracotta',
|
||||
8.0: 'slime',
|
||||
8.47: 'smithing_table',
|
||||
8.98: 'smoker',
|
||||
9.51: 'smooth_stone',
|
||||
10.08: 'snow',
|
||||
10.68: 'soul_sand',
|
||||
11.31: 'sponge',
|
||||
0.074: 'barrel',
|
||||
0.0787: 'beacon',
|
||||
0.083: 'bedrock',
|
||||
0.088: 'black_glazed_terracotta',
|
||||
0.094: 'blast_furnace',
|
||||
0.1: 'blue_glazed_terracotta',
|
||||
0.105: 'blue_ice',
|
||||
0.11: 'bone_block',
|
||||
0.12: 'bookshelf',
|
||||
0.125: 'brick_block',
|
||||
0.13: 'brown_glazed_terracotta',
|
||||
0.14: 'cartography_table',
|
||||
0.15: 'carved_pumpkin',
|
||||
0.16: 'clay',
|
||||
0.17: 'coal_block',
|
||||
0.18: 'coal_ore',
|
||||
0.19: 'cobblestone',
|
||||
0.2: 'concrete',
|
||||
0.21: 'crafting_table',
|
||||
0.22: 'cyan_glazed_terracotta',
|
||||
0.235: 'diamond_block',
|
||||
0.25: 'diamond_ore',
|
||||
0.26: 'white_glazed_terracotta',
|
||||
0.28: 'dispenser',
|
||||
0.3: 'dried_kelp_block',
|
||||
0.31: 'dropper',
|
||||
0.33: 'emerald_block',
|
||||
0.35: 'emerald_ore',
|
||||
0.37: 'end_bricks',
|
||||
0.4: 'end_stone',
|
||||
0.42: 'fletching_table',
|
||||
0.44: 'furnace',
|
||||
0.47: 'glass',
|
||||
0.5: 'glowingobsidian',
|
||||
0.53: 'glowstone',
|
||||
0.56: 'gold_block',
|
||||
0.6: 'gold_ore',
|
||||
0.63: 'grass',
|
||||
0.67: 'gray_glazed_terracotta',
|
||||
0.7: 'green_glazed_terracotta',
|
||||
0.75: 'hardened_clay',
|
||||
0.8: 'hay_block',
|
||||
0.84: 'iron_block',
|
||||
0.9: 'iron_ore',
|
||||
0.94: 'jukebox',
|
||||
1.0: 'lapis_block',
|
||||
1.05: 'lapis_ore',
|
||||
1.12: 'light_blue_glazed_terracotta',
|
||||
1.2: 'lime_glazed_terracotta',
|
||||
1.25: 'lit_pumpkin',
|
||||
1.33: 'log',
|
||||
1.4: 'loom',
|
||||
1.5: 'magenta_glazed_terracotta',
|
||||
1.6: 'magma',
|
||||
1.7: 'melon_block',
|
||||
1.8: 'web',
|
||||
1.9: 'mossy_cobblestone',
|
||||
2.0: 'nether_brick',
|
||||
2.1: 'nether_wart_block',
|
||||
2.24: 'netherrack',
|
||||
2.4: 'noteblock',
|
||||
2.5: 'observer',
|
||||
2.67: 'obsidian',
|
||||
2.83: 'orange_glazed_terracotta',
|
||||
3.0: 'pink_glazed_terracotta',
|
||||
3.17: 'piston',
|
||||
3.36: 'planks',
|
||||
3.56: 'prismarine',
|
||||
3.78: 'pumpkin',
|
||||
4.0: 'purple_glazed_terracotta',
|
||||
4.24: 'purpur_block',
|
||||
4.5: 'quartz_block',
|
||||
4.76: 'quartz_ore',
|
||||
5.04: 'red_glazed_terracotta',
|
||||
5.34: 'red_nether_brick',
|
||||
5.66: 'red_sandstone',
|
||||
6.0: 'redstone_block',
|
||||
6.35: 'yellow_glazed_terracotta',
|
||||
6.73: 'sandstone',
|
||||
7.13: 'stonebrick',
|
||||
7.55: 'silver_glazed_terracotta',
|
||||
8.0: 'slime',
|
||||
8.47: 'smithing_table',
|
||||
8.98: 'smoker',
|
||||
9.51: 'smooth_stone',
|
||||
10.08: 'snow',
|
||||
10.68: 'soul_sand',
|
||||
11.31: 'sponge',
|
||||
0.0: 'stone'
|
||||
}
|
||||
'''频率对照表\n
|
||||
MC音调:方块名称'''
|
||||
|
||||
|
||||
|
||||
# 乐器
|
||||
Instuments = {
|
||||
'note.banjo' : '班卓',
|
||||
'note.bass' : '低音',
|
||||
'note.bassattack' : '贝斯',
|
||||
'note.bd' : '鼓声',
|
||||
'note.bell' : '铃声',
|
||||
'note.bit' : '比特',
|
||||
'note.cow_bell' : '牛铃',
|
||||
'note.didgeridoo' : '迪吉',
|
||||
'note.flute' : '长笛',
|
||||
'note.guitar' : '吉他',
|
||||
'note.harp' : '竖琴',
|
||||
'note.hat' : '架鼓',
|
||||
'note.chime' : '钟声',
|
||||
'note.iron_xylophone' : '铁琴',
|
||||
'note.pling' : '叮叮',
|
||||
'note.snare' : '响弦',
|
||||
'note.xylophone' : '木琴'
|
||||
'note.banjo': '班卓',
|
||||
'note.bass': '低音',
|
||||
'note.bassattack': '贝斯',
|
||||
'note.bd': '鼓声',
|
||||
'note.bell': '铃声',
|
||||
'note.bit': '比特',
|
||||
'note.cow_bell': '牛铃',
|
||||
'note.didgeridoo': '迪吉',
|
||||
'note.flute': '长笛',
|
||||
'note.guitar': '吉他',
|
||||
'note.harp': '竖琴',
|
||||
'note.hat': '架鼓',
|
||||
'note.chime': '钟声',
|
||||
'note.iron_xylophone': '铁琴',
|
||||
'note.pling': '叮叮',
|
||||
'note.snare': '响弦',
|
||||
'note.xylophone': '木琴'
|
||||
}
|
||||
'''乐器对照表\n
|
||||
乐器英文:中文
|
||||
翻译:雪莹工坊Fun-Fer'''
|
||||
|
||||
|
||||
|
||||
|
@ -1,17 +1,53 @@
|
||||
"""提供对于音创系列的日志"""
|
||||
# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日
|
||||
# 统计:致命(三级)错误:0个;警告(二级)错误:0个;语法(一级)错误:9个
|
||||
|
||||
import datetime,os
|
||||
import logging
|
||||
import os
|
||||
import datetime
|
||||
import sys
|
||||
|
||||
#载入日志功能
|
||||
StrStartTime = str(datetime.datetime.now()).replace(':', '_')[:-7]
|
||||
'''字符串型的程序开始时间'''
|
||||
time = StrStartTime
|
||||
|
||||
main_path = './log/'
|
||||
|
||||
position = main_path + time
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.setLevel(level=logging.INFO)
|
||||
handler = logging.FileHandler(position + ".logger")
|
||||
print(position + ".logger")
|
||||
|
||||
handler.setLevel(logging.INFO)
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
handler.setFormatter(formatter)
|
||||
|
||||
console = logging.StreamHandler()
|
||||
console.setLevel(logging.INFO)
|
||||
|
||||
logger.addHandler(handler)
|
||||
logger.addHandler(console)
|
||||
|
||||
print("using Timbre_resources_package_generator_lib \n --made by 诸葛亮与八卦阵")
|
||||
print(sys.path[0].replace("nmcsup\\logger", "log\\"))
|
||||
|
||||
# import logger
|
||||
|
||||
# 载入日志功能
|
||||
StrStartTime = str(datetime.datetime.now()).replace(':', '_')[:-7]
|
||||
# logger.setting(StrStartTime)
|
||||
"""字符串型的程序开始时间"""
|
||||
|
||||
|
||||
def log(info:str = '',isPrinted:bool = True):
|
||||
'''将信息连同当前时间载入日志'''
|
||||
def log(info: str = '', isPrinted: bool = False, isLoggerLibRecord: bool = True):
|
||||
# isLoggerLibRecord: 是否同时在logger库中记录
|
||||
"""将信息连同当前时间载入日志"""
|
||||
if not os.path.exists('./log/'):
|
||||
os.makedirs('./log/')
|
||||
with open('./log/'+StrStartTime+'.msct.log', 'a',encoding='UTF-8') as f:
|
||||
f.write(str(datetime.datetime.now())[11:19]+' '+info+'\n')
|
||||
with open('./log/' + StrStartTime + '.msct.log', 'a', encoding='UTF-8') as f:
|
||||
f.write(str(datetime.datetime.now())[11:19] + ' ' + info + '\n')
|
||||
if isPrinted:
|
||||
print(str(datetime.datetime.now())[11:19]+' '+info)
|
||||
print(str(datetime.datetime.now())[11:19] + ' ' + info)
|
||||
if isLoggerLibRecord:
|
||||
logger.info(info)
|
||||
|
@ -1,87 +1,84 @@
|
||||
|
||||
"""音创系列的文件读取功能"""
|
||||
|
||||
|
||||
# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日
|
||||
# 统计:致命(三级)错误:0个;警告(二级)错误:3个;语法(一级)错误:22个
|
||||
|
||||
|
||||
from nmcsup.log import log
|
||||
from nmcsup.const import notes
|
||||
|
||||
|
||||
|
||||
#从格式文本文件读入一个音轨并存入一个列表
|
||||
def ReadFile(fn : str) -> list:
|
||||
# 从格式文本文件读入一个音轨并存入一个列表
|
||||
def ReadFile(fn: str): # -> list
|
||||
from nmcsup.trans import note2list
|
||||
log('打开'+fn+"并读取音符")
|
||||
log('打开' + fn + "并读取音符")
|
||||
try:
|
||||
nat = open(fn, 'r', encoding='UTF-8').read().split(" ")
|
||||
del fn
|
||||
except:
|
||||
except FileNotFoundError:
|
||||
log("找不到读取目标文件")
|
||||
return False
|
||||
Notes = []
|
||||
log(str(nat)+"已读取")
|
||||
for i in range(int(len(nat)/2)):
|
||||
Notes.append([nat[i*2], float(nat[i*2+1])])
|
||||
log(str(nat) + "已读取")
|
||||
for i in range(int(len(nat) / 2)):
|
||||
Notes.append([nat[i * 2], float(nat[i * 2 + 1])])
|
||||
Notes = note2list(Notes)
|
||||
log('音符数据更新'+str(Notes))
|
||||
return [Notes,]
|
||||
log('音符数据更新' + str(Notes))
|
||||
return [Notes, ]
|
||||
|
||||
|
||||
#从midi读入多个音轨,返回多个音轨列表
|
||||
def ReadMidi(midfile : str ) -> list:
|
||||
# 从midi读入多个音轨,返回多个音轨列表
|
||||
def ReadMidi(midfile: str): # -> list
|
||||
import mido
|
||||
from msctspt.threadOpera import NewThread
|
||||
Notes = []
|
||||
try:
|
||||
mid = mido.MidiFile(midfile)
|
||||
except:
|
||||
log("找不到文件或无法读取文件"+midfile)
|
||||
except FileNotFoundError:
|
||||
log("找不到文件或无法读取文件" + midfile)
|
||||
return False
|
||||
# 解析
|
||||
ks = list(notes.values())
|
||||
def loadMidi(track):
|
||||
|
||||
def loadMidi(track1):
|
||||
datas = []
|
||||
for i in track:
|
||||
for i in track1:
|
||||
if i.is_meta:
|
||||
log('元信息'+str(i))
|
||||
log('元信息' + str(i))
|
||||
pass # 不处理元信息
|
||||
elif 'note_on' in str(i):
|
||||
msg = str(i).replace("note=", '').replace("time=", '').split(" ")
|
||||
log('音符on消息,处理后:'+str(msg))
|
||||
log('音符on消息,处理后:' + str(msg))
|
||||
if msg[4] == '0':
|
||||
datas.append([ks[int(msg[2])-20][0], 1.0])
|
||||
log('延续时间0tick--:添加音符'+str([ks[int(msg[2])-20][0], 1.0]))
|
||||
datas.append([ks[int(msg[2]) - 20][0], 1.0])
|
||||
log('延续时间0tick--:添加音符' + str([ks[int(msg[2]) - 20][0], 1.0]))
|
||||
else:
|
||||
datas.append([ks[int(msg[2])-20][0], float(msg[4])/480])
|
||||
log('延续时间'+msg[4]+'tick--:添加音符' +str([ks[int(msg[2])-20][0], float(msg[4])/480]))
|
||||
datas.append([ks[int(msg[2]) - 20][0], float(msg[4]) / 480])
|
||||
log('延续时间' + msg[4] + 'tick--:添加音符' + str([ks[int(msg[2]) - 20][0], float(msg[4]) / 480]))
|
||||
del msg
|
||||
log('音符增加'+str(datas))
|
||||
log('音符增加' + str(datas))
|
||||
return datas
|
||||
|
||||
for j, track in enumerate(mid.tracks):
|
||||
th = NewThread(loadMidi,(track,))
|
||||
th = NewThread(loadMidi, (track,))
|
||||
th.start()
|
||||
Notes.append(th.getResult())
|
||||
del ks
|
||||
return Notes
|
||||
|
||||
|
||||
|
||||
|
||||
def ReadOldProject(fn:str) -> list:
|
||||
def ReadOldProject(fn: str): # -> list
|
||||
import json
|
||||
from nmcsup.trans import note2list
|
||||
log("读取文件:"+fn)
|
||||
log("读取文件:" + fn)
|
||||
try:
|
||||
with open(fn, 'r', encoding='UTF-8') as c:
|
||||
dataset = json.load(c)
|
||||
except:
|
||||
print('找不到文件:'+fn+",请查看您是否输入正确")
|
||||
log("丢失"+fn)
|
||||
except FileNotFoundError:
|
||||
print('找不到文件:' + fn + ",请查看您是否输入正确")
|
||||
log("丢失" + fn)
|
||||
return False
|
||||
for i in range(len(dataset['musics'])):
|
||||
dataset['musics'][i]['notes'] = note2list(dataset['musics'][i]['notes'])
|
||||
#返回 音轨列表 选择器
|
||||
# 返回 音轨列表 选择器
|
||||
return dataset
|
||||
|
||||
|
||||
|
267
nmcsup/trans.py
267
nmcsup/trans.py
@ -1,37 +1,41 @@
|
||||
|
||||
"""音创系列的转换功能"""
|
||||
|
||||
# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日
|
||||
# 统计:致命(三级)错误:0个;警告(二级)错误:2个;语法(一级)错误:192个
|
||||
|
||||
|
||||
from nmcsup.log import log
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import amulet
|
||||
import amulet_nbt
|
||||
from amulet.api.block import Block
|
||||
from amulet.api.block_entity import BlockEntity
|
||||
from amulet.utils.world_utils import block_coords_to_chunk_coords
|
||||
from amulet_nbt import TAG_String, TAG_Compound, TAG_Byte
|
||||
|
||||
|
||||
# 输入一个列表 [ [str, float ], [], ... ] 音符str 值为持续时间float
|
||||
def note2list(Notes : list) -> list:
|
||||
def note2list(Notes: list) -> list:
|
||||
from nmcsup.const import notes
|
||||
|
||||
def change(base):
|
||||
enwo = {
|
||||
'a': 'A',
|
||||
'b': 'B',
|
||||
'c': 'C',
|
||||
'd': "D",
|
||||
"e": "E",
|
||||
'f': 'F',
|
||||
'g': "G"
|
||||
'a': 'A',
|
||||
'b': 'B',
|
||||
'c': 'C',
|
||||
'd': "D",
|
||||
"e": "E",
|
||||
'f': 'F',
|
||||
'g': "G"
|
||||
}
|
||||
nuwo = {
|
||||
'6': 'A',
|
||||
'7': 'B',
|
||||
'1': 'C',
|
||||
'2': "D",
|
||||
"3": "E",
|
||||
'4': 'F',
|
||||
'5': "G"
|
||||
'6': 'A',
|
||||
'7': 'B',
|
||||
'1': 'C',
|
||||
'2': "D",
|
||||
"3": "E",
|
||||
'4': 'F',
|
||||
'5': "G"
|
||||
}
|
||||
for k, v in enwo.items():
|
||||
if k in base:
|
||||
@ -40,193 +44,184 @@ def note2list(Notes : list) -> list:
|
||||
if k in base:
|
||||
base = base.replace(k, v)
|
||||
return base
|
||||
|
||||
res = []
|
||||
log(" === 音符列表=>音调列表")
|
||||
for i in Notes:
|
||||
s2 = change(i[0])
|
||||
log(' === 正在操作音符'+i[0]+'->'+s2)
|
||||
log(' === 正在操作音符' + i[0] + '->' + s2)
|
||||
if s2 in notes.keys():
|
||||
log(" === 找到此音符,加入:"+str(notes[s2][0]))
|
||||
log(" === 找到此音符,加入:" + str(notes[s2][0]))
|
||||
res.append([notes[s2][0], float(i[1])])
|
||||
else:
|
||||
log(' === '+s2+'不在音符表内,此处自动替换为 休止符0 ')
|
||||
log(' === ' + s2 + '不在音符表内,此处自动替换为 休止符0 ')
|
||||
res.append(['0', float(i[1])])
|
||||
log(' === 最终反回'+str(res))
|
||||
log(' === 最终反回' + str(res))
|
||||
return res
|
||||
|
||||
|
||||
|
||||
|
||||
def mcnote2freq(Notes):
|
||||
from nmcsup.const import notes
|
||||
mcnback = {}
|
||||
for i,j in notes.items():
|
||||
for i, j in notes.items():
|
||||
mcnback[j[0]] = i
|
||||
res = []
|
||||
log(" === 我的世界音调表=>频率列表")
|
||||
for i in Notes:
|
||||
log(' === 正在操作音符'+i[0]+'->'+mcnback[i[0]])
|
||||
log(' === 正在操作音符' + i[0] + '->' + mcnback[i[0]])
|
||||
res.append([notes[mcnback[i[0]]][1], float(i[1])])
|
||||
log(' === 最终反回'+str(res))
|
||||
log(' === 最终反回' + str(res))
|
||||
return res
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#MP3文件转midi文件
|
||||
# MP3文件转midi文件
|
||||
def Mp32Mid(mp3File, midFile):
|
||||
from piano_transcription_inference import PianoTranscription, sample_rate, load_audio
|
||||
# 加载
|
||||
(audio, _) = load_audio(mp3File, sr=sample_rate, mono=True)
|
||||
(audio, _) = load_audio(mp3File, sr=sample_rate) # , mono=True
|
||||
# 实例化并转换
|
||||
PianoTranscription(device="cpu").transcribe(audio, midFile)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#传入一个音符列表转为指令列表
|
||||
def Note2Cmd(Notes : list,ScoreboardName:str,Instrument:str, PlayerSelect:str='',isProsess:bool=False) -> list:
|
||||
# 传入一个音符列表转为指令列表
|
||||
def Note2Cmd(Notes: list, ScoreboardName: str, Instrument: str, PlayerSelect: str = '',
|
||||
isProsess: bool = False) -> list:
|
||||
commands = []
|
||||
a = 0.0
|
||||
if isProsess:
|
||||
length = len(Notes)
|
||||
j = 1
|
||||
for i in range(len(Notes)):
|
||||
commands.append("execute @a"+PlayerSelect+" ~ ~ ~ execute @s[scores={"+ScoreboardName+"="+str(int((a+2)*5+int(Notes[i][1]*5)))+"}] ~ ~ ~ playsound "+Instrument+" @s ~ ~ ~ 1000 "+str(Notes[i][0])+" 1000\n")
|
||||
a += Notes[i][1]
|
||||
if isProsess:
|
||||
commands.append("execute @a"+PlayerSelect+" ~ ~ ~ execute @s[scores={"+ScoreboardName+"="+str(int((a+2)*5+int(Notes[i][1]*5)))+"}] ~ ~ ~ title @s actionbar §e▶ 播放中: §a"+str(j)+"/"+str(length)+" || "+str(int(j/length*1000)/10)+"\n")
|
||||
j+=1
|
||||
commands.append("\n\n# 凌云我的世界开发团队 x 凌云软件开发团队 : W-YI(金羿)\n")
|
||||
for i in range(len(Notes)):
|
||||
commands.append("execute @a" + PlayerSelect + " ~ ~ ~ execute @s[scores={" + ScoreboardName + "=" + str(
|
||||
int((a + 2) * 5 + int(Notes[i][1] * 5))) + "}] ~ ~ ~ playsound " + Instrument + " @s ~ ~ ~ 1000 " + str(
|
||||
Notes[i][0]) + " 1000\n")
|
||||
a += Notes[i][1]
|
||||
if isProsess:
|
||||
commands.append("execute @a" + PlayerSelect + " ~ ~ ~ execute @s[scores={" + ScoreboardName + "=" + str(
|
||||
int((a + 2) * 5 + int(Notes[i][1] * 5))) + "}] ~ ~ ~ title @s actionbar §e▶ 播放中: §a" + str(
|
||||
j) + "/" + str(length) + " || " + str(int(j / length * 1000) / 10) + "\n")
|
||||
j += 1
|
||||
commands.append("\n\n# 凌云我的世界开发团队 x 凌云软件开发团队 : W-YI(金羿)\n")
|
||||
return commands
|
||||
|
||||
|
||||
# 简单载入方块
|
||||
# level.set_version_block(posx,posy,posz,"minecraft:overworld",("bedrock", (1, 16, 20)),Block(namespace, name))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import amulet
|
||||
import amulet_nbt
|
||||
from amulet.api.block import Block
|
||||
from amulet.api.block_entity import BlockEntity
|
||||
from amulet.utils.world_utils import block_coords_to_chunk_coords
|
||||
from amulet_nbt import TAG_String,TAG_Compound,TAG_Byte
|
||||
|
||||
|
||||
|
||||
#简单载入方块
|
||||
#level.set_version_block(posx,posy,posz,"minecraft:overworld",("bedrock", (1, 16, 20)),Block(namespace, name))
|
||||
|
||||
|
||||
|
||||
#转入指令列表与位置信息转至世界
|
||||
def Cmd2World(cmd:list,world:str,dire:list):
|
||||
'''将指令以命令链的形式载入世界\n
|
||||
# 转入指令列表与位置信息转至世界
|
||||
def Cmd2World(cmd: list, world: str, dire: list):
|
||||
"""将指令以命令链的形式载入世界\n
|
||||
cmd指令列表位为一个序列,中包含指令字符串\n
|
||||
world为地图所在位置,需要指向文件夹,dire为指令方块生成之位置'''
|
||||
world为地图所在位置,需要指向文件夹,dire为指令方块生成之位置"""
|
||||
level = amulet.load_level(world)
|
||||
cdl = []
|
||||
for i in cmd:
|
||||
e = True
|
||||
try:
|
||||
if (i[:i.index('#')].replace(' ','') != '\n') and(i[:i.index('#')].replace(' ','') != ''):
|
||||
if (i[:i.index('#')].replace(' ', '') != '\n') and (i[:i.index('#')].replace(' ', '') != ''):
|
||||
cdl.append(i[:i.index('#')])
|
||||
except:
|
||||
e = False
|
||||
except ValueError:
|
||||
cdl.append(i)
|
||||
finally:
|
||||
if e is True:
|
||||
cdl.append(i)
|
||||
i = 0
|
||||
#第一个是特殊
|
||||
universal_block = Block('universal_minecraft','command_block',{'conditional':TAG_String("false"),'facing':TAG_String('up'),'mode':TAG_String("repeating")})
|
||||
# 第一个是特殊
|
||||
universal_block = Block('universal_minecraft', 'command_block',
|
||||
{'conditional': TAG_String("false"), 'facing': TAG_String('up'),
|
||||
'mode': TAG_String("repeating")})
|
||||
cx, cz = block_coords_to_chunk_coords(dire[0], dire[2])
|
||||
chunk = level.get_chunk(cx, cz, "minecraft:overworld")
|
||||
offset_x, offset_z = dire[0] - 16 * cx, dire[2] - 16 * cz
|
||||
universal_block_entity = BlockEntity( 'universal_minecraft','command_block',dire[0],dire[1],dire[2],amulet_nbt.NBTFile(TAG_Compound({'utags': TAG_Compound({'auto': TAG_Byte(0),'Command': TAG_String(cdl.pop(0))}) })))
|
||||
universal_block_entity = BlockEntity('universal_minecraft', 'command_block', dire[0], dire[1], dire[2],
|
||||
amulet_nbt.NBTFile(TAG_Compound({'utags': TAG_Compound(
|
||||
{'auto': TAG_Byte(0), 'Command': TAG_String(cdl.pop(0))})})))
|
||||
chunk.blocks[offset_x, dire[1], offset_z] = level.block_palette.get_add_block(universal_block)
|
||||
chunk.block_entities[(dire[0], dire[1], dire[2])] = universal_block_entity
|
||||
chunk.changed = True
|
||||
#集体上移
|
||||
dire[1]+=1
|
||||
#真正开始
|
||||
# 集体上移
|
||||
dire[1] += 1
|
||||
# 真正开始
|
||||
down = False
|
||||
for j in cdl:
|
||||
if dire[1]+i >= 255:
|
||||
dire[0]+=1
|
||||
i=0
|
||||
if dire[1] + i >= 255:
|
||||
dire[0] += 1
|
||||
i = 0
|
||||
down = not down
|
||||
#定义此方块
|
||||
if dire[1]+i == 254 :
|
||||
universal_block = Block('universal_minecraft','command_block',{'conditional':TAG_String("false"),'facing':TAG_String('east'),'mode':TAG_String("chain")})
|
||||
# 定义此方块
|
||||
if dire[1] + i == 254:
|
||||
universal_block = Block('universal_minecraft', 'command_block',
|
||||
{'conditional': TAG_String("false"), 'facing': TAG_String('east'),
|
||||
'mode': TAG_String("chain")})
|
||||
else:
|
||||
if down:
|
||||
universal_block = Block('universal_minecraft','command_block',{'conditional':TAG_String("false"),'facing':TAG_String('down'),'mode':TAG_String("chain")})
|
||||
universal_block = Block('universal_minecraft', 'command_block',
|
||||
{'conditional': TAG_String("false"), 'facing': TAG_String('down'),
|
||||
'mode': TAG_String("chain")})
|
||||
else:
|
||||
universal_block = Block('universal_minecraft','command_block',{'conditional':TAG_String("false"),'facing':TAG_String('up'),'mode':TAG_String("chain")})
|
||||
universal_block = Block('universal_minecraft', 'command_block',
|
||||
{'conditional': TAG_String("false"), 'facing': TAG_String('up'),
|
||||
'mode': TAG_String("chain")})
|
||||
cx, cz = block_coords_to_chunk_coords(dire[0], dire[2])
|
||||
#获取区块
|
||||
# 获取区块
|
||||
chunk = level.get_chunk(cx, cz, "minecraft:overworld")
|
||||
offset_x, offset_z = dire[0] - 16 * cx, dire[2] - 16 * cz
|
||||
if down:
|
||||
#定义方块实体
|
||||
universal_block_entity = BlockEntity( 'universal_minecraft','command_block',dire[0],254-i,dire[2],amulet_nbt.NBTFile(TAG_Compound({'utags': TAG_Compound({'auto': TAG_Byte(1),'Command': TAG_String(j)}) })))
|
||||
|
||||
#将方块加入世界
|
||||
chunk.blocks[offset_x, 254-i, offset_z] = level.block_palette.get_add_block(universal_block)
|
||||
chunk.block_entities[(dire[0], 254-i, dire[2])] = universal_block_entity
|
||||
# 定义方块实体
|
||||
universal_block_entity = BlockEntity('universal_minecraft', 'command_block', dire[0], 254 - i, dire[2],
|
||||
amulet_nbt.NBTFile(TAG_Compound({'utags': TAG_Compound(
|
||||
{'auto': TAG_Byte(1), 'Command': TAG_String(j)})})))
|
||||
|
||||
# 将方块加入世界
|
||||
chunk.blocks[offset_x, 254 - i, offset_z] = level.block_palette.get_add_block(universal_block)
|
||||
chunk.block_entities[(dire[0], 254 - i, dire[2])] = universal_block_entity
|
||||
else:
|
||||
#定义方块实体
|
||||
universal_block_entity = BlockEntity( 'universal_minecraft','command_block',dire[0],dire[1]+i,dire[2],amulet_nbt.NBTFile(TAG_Compound({'utags': TAG_Compound({'auto': TAG_Byte(1),'Command': TAG_String(j)}) })))
|
||||
|
||||
#将方块加入世界
|
||||
chunk.blocks[offset_x, dire[1]+i, offset_z] = level.block_palette.get_add_block(universal_block)
|
||||
chunk.block_entities[(dire[0], dire[1]+i, dire[2])] = universal_block_entity
|
||||
#设置为已更新区块
|
||||
# 定义方块实体
|
||||
universal_block_entity = BlockEntity('universal_minecraft', 'command_block', dire[0], dire[1] + i, dire[2],
|
||||
amulet_nbt.NBTFile(TAG_Compound({'utags': TAG_Compound(
|
||||
{'auto': TAG_Byte(1), 'Command': TAG_String(j)})})))
|
||||
|
||||
# 将方块加入世界
|
||||
chunk.blocks[offset_x, dire[1] + i, offset_z] = level.block_palette.get_add_block(universal_block)
|
||||
chunk.block_entities[(dire[0], dire[1] + i, dire[2])] = universal_block_entity
|
||||
# 设置为已更新区块
|
||||
chunk.changed = True
|
||||
i+=1
|
||||
i += 1
|
||||
del i, cdl
|
||||
#保存世界并退出
|
||||
# 保存世界并退出
|
||||
level.save()
|
||||
level.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#音符转成方块再加载到世界里头
|
||||
def Blocks2World(world:str,dire:list,Datas:list):
|
||||
# 音符转成方块再加载到世界里头
|
||||
def Blocks2World(world: str, dire: list, Datas: list):
|
||||
from nmcsup.const import Blocks
|
||||
level = amulet.load_level(world)
|
||||
i = 0
|
||||
def setblock(block:str,pos:list):
|
||||
'''pos : list[int,int,int]'''
|
||||
|
||||
def setblock(block: str, pos: list):
|
||||
"""pos : list[int,int,int]"""
|
||||
cx, cz = block_coords_to_chunk_coords(pos[0], pos[2])
|
||||
chunk = level.get_chunk(cx, cz, "minecraft:overworld")
|
||||
offset_x, offset_z = pos[0] - 16 * cx, pos[2] - 16 * cz
|
||||
chunk.blocks[offset_x, pos[1], offset_z] = level.block_palette.get_add_block(Block("minecraft",block))
|
||||
chunk.blocks[offset_x, pos[1], offset_z] = level.block_palette.get_add_block(Block("minecraft", block))
|
||||
chunk.changed = True
|
||||
|
||||
for j in Datas:
|
||||
if dire[1]+1 >= 255:
|
||||
if dire[1] + 1 >= 255:
|
||||
i = 0
|
||||
dire[0]+=1
|
||||
setblock(Blocks[j[0]],[dire[0],dire[1]+i,dire[2]])
|
||||
i = int(i+j[1]+0.5) #四舍五入
|
||||
dire[0] += 1
|
||||
setblock(Blocks[j[0]], [dire[0], dire[1] + i, dire[2]])
|
||||
i = int(i + j[1] + 0.5) # 四舍五入
|
||||
level.save()
|
||||
level.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#传入音符列表制作播放器指令
|
||||
def Notes2Player(Note,dire:list,CmdData:dict):
|
||||
'''传入音符列表、坐标、指令数据,生成播放器指令'''
|
||||
# 传入音符列表制作播放器指令
|
||||
def Notes2Player(Note, dire: list, CmdData: dict):
|
||||
"""传入音符列表、坐标、指令数据,生成播放器指令"""
|
||||
Notes = {}
|
||||
for i in Note:
|
||||
Notes[i[0]] = ''
|
||||
@ -234,21 +229,17 @@ def Notes2Player(Note,dire:list,CmdData:dict):
|
||||
from nmcsup.const import Blocks
|
||||
Cmds = []
|
||||
for j in Notes:
|
||||
Cmds.append('execute @e[x='+str(dire[0])+',y='+str(dire[1])+',z='+str(dire[2])+',dy='+str(255-dire[1])+',name='+CmdData['Ent']+'] ~ ~ ~ detect ~ ~ ~ '+Blocks[j]+' 0 execute @a '+CmdData['Pls']+' ~ ~ ~ playsound '+CmdData['Ins']+' @s ~ ~ ~ 1000 '+str(j)+' 1000\n')
|
||||
Cmds+=['#本函数由 金羿 音·创 生成\n','execute @e[y='+str(dire[1])+',dy='+str(255-dire[1])+',name='+CmdData['Ent']+'] ~ ~ ~ tp ~ ~1 ~\n','execute @e[y=255,dy=100,name='+CmdData['Ent']+'] ~ ~ ~ tp ~1 '+str(dire[1])+' ~\n','#音·创 开发交流群 861684859']
|
||||
Cmds.append('execute @e[x=' + str(dire[0]) + ',y=' + str(dire[1]) + ',z=' + str(dire[2]) + ',dy=' + str(
|
||||
255 - dire[1]) + ',name=' + CmdData['Ent'] + '] ~ ~ ~ detect ~ ~ ~ ' + Blocks[j] + ' 0 execute @a ' +
|
||||
CmdData['Pls'] + ' ~ ~ ~ playsound ' + CmdData['Ins'] + ' @s ~ ~ ~ 1000 ' + str(j) + ' 1000\n')
|
||||
Cmds += ['#本函数由 金羿 音·创 生成\n', 'execute @e[y=' + str(dire[1]) + ',dy=' + str(255 - dire[1]) + ',name=' + CmdData[
|
||||
'Ent'] + '] ~ ~ ~ tp ~ ~1 ~\n',
|
||||
'execute @e[y=255,dy=100,name=' + CmdData['Ent'] + '] ~ ~ ~ tp ~1 ' + str(dire[1]) + ' ~\n',
|
||||
'#音·创 开发交流群 861684859']
|
||||
return Cmds
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#传入音符列表生成方块至世界
|
||||
def Datas2BlkWorld(NoteData,world:str,dire:list):
|
||||
# 传入音符列表生成方块至世界
|
||||
def Datas2BlkWorld(NoteData, world: str, dire: list):
|
||||
for i in range(len(NoteData)):
|
||||
Blocks2World(world,[dire[0],dire[1],dire[2]+i],NoteData[i])
|
||||
|
||||
|
||||
Blocks2World(world, [dire[0], dire[1], dire[2] + i], NoteData[i])
|
||||
|
@ -1,20 +1,19 @@
|
||||
"""音创系列版本号和版本操作函数"""
|
||||
|
||||
# 统计:致命(三级)错误:0个;警告(二级)错误:0个;语法(一级)错误:24个
|
||||
|
||||
|
||||
from msctspt.bugReporter import version
|
||||
import os
|
||||
|
||||
|
||||
#以下下两个值请在 msctspt/bugReporter 的version类中修改
|
||||
# 以下下两个值请在 msctspt/bugReporter 的version类中修改
|
||||
VER = version.version
|
||||
'''当前版本'''
|
||||
"""当前版本"""
|
||||
|
||||
LIBS = version.libraries
|
||||
'''当前所需库'''
|
||||
"""当前所需库"""
|
||||
|
||||
|
||||
|
||||
#判断版本、临时文件与补全库
|
||||
# 判断版本、临时文件与补全库
|
||||
def compver(ver1, ver2):
|
||||
"""
|
||||
传入不带英文的版本号,特殊情况:"10.12.2.6.5">"10.12.2.6"
|
||||
@ -39,6 +38,8 @@ def compver(ver1, ver2):
|
||||
return -1
|
||||
else:
|
||||
return 1
|
||||
|
||||
|
||||
#
|
||||
# ————————————————
|
||||
# 版权声明:上面的函数compver为CSDN博主「基友死得早」的原创文章中的函数,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
|
||||
@ -46,44 +47,40 @@ def compver(ver1, ver2):
|
||||
# ————————————————
|
||||
#
|
||||
|
||||
import os
|
||||
|
||||
def InstallLibs(now,LIBS):
|
||||
'''比对库信息并安装库'''
|
||||
def InstallLibs(now, LIBS1):
|
||||
"""比对库信息并安装库"""
|
||||
from os import system as run
|
||||
for i in LIBS:
|
||||
if not i in now:
|
||||
print("安装库:"+i)
|
||||
run("python -m pip install "+i+" -i https://pypi.tuna.tsinghua.edu.cn/simple")
|
||||
for i in LIBS1:
|
||||
if i not in now:
|
||||
print("安装库:" + i)
|
||||
run("python -m pip install " + i + " -i https://pypi.tuna.tsinghua.edu.cn/simple")
|
||||
|
||||
|
||||
def chkver(ver = VER,libs = LIBS):
|
||||
'''通过文件比对版本信息并安装库'''
|
||||
if not os.path.exists(os.getenv('APPDATA')+'\\Musicreater\\msct.ActiveDatas.msct'):
|
||||
def chkver(ver=VER, libs=LIBS):
|
||||
"""通过文件比对版本信息并安装库"""
|
||||
if not os.path.exists(os.getenv('APPDATA') + '\\Musicreater\\msct.ActiveDatas.msct'):
|
||||
print("新安装库")
|
||||
os.makedirs(os.getenv('APPDATA')+'\\Musicreater\\')
|
||||
with open(os.getenv('APPDATA')+'\\Musicreater\\msct.ActiveDatas.msct', 'w') as f:
|
||||
f.write(ver[0]+'\n')
|
||||
os.makedirs(os.getenv('APPDATA') + '\\Musicreater\\')
|
||||
with open(os.getenv('APPDATA') + '\\Musicreater\\msct.ActiveDatas.msct', 'w') as f:
|
||||
f.write(ver[0] + '\n')
|
||||
for i in libs:
|
||||
f.write(i+'\n')
|
||||
InstallLibs([],libs)
|
||||
f.write(i + '\n')
|
||||
InstallLibs([], libs)
|
||||
else:
|
||||
with open(os.getenv('APPDATA')+'\\Musicreater\\msct.ActiveDatas.msct', 'r') as f:
|
||||
with open(os.getenv('APPDATA') + '\\Musicreater\\msct.ActiveDatas.msct', 'r') as f:
|
||||
v = f.readlines()
|
||||
cp = compver(ver[0], v[0])
|
||||
if cp != 0:
|
||||
InstallLibs(v[1:],libs)
|
||||
with open(os.getenv('APPDATA')+'\\Musicreater\\msct.ActiveDatas.msct', 'w') as f:
|
||||
f.write(ver[0]+'\n')
|
||||
InstallLibs(v[1:], libs)
|
||||
with open(os.getenv('APPDATA') + '\\Musicreater\\msct.ActiveDatas.msct', 'w') as f:
|
||||
f.write(ver[0] + '\n')
|
||||
for i in libs:
|
||||
f.write(i+'\n')
|
||||
f.write(i + '\n')
|
||||
del cp
|
||||
|
||||
|
||||
def resetver():
|
||||
'''重置版本信息'''
|
||||
"""重置版本信息"""
|
||||
import shutil
|
||||
shutil.rmtree(os.getenv('APPDATA')+'\\Musicreater\\')
|
||||
|
||||
|
||||
|
||||
shutil.rmtree(os.getenv('APPDATA') + '\\Musicreater\\')
|
||||
|
Loading…
Reference in New Issue
Block a user