我的世界音乐转mcfunction文件

前言

此处用到了Minecraft Note Block Studio软件。由Minecraft Note Block Studio将编辑好的音乐(.nbs)导出为数据包,然后就可以用到此软件来生成适用于我的世界基岩版的命令函数文件。
*编程习惯不太好,变量名瞎用啥的就比较糟心。实在抱歉。

main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
NOTE = {
"minecraft:block.note_block.harp":"note.harp",
"minecraft:block.note_block.bass":"note.bass",
"minecraft:block.note_block.basedrum":"note.bd",
"minecraft:block.note_block.snare":"note.snare",
"minecraft:block.note_block.hat":"note.hat",
"minecraft:block.note_block.guitar":"note.guitar",
"minecraft:block.note_block.flute":"note.flute",
"minecraft:block.note_block.bell":"note.bell",
"minecraft:block.note_block.chime":"note.chime",
"minecraft:block.note_block.xylophone":"note.xylophone",
"minecraft:block.note_block.iron_xylophone":"note.iron_xylophone",
"minecraft:block.note_block.cow_bell":"note.cow_bell",
"minecraft:block.note_block.didgeridoo":"note.didgeridoo",
"minecraft:block.note_block.bit":"note.bit",
"minecraft:block.note_block.banjo":"note.banjo",
"minecraft:block.note_block.pling":"note.pling",

"minecraft:block.note_block.harp_1":"note.harp",
"minecraft:block.note_block.bass_1":"note.bass",
"minecraft:block.note_block.basedrum_1":"note.bd",
"minecraft:block.note_block.snare_1":"note.snare",
"minecraft:block.note_block.hat_1":"note.hat",
"minecraft:block.note_block.guitar_1":"note.guitar",
"minecraft:block.note_block.flute_1":"note.flute",
"minecraft:block.note_block.bell_1":"note.bell",
"minecraft:block.note_block.chime_1":"note.chime",
"minecraft:block.note_block.xylophone_1":"note.xylophone",
"minecraft:block.note_block.iron_xylophone_1":"note.iron_xylophone",
"minecraft:block.note_block.cow_bell_1":"note.cow_bell",
"minecraft:block.note_block.didgeridoo_1":"note.didgeridoo",
"minecraft:block.note_block.bit_1":"note.bit",
"minecraft:block.note_block.banjo_1":"note.banjo",
"minecraft:block.note_block.pling_1":"note.pling",

"minecraft:block.note_block.harp_-1":"note.harp",
"minecraft:block.note_block.bass_-1":"note.bass",
"minecraft:block.note_block.basedrum_-1":"note.bd",
"minecraft:block.note_block.snare_-1":"note.snare",
"minecraft:block.note_block.hat_-1":"note.hat",
"minecraft:block.note_block.guitar_-1":"note.guitar",
"minecraft:block.note_block.flute_-1":"note.flute",
"minecraft:block.note_block.bell_-1":"note.bell",
"minecraft:block.note_block.chime_-1":"note.chime",
"minecraft:block.note_block.xylophone_-1":"note.xylophone",
"minecraft:block.note_block.iron_xylophone_-1":"note.iron_xylophone",
"minecraft:block.note_block.cow_bell_-1":"note.cow_bell",
"minecraft:block.note_block.didgeridoo_-1":"note.didgeridoo",
"minecraft:block.note_block.bit_-1":"note.bit",
"minecraft:block.note_block.banjo_-1":"note.banjo",
"minecraft:block.note_block.pling_-1":"note.pling"
}
UNNATUREPITCH_H = (
"minecraft:block.note_block.harp_1",
"minecraft:block.note_block.bass_1",
"minecraft:block.note_block.basedrum_1",
"minecraft:block.note_block.snare_1",
"minecraft:block.note_block.hat_1",
"minecraft:block.note_block.guitar_1",
"minecraft:block.note_block.flute_1",
"minecraft:block.note_block.bell_1",
"minecraft:block.note_block.chime_1",
"minecraft:block.note_block.xylophone_1",
"minecraft:block.note_block.iron_xylophone_1",
"minecraft:block.note_block.cow_bell_1",
"minecraft:block.note_block.didgeridoo_1",
"minecraft:block.note_block.bit_1",
"minecraft:block.note_block.banjo_1",
"minecraft:block.note_block.pling_1",
)
UNNATUREPITCH_L = (
"minecraft:block.note_block.harp_-1",
"minecraft:block.note_block.bass_-1",
"minecraft:block.note_block.basedrum_-1",
"minecraft:block.note_block.snare_-1",
"minecraft:block.note_block.hat_-1",
"minecraft:block.note_block.guitar_-1",
"minecraft:block.note_block.flute_-1",
"minecraft:block.note_block.bell_-1",
"minecraft:block.note_block.chime_-1",
"minecraft:block.note_block.xylophone_-1",
"minecraft:block.note_block.iron_xylophone_-1",
"minecraft:block.note_block.cow_bell_-1",
"minecraft:block.note_block.didgeridoo_-1",
"minecraft:block.note_block.bit_-1",
"minecraft:block.note_block.banjo_-1",
"minecraft:block.note_block.pling_-1"
)
FIXPITCH_H = {
0.529732:2.118926,
0.561231:2.244924,
0.594604:2.378414,
0.629961:2.519842,
0.667420:2.669679,
0.707107:2.828427,
0.749154:2.996614,
0.793701:3.174802,
0.840896:3.363585,
0.890899:3.563594,
0.943874:3.775497,
1.000000:4.000000,
1.059463:4.237852,
1.122462:4.489848,
1.189207:4.756828,
1.259921:5.039684,
1.334840:5.339359,
1.414214:5.656854,
1.498307:5.993228,
1.587401:6.349604,
1.681793:6.727171,
1.781797:7.127189,
1.887749:7.550994,
2.000000:8.000000
}
FIXPITCH_L = {
1.000000:0.250000,
1.059463:0.264865,
1.122462:0.280615,
1.189207:0.297301,
1.259921:0.314980,
1.334840:0.333710,
1.414214:0.353553,
1.498307:0.374546,
1.587401:0.396850,
1.681793:0.420448,
1.781797:0.445449,
1.887749:0.471937,
}

