diff --git a/Musicreater.py b/Musicreater.py index bc1a33b..4f2e0b4 100644 --- a/Musicreater.py +++ b/Musicreater.py @@ -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 diff --git a/languages/__pycache__/__init__.cpython-39.pyc b/languages/__pycache__/__init__.cpython-39.pyc index f925bdd..5464dac 100644 Binary files a/languages/__pycache__/__init__.cpython-39.pyc and b/languages/__pycache__/__init__.cpython-39.pyc differ diff --git a/languages/__pycache__/zhCN.cpython-39.pyc b/languages/__pycache__/zhCN.cpython-39.pyc index 8ed1447..62d481e 100644 Binary files a/languages/__pycache__/zhCN.cpython-39.pyc and b/languages/__pycache__/zhCN.cpython-39.pyc differ diff --git a/msctspt/__pycache__/__init__.cpython-39.pyc b/msctspt/__pycache__/__init__.cpython-39.pyc index 1618cc5..1c76f86 100644 Binary files a/msctspt/__pycache__/__init__.cpython-39.pyc and b/msctspt/__pycache__/__init__.cpython-39.pyc differ diff --git a/msctspt/__pycache__/bugReporter.cpython-39.pyc b/msctspt/__pycache__/bugReporter.cpython-39.pyc index 81e0ce2..8d513f2 100644 Binary files a/msctspt/__pycache__/bugReporter.cpython-39.pyc and b/msctspt/__pycache__/bugReporter.cpython-39.pyc differ diff --git a/msctspt/__pycache__/threadOpera.cpython-39.pyc b/msctspt/__pycache__/threadOpera.cpython-39.pyc index 47fc304..49fca19 100644 Binary files a/msctspt/__pycache__/threadOpera.cpython-39.pyc and b/msctspt/__pycache__/threadOpera.cpython-39.pyc differ diff --git a/nmcsup/__pycache__/__init__.cpython-39.pyc b/nmcsup/__pycache__/__init__.cpython-39.pyc index 50caa78..574dced 100644 Binary files a/nmcsup/__pycache__/__init__.cpython-39.pyc and b/nmcsup/__pycache__/__init__.cpython-39.pyc differ diff --git a/nmcsup/__pycache__/const.cpython-39.pyc b/nmcsup/__pycache__/const.cpython-39.pyc index 67d6277..284b2b5 100644 Binary files a/nmcsup/__pycache__/const.cpython-39.pyc and b/nmcsup/__pycache__/const.cpython-39.pyc differ diff --git a/nmcsup/__pycache__/log.cpython-39.pyc b/nmcsup/__pycache__/log.cpython-39.pyc index 386b007..606b88d 100644 Binary files a/nmcsup/__pycache__/log.cpython-39.pyc and b/nmcsup/__pycache__/log.cpython-39.pyc differ diff --git a/nmcsup/__pycache__/nmcreader.cpython-39.pyc b/nmcsup/__pycache__/nmcreader.cpython-39.pyc index 3a59181..b257ebe 100644 Binary files a/nmcsup/__pycache__/nmcreader.cpython-39.pyc and b/nmcsup/__pycache__/nmcreader.cpython-39.pyc differ diff --git a/nmcsup/__pycache__/trans.cpython-39.pyc b/nmcsup/__pycache__/trans.cpython-39.pyc index 2be7a56..a2e7d7d 100644 Binary files a/nmcsup/__pycache__/trans.cpython-39.pyc and b/nmcsup/__pycache__/trans.cpython-39.pyc differ diff --git a/nmcsup/__pycache__/vers.cpython-39.pyc b/nmcsup/__pycache__/vers.cpython-39.pyc index 31b6a25..bab8a12 100644 Binary files a/nmcsup/__pycache__/vers.cpython-39.pyc and b/nmcsup/__pycache__/vers.cpython-39.pyc differ diff --git a/nmcsup/const.py b/nmcsup/const.py index 9ddd353..29ca76c 100644 --- a/nmcsup/const.py +++ b/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''' - - - diff --git a/nmcsup/log.py b/nmcsup/log.py index 0019322..babfcfd 100644 --- a/nmcsup/log.py +++ b/nmcsup/log.py @@ -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) diff --git a/nmcsup/nmcreader.py b/nmcsup/nmcreader.py index 266ea6d..d7ca5c0 100644 --- a/nmcsup/nmcreader.py +++ b/nmcsup/nmcreader.py @@ -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 - - diff --git a/nmcsup/trans.py b/nmcsup/trans.py index fc712b3..6274c17 100644 --- a/nmcsup/trans.py +++ b/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]) diff --git a/nmcsup/vers.py b/nmcsup/vers.py index 2a524cc..b056231 100644 --- a/nmcsup/vers.py +++ b/nmcsup/vers.py @@ -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\\')