def getNote(file):
allNote = []
for line in file:
if line[0] == "p":
info = line.split(" ")
allNote.append([info[1], info[8]])
return allNote

def fixPitch(allNote: list):
for i in allNote:
if i[0] in UNNATUREPITCH_H:
allNote[allNote.index(i)][1] = FIXPITCH_H[float(i[1])]
elif i[0] in UNNATUREPITCH_L:
allNote[allNote.index(i)][1] = FIXPITCH_L[float(i[1])]
return allNote

inputDir = input("输入目录 > ")
outputFile = input("输出文件 > ")
print("execute @e[type=armor_stand,name=$(cursor_name),scores={$(timer_name)=%}] ~ ~ ~ execute $(can_hear_player) ~ ~ ~ playsound ......")
CURSOR_NAME = input("cursor_name > ")
SCOREBOARD = input("timer_name > ")
PLAYER = input("can_hear_player > ")

outputFile = open(outputFile, "w", encoding="utf-8")

for i in range(0, 8192):
try:
f = open("%(filePath)s\\%(fileName)s.mcfunction" %{"filePath":inputDir, "fileName":i}, "r", encoding="utf-8")
info = fixPitch(getNote(f))
for j in info:
outputFile.write("execute @e[type=armor_stand,name=%(cursor_name)s,scores={%(scoreboard)s=%(i)s}] ~ ~ ~ execute %(player)s ~ ~ ~ playsound %(sound)s @s ^0 ^ ^ 1 %(pitch)s 1\n" %{"cursor_name":CURSOR_NAME, "scoreboard":SCOREBOARD, "i":i, "player":PLAYER, "sound":NOTE[j[0]], "pitch":j[1]})
except OSError:
f.close()
continue
f.close()

outputFile.close()
0%