From 55eeddb108f1ae96ea70522d99ec02e58068d1d0 Mon Sep 17 00:00:00 2001 From: bgArray <474037765@qq.com> Date: Tue, 1 Feb 2022 21:35:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 - .idea/Musicreater.iml | 12 - .idea/inspectionProfiles/Project_Default.xml | 46 -- .../inspectionProfiles/profiles_settings.xml | 6 - .idea/misc.xml | 4 - .idea/modules.xml | 8 - .idea/vcs.xml | 6 - Musicreater.py | 2 +- .../__pycache__/__init__.cpython-39.pyc | Bin 181 -> 169 bytes bgArrayLib/__pycache__/bpm.cpython-38.pyc | Bin 1332 -> 1331 bytes bgArrayLib/__pycache__/bpm.cpython-39.pyc | Bin 1368 -> 1346 bytes bgArrayLib/__pycache__/compute.cpython-39.pyc | Bin 997 -> 985 bytes .../instrumentConstant.cpython-39.pyc | Bin 0 -> 1172 bytes .../pitchStrConstant.cpython-39.pyc | Bin 3591 -> 3579 bytes bgArrayLib/__pycache__/reader.cpython-38.pyc | Bin 3099 -> 3150 bytes bgArrayLib/__pycache__/reader.cpython-39.pyc | Bin 3143 -> 3183 bytes bgArrayLib/instrumentConstant.py | 24 + bgArrayLib/reader.py | 296 +++++------ languages/__pycache__/__init__.cpython-39.pyc | Bin 180 -> 168 bytes languages/__pycache__/lang.cpython-39.pyc | Bin 490 -> 478 bytes languages/__pycache__/zhCN.cpython-39.pyc | Bin 7227 -> 7215 bytes msctspt/__pycache__/__init__.cpython-39.pyc | Bin 178 -> 166 bytes .../__pycache__/bugReporter.cpython-39.pyc | Bin 4622 -> 4612 bytes msctspt/__pycache__/funcOpera.cpython-39.pyc | Bin 11194 -> 11157 bytes .../__pycache__/threadOpera.cpython-39.pyc | Bin 1192 -> 1052 bytes msctspt/__pycache__/transfer.cpython-39.pyc | Bin 16271 -> 16319 bytes msctspt/funcOpera.py | 16 +- msctspt/settings.py | 34 +- msctspt/transfer.py | 25 +- nmcsup/__pycache__/__init__.cpython-39.pyc | Bin 177 -> 165 bytes nmcsup/__pycache__/const.cpython-38.pyc | Bin 9852 -> 6179 bytes nmcsup/__pycache__/log.cpython-39.pyc | Bin 1759 -> 1747 bytes nmcsup/__pycache__/nmcreader.cpython-38.pyc | Bin 5610 -> 2836 bytes nmcsup/__pycache__/vers.cpython-39.pyc | Bin 2172 -> 2160 bytes resources/MSCT Dev Log.txt | 466 +++++++++--------- resources/myWords.txt | 86 ++-- 铭刻时间的歌.mid | Bin 0 -> 104074 bytes 37 files changed, 492 insertions(+), 542 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/Musicreater.iml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml create mode 100644 bgArrayLib/__pycache__/instrumentConstant.cpython-39.pyc create mode 100644 bgArrayLib/instrumentConstant.py create mode 100644 铭刻时间的歌.mid diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index eaf91e2..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/Musicreater.iml b/.idea/Musicreater.iml deleted file mode 100644 index 2946dc0..0000000 --- a/.idea/Musicreater.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index a2a5d19..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8d93904..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index b125bed..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 9661ac7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Musicreater.py b/Musicreater.py index baaceb3..9f2bb46 100644 --- a/Musicreater.py +++ b/Musicreater.py @@ -1468,7 +1468,7 @@ def __main__(): root.title(READABLETEXT[41].format(__version__)) root.geometry('900x900') # 像素 - root.iconbitmap('./resources/musicreater.ico','./resources/musicreater.ico') + root.iconbitmap('./resources/musicreater.ico', './resources/musicreater.ico') print('完成!') diff --git a/bgArrayLib/__pycache__/__init__.cpython-39.pyc b/bgArrayLib/__pycache__/__init__.cpython-39.pyc index 6924caa2ea49e5b55a371a791767874ee07f2ff9..a1ce7c69813e74906af8202d9ef3ff2a0d2db8eb 100644 GIT binary patch delta 29 jcmdnWxRQ}Ok(ZZ?0SJOTzfR<~Vf3EpVa8}Wv0DoOV{8X7 delta 41 vcmZ3FEr# diff --git a/bgArrayLib/__pycache__/bpm.cpython-38.pyc b/bgArrayLib/__pycache__/bpm.cpython-38.pyc index 817e667859e1ee50e986102526cbfff1a7fcb5b8..672e09bd0ebca17515c5d5f32cf4eee133f52433 100644 GIT binary patch delta 239 zcmdnOwV8`Al$V!_0SJ^iekQ(WoyaG{7&lQ{TQ8L%i#dg54r2;?3P%e|6l*G53THM` zQB*3!0_GI1g^W?`sVu4N&5Vo;sjR8&8;i=AZJB_kfUq+V7mERj6vi5cECy+YTE-H_ z8b*-X8pdD-O(wrghW5$KnoLCkKt)B8KthvgvNMYo4;zrlz{thO!C0g?xtb-~gyR-V zZe~h;ktj$ZCy=6V$3S|knl$V!_0SNNhekQ83P2`hd^qHuwEtA5Y!qLJI#hS{N!kNufk z$dJmK!nLubj5(Sas0W0dfw))!NR%)vV60(S$XLsm!dSzY#U#y8%T&T#!vxY*!xYS* z$>f*G&_0=2ljRmmZe~jUEe_wzluWnGoYW!#p!On3Afd?|#gv;i*_=g-j|0eMVB`Wq z4#pzo$+;}in(Rf2AcdkJf)hk2fe3LBp$sH$am2^xCFZ8a$4~ylqAbJ*6yjjyVCG;E KQ0HI=vKRpX+%2X6 diff --git a/bgArrayLib/__pycache__/bpm.cpython-39.pyc b/bgArrayLib/__pycache__/bpm.cpython-39.pyc index 41edf6bacf531a3ed79a0468af608f18efeb67c6..7905da2127dafdef69ff049e866f00d40802a3a2 100644 GIT binary patch delta 760 zcma)4L2DC16n<}Jc6N4~)KF5j7KKuY4Ta)C>%~JsDIT;S9>j=-;Ot?OHf5)Ksmzi? z3cd8uxK{}Y_)9#9KS6T!h~#Core6MhiucX$ce(NZLj9Qac@vCxJLNn^$|W?ZvOkjEaw zn}?Z4p0pm>TbXaA_1pXbP{eNw&52QsEXwH!Q%fbCGt2ut6G<((k@~%nvclqZ7-Oa^ zw<^Xgu)!#>e2iAnPbae|U7rf`{{|k;fQNIy!{kHi|HJJS!0&HOA+>Ns3fMmvurHxo z6_AGKcw9kn`xSKAU9cB)xb`}pIXlN>BRNYK(h}7wkD-s6t&m2TkI)R{-j6D^)=+2j zuWT6?^Pg;AhQ{?h*ZldFYh(nj`8%Y5M%H<&qR*yGn+3 zBZE~MU5XYR73-b=+l%2e=XGW(lw?*&ksan;u~Cxb0EUEN*78r{^*uEa^gIsDvP*TG qChA$NofS4|BAKoSWtJQw zcq<7DJ$XoO`2)Oo_3R%Yxq1-q9z6O@LTYn!hI#Y-n3?yMw_k(rL8Y0?1wf60 z0{n2v<-sV~qjkDJs%%%a(B20);#%qq?IQHFYBRGJa_tWgAry;U<5MUHqq7j7jDFwE z-F{hrdm0^^uo;IYtzfx-jF(8V6f0T}9nW*>#4tt+6HL%zizSSZCtPD9G)p|n#6G;b zpGe9wR#IF|l+9Sx^6mjuR7+}3vT77%G;0e}i(Q{vG2n^UtM&S&*dGVhvuxAR_*Pgy z!X&W4IBUfOtxuQEE~-KcdRY87@$`atxj-WhLYLLRE(MVtZO@z!v3I9;9_Qjby|zAq0cv)Q5Mi}KrpSX|MS%1h+bUd{ ziB6>7%v3$n(WB@jOn;M1& diff --git a/bgArrayLib/__pycache__/compute.cpython-39.pyc b/bgArrayLib/__pycache__/compute.cpython-39.pyc index 4f4ed6748f750e673e82f2797afef04da1010fe7..d7ff321d8111b95853fe4162a42115733516aefe 100644 GIT binary patch delta 32 mcmaFLev_R$k(ZZ?0SJOTzi#AaVrKN3%*SlTXgWENc?tl2EeC`E delta 44 ycmcb~{*;|Nk(ZZ?0SM~1{Mg9N#LO5rnUC3w*C@ufv^X=lC^fMpwP>;{^ArFK^9=|9 diff --git a/bgArrayLib/__pycache__/instrumentConstant.cpython-39.pyc b/bgArrayLib/__pycache__/instrumentConstant.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aef6de666742b290679e5751ee3fe903913240d3 GIT binary patch literal 1172 zcma*nzi!h|6vuJjCMiv5Q~ta_7lsa0iT@iR1ggZ;vQ!Akic~qhCNXmD$aW~*iVzC} zPk_YCL+~PZMM&@f3~YQ)OaZ|{uFfy_#-HO@I&G4zt%1est@}N>)wirqa`^N0lEZzf z9w^Jwvec?1Exkr{sIKm<&g-jeou#k*wbu3D>r!qYWiK6lmhAg_@XwNKvIZ;BUblXp z+MY}CfA5yQy1G;Q9P$jC)RrFdq6*U&?jpAIjU#LKX55`8)gtaK@~oJd zUd<_u2RhTUw90f@#{C!PdAXREMH=@`=Gkc)cc)2R$Lq6Y)+ALt%&M|D{)J3unl*9n zX})Y|m?p)u(sZY3p2r&}<=Jt&;|8g&mZx!No`CCuFWtQ`YGl;dDBCE@DBq~S zsL-g$tc^$1n6fE{aw(7UselS8oQ<<_HqOS`I2&i#9OL`VliBBX;c5z@h+2N!V(|3`pL|J_ literal 0 HcmV?d00001 diff --git a/bgArrayLib/__pycache__/pitchStrConstant.cpython-39.pyc b/bgArrayLib/__pycache__/pitchStrConstant.cpython-39.pyc index 44745f8f6bd220f64e3834617b3c944e40c3fc14..1c762fe70613b2b2a0a2e2edf985c68a7883bbfb 100644 GIT binary patch delta 32 mcmZpd`7O|4I=;^B@Md( diff --git a/bgArrayLib/__pycache__/reader.cpython-38.pyc b/bgArrayLib/__pycache__/reader.cpython-38.pyc index d0a08a5630d1970d6ffdadd2e25cbe4c570dcfd0..345313f571d5dde3b9b9a402c193ccadbe309363 100644 GIT binary patch delta 578 zcmY+B&uSDw5XQTvXL@G3dtwZPT|&SlLU7F=H3-3g(P-RbEH6CI+0342nHIDz;>$ND z-!qh8&pyjJ34i>#I@am4Po16j#k;*-|2jTuw5ZZeFs2E=qK&;`XWuQJ>BPX)I$0ec z{973bj;9p+e}x~Fvxf&`2wjOHk8<@TDAh}`I}?f`>}j_Jg1;ilV-yWh0f=ppC!1o6 zy_9oQT~)>ypsJuuD2vy{D_5quE_Dv2!IbhBrA3Xln=A`*O_8Flpr>4)ylpD$g|1&1 zHmPAWuti22BNW#t>Vqh$L5xWy(NyX!45{)%AH#vgsMa6pd^i{#)|bR^Q?#r%dZ^qC z{c78P)02lcNx4}<>$X9SD|#v+3s%iUqbjC+i`49SQXON$|Bh+Ku1&ZT#LBMzbE_k_sFqa>A2TO0& zz;1`&7<&;D*zE@$W|G)TtQ_dkptIBJ!?rf-N&V*h+ut8Y|1K|Y_P<u@m_*2k(ZZ?0SI=n|4f`Ewvn%lkE;uRcNiIYHZNtq&dkN>T9KSu zP?DLSx4Dn~3M11GhRM3jYV}n@HH=xzH4G`NDQvw=wQS)Gc?v8HB`lR;j0_-H!kWTf z!ywMk%*e#4TCsCGtjU|h7`771_Oo~wk)<<_8O)dplB@zkjL)A5L;Bs znZiE#45y?hM+s*QPcvf~Ls3NyPZn1SV>U}s#pGX{#_|<4EDLyQSQi4#D$FS12J!?J zf=#Yr31-mbob1EZ$5x~S^qbpcKJJs^Mj&r8axn5RaWJzmvM@3+@-gx-@=X4~t-$Cy NS&&B?NZRrk0RY0~MacjF diff --git a/bgArrayLib/instrumentConstant.py b/bgArrayLib/instrumentConstant.py new file mode 100644 index 0000000..924b4e2 --- /dev/null +++ b/bgArrayLib/instrumentConstant.py @@ -0,0 +1,24 @@ +instrument_list = {'0': 'harp', '1': 'harp', '2': 'pling', '3': 'harp', '4': 'pling', '5': 'pling', '6': 'harp', + '7': 'harp', + '8': 'share', '9': 'harp', '10': 'didgeridoo', '11': 'harp', '12': 'xylophone', '13': 'chime', + '14': 'harp', '15': 'harp', '16': 'bass', '17': 'harp', '18': 'harp', '19': 'harp', '20': 'harp', + '21': 'harp', '22': 'harp', '23': 'guitar', '24': 'guitar', '25': 'guitar', '26': 'guitar', + '27': 'guitar', '28': 'guitar', '29': 'guitar', '30': 'guitar', '31': 'bass', '32': 'bass', + '33': 'bass', + '34': 'bass', '35': 'bass', '36': 'bass', '37': 'bass', '38': 'bass', '39': 'bass', '40': 'harp', + '41': 'harp', '42': 'harp', '43': 'harp', '44': 'iron_xylophone', '45': 'guitar', '46': 'harp', + '47': 'harp', '48': 'guitar', '49': 'guitar', '50': 'bit', '51': 'bit', '52': 'harp', '53': 'harp', + '54': 'bit', '55': 'flute', '56': 'flute', '57': 'flute', '58': 'flute', '59': 'flute', + '60': 'flute', + '61': 'flute', '62': 'flute', '63': 'flute', '64': 'bit', '65': 'bit', '66': 'bit', '67': 'bit', + '68': 'flute', '69': 'harp', '70': 'harp', '71': 'flute', '72': 'flute', '73': 'flute', '74': 'harp', + '75': 'flute', '76': 'harp', '77': 'harp', '78': 'harp', '79': 'harp', '80': 'bit', '81': 'bit', + '82': 'bit', '83': 'bit', '84': 'bit', '85': 'bit', '86': 'bit', '87': 'bit', '88': 'bit', + '89': 'bit', + '90': 'bit', '91': 'bit', '92': 'bit', '93': 'bit', '94': 'bit', '95': 'bit', '96': 'bit', + '97': 'bit', + '98': 'bit', '99': 'bit', '100': 'bit', '101': 'bit', '102': 'bit', '103': 'bit', '104': 'harp', + '105': 'banjo', '106': 'harp', '107': 'harp', '108': 'harp', '109': 'harp', '110': 'harp', + '111': 'guitar', '112': 'harp', '113': 'bell', '114': 'harp', '115': 'cow_bell', '116': 'basedrum', + '117': 'bass', '118': 'bit', '119': 'basedrum', '120': 'guitar', '121': 'harp', '122': 'harp', + '123': 'harp', '124': 'harp', '125': 'hat', '126': 'basedrum', '127': 'snare'} diff --git a/bgArrayLib/reader.py b/bgArrayLib/reader.py index 514fbf6..094db70 100644 --- a/bgArrayLib/reader.py +++ b/bgArrayLib/reader.py @@ -1,148 +1,148 @@ -# -*- coding: utf-8 -*- - - -from nmcsup.log import log -import pickle - - -class Note: - def __init__(self, channel, pitch, velocity, time, time_position, instrument): - self.channel = channel - self.pitch = pitch - self.velocity = velocity - self.delay = time - self.time_position = time_position - self.instrument = instrument - self.CD = "d" - - def get_CD(self, start, end): - if end - start > 1.00: - self.CD = "c" - else: - self.CD = "d" - - -def midiNewReader(midfile: str): - import mido - # from msctspt.threadOpera import NewThread - from bgArrayLib.bpm import get - - def Time(mt, tpb_a, bpm_a): - return round(mt / tpb_a / bpm_a * 60 * 20) - - Notes = [] - tracks = [] - note_list = [] - close = [] - on = [] - off = [] - instruments = [] - isPercussion = False - try: - mid = mido.MidiFile(midfile) - except Exception: - log("找不到文件或无法读取文件" + midfile) - return False - tpb = mid.ticks_per_beat - bpm = get(mid) - # 解析 - # def loadMidi(track1): - for track in mid.tracks: - overallTime = 0.0 - instrument = 0 - for i in track: - overallTime += i.time - try: - if i.channel != 9: - # try: - # log("event_type(事件): " + str(i.type) + " channel(音轨): " + str(i.channel) + - # " note/pitch(音高): " + - # str(i[2]) + - # " velocity(力度): " + str(i.velocity) + " time(间隔时间): " + str(i.time) + - # " overallTime/globalTime/timePosition: " + str(overallTime) + " \n") - # except AttributeError: - # log("event_type(事件): " + str(i.type) + " thing(内容):" + str(i) + " \n") - if 'program_change' in str(i): - instrument = i.program - if instrument > 119: # 音色不够 - pass - else: - instruments.append(i.program) - if 'note_on' in str(i) and i.velocity > 0: - print(i) - # print(i.note) - # print([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) - tracks.append( - [Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) - note_list.append( - [i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument]) - on.append([i.note, Time(overallTime, tpb, bpm)]) - # return [Note(i.channel, i, i.velocity, i.time, Time(overallTime, tpb, bpm))] - if 'note_off' in str(i) or 'note_on' in str(i) and i.velocity == 0: - # print(i) - # print([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm))]) - close.append( - [Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) - off.append([i.note, Time(overallTime, tpb, bpm)]) - # return [Note(i.channel, i, i.velocity, i.time, Time(overallTime, tpb, bpm))] - except AttributeError: - pass - if 'note_on' in str(i) and i.channel == 9: - if 'note_on' in str(i) and i.velocity > 0: - print(i) - # print(i.note) - # print([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), -1)]) - tracks.append([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), -1)]) - note_list.append([i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), -1]) - on.append([i.note, Time(overallTime, tpb, bpm)]) - isPercussion = True - # return [Note(i.channel, i, i.velocity, i.time, Time(overallTime, tpb, bpm))] - Notes.append(tracks) - if instruments is []: - instruments.append(0) - instruments = list(set(instruments)) - with open("1.pkl", 'wb') as b: - pickle.dump([instruments, isPercussion], b) - - # for j, track in enumerate(mid.tracks): - # th = NewThread(loadMidi, (track,)) - # th.start() - # Notes.append(th.getResult()) - - # print(Notes) - print(Notes.__len__()) - # print(note_list) - print(instruments) - return Notes - # return [Notes, note_list] - - -def midiClassReader(midfile: str): - import mido - from bgArrayLib.bpm import get - - def Time(mt, tpb_a, bpm_a): - return round(mt / tpb_a / bpm_a * 60 * 20) - - Notes = [] - tracks = [] - try: - mid = mido.MidiFile(filename=midfile,clip=True) - except Exception: - log("找不到文件或无法读取文件" + midfile) - return False - log("midi已经载入了。") - tpb = mid.ticks_per_beat - bpm = get(mid) - for track in mid.tracks: - overallTime = 0.0 - instrument = 0 - for i in track: - overallTime += i.time - if 'note_on' in str(i) and i.velocity > 0: - print(i) - tracks.append( - [Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) - Notes.append(tracks) - print(Notes.__len__()) - return Notes +# -*- coding: utf-8 -*- + + +from nmcsup.log import log +import pickle + + +class Note: + def __init__(self, channel, pitch, velocity, time, time_position, instrument): + self.channel = channel + self.pitch = pitch + self.velocity = velocity + self.delay = time + self.time_position = time_position + self.instrument = instrument + self.CD = "d" + + def get_CD(self, start, end): + if end - start > 1.00: + self.CD = "c" + else: + self.CD = "d" + + +def midiNewReader(midfile: str): + import mido + # from msctspt.threadOpera import NewThread + from bgArrayLib.bpm import get + + def Time(mt, tpb_a, bpm_a): + return round(mt / tpb_a / bpm_a * 60 * 20) + + Notes = [] + tracks = [] + note_list = [] + close = [] + on = [] + off = [] + instruments = [] + isPercussion = False + try: + mid = mido.MidiFile(midfile) + except Exception: + log("找不到文件或无法读取文件" + midfile) + return False + tpb = mid.ticks_per_beat + bpm = get(mid) + # 解析 + # def loadMidi(track1): + for track in mid.tracks: + overallTime = 0.0 + instrument = 0 + for i in track: + overallTime += i.time + try: + if i.channel != 9: + # try: + # log("event_type(事件): " + str(i.type) + " channel(音轨): " + str(i.channel) + + # " note/pitch(音高): " + + # str(i[2]) + + # " velocity(力度): " + str(i.velocity) + " time(间隔时间): " + str(i.time) + + # " overallTime/globalTime/timePosition: " + str(overallTime) + " \n") + # except AttributeError: + # log("event_type(事件): " + str(i.type) + " thing(内容):" + str(i) + " \n") + if 'program_change' in str(i): + instrument = i.program + if instrument > 119: # 音色不够 + pass + else: + instruments.append(i.program) + if 'note_on' in str(i) and i.velocity > 0: + print(i) + # print(i.note) + # print([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) + tracks.append( + [Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) + note_list.append( + [i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument]) + on.append([i.note, Time(overallTime, tpb, bpm)]) + # return [Note(i.channel, i, i.velocity, i.time, Time(overallTime, tpb, bpm))] + if 'note_off' in str(i) or 'note_on' in str(i) and i.velocity == 0: + # print(i) + # print([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm))]) + close.append( + [Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) + off.append([i.note, Time(overallTime, tpb, bpm)]) + # return [Note(i.channel, i, i.velocity, i.time, Time(overallTime, tpb, bpm))] + except AttributeError: + pass + if 'note_on' in str(i) and i.channel == 9: + if 'note_on' in str(i) and i.velocity > 0: + print(i) + # print(i.note) + # print([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), -1)]) + tracks.append([Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), -1)]) + note_list.append([i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), -1]) + on.append([i.note, Time(overallTime, tpb, bpm)]) + isPercussion = True + # return [Note(i.channel, i, i.velocity, i.time, Time(overallTime, tpb, bpm))] + Notes.append(tracks) + if instruments is []: + instruments.append(0) + instruments = list(set(instruments)) + with open("1.pkl", 'wb') as b: + pickle.dump([instruments, isPercussion], b) + + # for j, track in enumerate(mid.tracks): + # th = NewThread(loadMidi, (track,)) + # th.start() + # Notes.append(th.getResult()) + + # print(Notes) + print(Notes.__len__()) + # print(note_list) + print(instruments) + return Notes + # return [Notes, note_list] + + +def midiClassReader(midfile: str): + import mido + from bgArrayLib.bpm import get + + def Time(mt, tpb_a, bpm_a): + return round(mt / tpb_a / bpm_a * 60 * 20) + + Notes = [] + tracks = [] + try: + mid = mido.MidiFile(filename=midfile,clip=True) + except Exception: + log("找不到文件或无法读取文件" + midfile) + return False + log("midi已经载入了。") + tpb = mid.ticks_per_beat + bpm = get(mid) + for track in mid.tracks: + overallTime = 0.0 + instrument = 0 + for i in track: + overallTime += i.time + if 'note_on' in str(i) and i.velocity > 0: + print(i) + tracks.append( + [Note(i.channel, i.note, i.velocity, i.time, Time(overallTime, tpb, bpm), instrument)]) + Notes.append(tracks) + print(Notes.__len__()) + return Notes diff --git a/languages/__pycache__/__init__.cpython-39.pyc b/languages/__pycache__/__init__.cpython-39.pyc index 8dd1ba5d1f3cc9c817faaa140630d2ceb33662b6..8b056f036672c87b185c88c355bb77d4d24022a3 100644 GIT binary patch delta 29 jcmdnOxPp;8k(ZZ?0SJOTzfR<~Vf32lVa8}Wv0D=WV=4zM delta 41 vcmZ3%xP_5Bk(ZZ?0SM~1{FumX!x%Qv!;IG`#<#RMGr1@=u_U!4OZg diff --git a/languages/__pycache__/lang.cpython-39.pyc b/languages/__pycache__/lang.cpython-39.pyc index decf559746c93824e103fb9625d8c40654573217..fa65b1c3cb5a823578c91495f8ea4abfe54b3bbe 100644 GIT binary patch delta 32 mcmaFGe2aVA`Q_1 diff --git a/languages/__pycache__/zhCN.cpython-39.pyc b/languages/__pycache__/zhCN.cpython-39.pyc index d334df4e14001a8d6aa9731022bc13a53dafdecc..a545850051423fb68e2345b19a6bb3f0f5a74b59 100644 GIT binary patch delta 32 mcmdmOvEG6!k(ZZ?0SLUlY~-3C#ppJ9wv-v8>E?S_ft)Wnk1qRp42Vi^G@Ee<{a diff --git a/msctspt/__pycache__/__init__.cpython-39.pyc b/msctspt/__pycache__/__init__.cpython-39.pyc index fa7cd6a1661640044568b5df7d8187b657f17e54..bcc1f74bc0fffdb30e21ef183f83b5b9e2c18c43 100644 GIT binary patch delta 29 jcmdnQxQvlIk(ZZ?0SJOTzfR<~Vf2{jVa8}Wv0EJgVx|Wq delta 41 vcmZ3+xQUTFk(ZZ?0SM~1{FumX!x%Er!;IG`#<#RMGr1@=u_U!6vywGnVtPnc3UbiEDS6Q3(K&SZl!=mM%saDfQ=8Y6lQw;e8&TcqUYdJeVj#q966Pv*< z=qP_2?Ds*m{7ob(>0J~ik+Y9yoh6G0XfC^X&RajK?}aX5)VKF~n>Uc_Lm9%W*>l$D zhO+vTgeeg%r|gIi|-n~f~U*Z8#e(?ih3mA$0x_uiPwt19K zc=<1KJ8$tyWgWNq4fJq# z5KIa{0K{Va5-gNQo8Oh8Q+(appE!z3yqjPU`UyjXVL~4vDx&)0ND8NaNF8aOAX_it z5J4sM5R!yJLYnX-VMKhUYuW^VjxL@j3=j?zUJyU&y11inHICBd7=c>FPY_OuD{ali zMVwarnM}@dG8x`V3)C+D3W1tcJux~${u;sv)EpZH^HYQ=!ZhKLy*xmNHep@7-_9@5 zU2=DXo*WfU`#7v%W1o_WZ=l(z`@1F8dgf{Gw+LRt-lo}Uf>+rYnt82Vp;?Bo*P~QT zk8Qh+9yM(X$P(xv-BmymPJAms~ zw6|DbW>b`zZ8+LX$|nG9mYFeyDXb&|a}FM1yWm#R47~3gau?QH?nQM(*{;N|<`pwu z!pOWYui}alWhE%Vad!H>Ewv!ul+DhnwV+}aAC6#@Y0T`>SV4T4Xow{=miHHYW;Ysp z8Za1tlep+@RZzu?(I#;{u|L(TF)DCZT905#gHn3i_mQ=rU?OjZYbo)4qH(Mr_h~U( zP5piOO3RkN;J+Cx$a~(ReFb70`cWUs#Baz*STK{c%TiNzu)M1J; zV^hpX^G>nTJ+Sg$l!Wc!Ccz?*r1)9FV{58eKZ0@7j}}&2afvqGQ(3rRg!nS8=Lk08 zF}39d{*$%>_umV5do)!Cd@w&iEsd!mknZ#;V!iz(SoI{e{Qo4iO4aWrsr{trW4WyB zqNY()lVY+@JmaAIgdt5&djqO(AK-B`8~^enVyT|7Fr|wiDzfe5tFNjKveCabUm$oQ fCyjEiHp*BdcTf0r;&Lh;)7%g5XX1CUMDtjT&Hn1c5Elkx9xnkB?&2_MWt>_)s)htRzs;{yxYW$>-{`CZ|1$( zH#55rvtML8^M1ci;cM@+U-NydpLX6<$(CE{pr?bCzpTiI>YV@BjZ3>$u^`NR#T4=z z^*nXfL++pG8Q2I1ei`u0Q9x!qkDt<>YDZ{q3S>Bl z>%c0*?s&u8$iG?K7Ax#35R*+i%})u9?;xy~isF5~x9&3(S39+nTuj}gg8VKKt7m&n zm4@V(eG|ja^0XKQQotlI2h0O$AR_(I!rBCjPh0~tVg$M*Fa>ykF<=}x0n7r&fd$|> zU=cV8JkMAXry!mNrhyr`FdCzbd>nme?;I58feXOPz(q#VXCK+J3KeUoGF9QES+`6f z44$yta=DUO&gDcDw#cfu1R$r4bHzc6R~X6mro)A^xC$%-D?m>-*qU-l@eqA3^|+)> z&hmn5JEyYW=rFoalQQ8QP*%`R-6U>kcbbPgpTD9x;{`qlcw9kN$n_ zLn0-s7z1v_t?a9$l)Gk?8d*QiDCGREGi!7wa^RH+D>aw+sNyyT<%LL0A7Xv;`rfdj zE5@*V6w$R2U8%Im%N-&4NhI}RQdh87&2?vhy;J)vSJe+xBMoiUeJJtV1m-I3RXW&H zch;Pg;l94~({ZYnuQ^WkojUY2re&@#9c;BjOD*>2~P$F8*)3Q?;SLOC_=Rb+y?$-%{z{*HIH># zOP+Oh7hWf4N_or5?D`MhbphgqE0%68JAQ{h;!Vt_*!~zu7WG-R{Qbim<;uc#`YH?{!$x6l|&dH4|!hFm{rFpzS ziDHmR43qaWX<6z486`kt7BJN?EM#P4sNw(`${Y?fj)kFwrBZ{D0R$r%Ko%H)Nr*M9 zlM|TbcyDpKRwSnulw{`T74dSJi$o^tvS`bL m99Rr;AO|B0BOeO~QxV8LK$i=E)Cf*4XHnw@`33Au4rTyLt22WD delta 446 zcmYLF%}T>S5Z>9%Z=1v#BnPQ@kwWW5RD1&!54MMjMGz#|h)RhtO%4f#zJUmP5GcyKn-c88rAzHf&8zJ0Q$wimi?h0*zV{|O`g&3gps$tmo)+vmsW z@a7VuFo{rpLLI8|7k1<;x5q77$o&z!Wpv@5@&)g)*wMErNY2ym=2P{>~!}L@9+iCR-~9GM~w+g;~F(XwZwpf4-VvRTR!l{ctB7>uRrq< zn*gxSc8M#^~^4s|uUo;(yMhO&o&oQTbJWwLZ? afyO=EGLRF}6u7KreEB6BRb9;}*b;wAX;vfv diff --git a/msctspt/__pycache__/transfer.cpython-39.pyc b/msctspt/__pycache__/transfer.cpython-39.pyc index 42bea61e40fa59e646f398b54f723bca34c65523..fabe34b25f4d89823876e82589d3b9cecf1e257b 100644 GIT binary patch delta 3280 zcmai0Yit}>6`s30v+rGdZLjV4xps)%i4(_89NVPvBk`l5F-eGsiCMzZ$Us@nxrBj6k5ts5Fmtr3W-1bK&p@iAtXdaBk>3E1A(CCoV$*l zqO{CtzB%`tbI-l!b!T2I{H)-Q`TZURu7kb*jQ#SOzme>@)-h4oM%~nNi9`Z)J1b-5 za0gi#^{;3&K+7&^kqX-RKm2kU1b!vmA^E6Xv7*vSS_RxH+Qn>OBLsI4?$DaWAgx~U z(i&O|I@PorxMd})1t39<)~&c`J#7GS4c!Sm8>^MmgS2tQL7QkZNH)=3a#9`6p)Ih* zR=OGZ^|WW*U>z<`+gF_Q5vqf%;W347r5%?P+OcGdG*bJdqVJxqhcMiGwfKu4zE_+l z6NDTP@7Q|DZsD}=uhA@ZB9S$%z+^nl*-Sdd>7iJX3B$gnpkn;iE+4!r;2D7@`vg%G zN~q0Hk|eJZr0s?+Y0qntRt+_&m4iBd08pyo+jix9LQhD5k5#T_U5(^apuQ zPRV&Tft5{4-U~WjspBk|ZX|KA_)gAw!$Tc8+jWIHa|F<3dUI;dd)9{3XLe74b@Ximd((!T2l;_-FE|_xx zR+vHYhT7Po^(lGxlydHXs+bj5$-*d6@IDTlE_h6*__Nv`(uq};NM%hvn`9|7YC!bw z5mBLyRxMV9p9yD-*g`fvo1)=V+GL%AX+}+@RWWmVALp@!iNs82Je|zUnvBaPmF5Zf;8Q@?355+;;b2SyVps)?09pMoK9bqegUdB6+u0z;{upOZj zVFyAlLKi|e!cK%;2t5FnZDf>V7{{Mm?`rM7)eQ3Jmt@x=gTvy6BG9Thxttj({$Y;eCf1ZpMU-Q4`Amd`Ws&(H1 zobVXJL4*l_h}%rWpQa4zmwy_Whmh%wr&Bb6r4}>zO0inyC(j9gXfru1 zxFuPGX#zp7-bI9@kYm;w`4WilH#vl+8c3fCx^v&WM(VvkdU zmjlmIsXslRvK%u;I{tK)KZ>4sT-dBTVJE*8`|5|97%1wF(puvu0H`fi?(pLY!iMGXOmL2rbTtQ^>7q8rOl{#Uhn}N%R*oGkH>IU zU}H^w3Y9h-I(^>;r{YSu$tzLzUJ#UQjT-Wx|4|AcsJ%gDe(`c`*FoF+329-A*Yg3TK7Wm$?w z;eboVQnb{oeWJUq_V`B6VGi!PxlEbNpv>Dj+?VrId_HR=W=c*wfyFb(SItC{mFf;Z zVU~x_rlMKK=NNxd+-jR~%%Z9(JngNcXo$}NK>DP4xe%Ippg>SwvX@0l8gt{#d+66Th|DArFgb$%Mmo!M z7tf^E1NM5E>X%S15M+7TV+nqU zUlsb^t!LzXOg;Z5!pjI>LijQQmXa*KNI)KmQTVHY10V9T8zr)MWG~*uA#MXssn?PI zF2Y*~-$S@AezLd0`xPX=itsh@r@iCk??N9q(=4rg8@X>Fyon$)d=sf3h~Q97Ex!Zw zyI3+VAY8U`hs*2o@;l;>1H)rSfTi2VIljlCThj2Bza2PO#K8rG9Dv?rIipdUjz^=G z!(7NDQm45Mg|`G9+(TX#uMUQ$Wuwg_SNc|ol-!Wqsoa%3r1zs>6hYP|eu+4K9ZI20 f0cB~YAYUe5K<;gXJK)Zs1OB&GeJ$eH(4PMS@?HDF delta 3074 zcmaJ@eN0=|6@SOYJsk*@U+JF=^}8Y07raeNdt* zt)Je{=l;$;=bm%Vxz~QX_(IW}@OoVeeE#0V$hEGW(WvTUw*w!dy_*hMJuXilShdp#?F3!JBMRL~yH*t1wQPwsQtPA=>6;J1My$V9dZ(n5 z2|}I_?^yc0d!BlHUQZ=COBjrc4=oS3X=U4ZN;k^B$z+bR*<6CtiA08#U5{mTgU@GJ z))2?6JBljq>&C|e-&OFAz^e}vMWKXR(n^LDRD!ZKZOK>*8c|Lv1-oI(E6b$dptge3 zP*Em|p_%M58C7OJD7f-U-c<*dbxOevbKG){YS>XidFdy`y!*6+s%LCGn|(8HUvp9| zZ~eML?Rf&|FkE>sJ1wWLd9dC$EWo>|2Uu@V0oj{J#+TRDd@$R6+PX|`pl!uByfFR|?K4S3es{&J6Z-X_JH6k8f z173IlVH-j%LQuS|B^<{Z4lUqDiW?53$H6J*q+d9z?sk5_dgEM$BxGXaZQOX6IOP-eBQjc3j7%)(>9bEvWvaT=|fA$TJ%K^rR~9 zn^fpyN%3J^$jnOo$rILOpj%0Glen1h7RX5HXWly+IV^ru(|YI;v>8MA48mstVooEK zJVP0@2p>oCaU|WzT$ZMcR4$uH^T&|(BaDh)^aMqBz(JNpU!aXlh*+RKAp4{2ISMWq zpJZv4GslQQ>al>S<23t_1cTe zOdxBW%gse9`B5Z3hk#voPd`rLP$vBZO1OsU&YH~7m^De$yb`#wjdtc1vt?~IolBn4 z`2fz7$wP&47La2`jt2v8fr=c7tzd>52Ieq$h*v3tn~9xz($@Fe{60ilfoSi zho)i9k|n&GH-f-pXidybJ1)k;tw&~%mYLepa07BYCuX~Tlr4{=m2YcJPI1y!dTi4N zpA~O~o7{3o5=eeQ{65@B9O7>Hct;wDKf?>3n&F6QZW*55vZ~K9M!C6ZrHd_(+UlBt zU-EApyR9pNw~IgQ7&&;KGZ(SP>;_Axd1BEFKMEdV9-U=rJekX65?RXk0mUB_iT2?1 zLnzAa#yZ?~n%9V|q6{MkY}tMyxu~a8vu3JxG|3`wGg295)=8Gg#pkneo$&?6r^GMY zXEhzCa&e%ebrcj;oV@#Btu_es?6 zLCBUq?C_{Nq`Zv83IN;=R`@Dg4Bc#5nerD!XLk$9i}CI$vLbGF|2O(98a#(^2_WX+ zY)<|d@~be6Sfvww8THb^RXAEfci%HCHQ=Q+;5ggjOv;^t4Id$;6;>V z?gf-yL6CcxM``P@_@GsiYywWq!+4@zhaVe#RJ^tCjjm^4;#kBoHWu;5e4D3zA(5VE zy1C9p^n`aX-zTp3wiQpKh&3SMXa0wu0O{Dk)e_l)vbe@v7SZ4k$gzE?b;UxrY8`)ejpS<$o@W%>n za;QN+YGk8eK>T$C3<2()+bI74;SGczBD^gAGSJ}u3W{Gv_?oCXI7a>7lw?3M yQW@1Ca)%H`5M&=tpp-`jDQkj|jyBDVi|TE(+N2mTLm<;yt$ diff --git a/msctspt/funcOpera.py b/msctspt/funcOpera.py index c99fe49..10c750b 100644 --- a/msctspt/funcOpera.py +++ b/msctspt/funcOpera.py @@ -92,7 +92,6 @@ def funSplit(bigFile, maxCmdLen: int = 10000): return parts -# 注意!播放器应该为个人独立播放器,此处bug需要修改 def makeFuncFiles(musicset, path='./'): """在指定目录下生成函数文件""" from nmcsup.trans import Note2Cmd @@ -139,6 +138,20 @@ def makeFuncFiles(musicset, path='./'): log("完成============================") + + + + + + + + + + + + + + def makeFunDir(musicset, path='./'): """在指定目录下生成函数包文件夹""" import os @@ -299,7 +312,6 @@ def makeClassFuncFiles(musicset, path='./'): encoding='UTF-8') as f: f.writelines(classList_conversion_SinglePlayer(musicset['musics'][i]['notes'], musicset['musics'][i]['set']['ScoreboardName'], - musicset['musics'][i]['set']['Instrument'], musicset['mainset']['PlayerSelect'], True)) if musicset['mainset']['IsRepeat']: diff --git a/msctspt/settings.py b/msctspt/settings.py index 59f6adf..e758f09 100644 --- a/msctspt/settings.py +++ b/msctspt/settings.py @@ -1,18 +1,18 @@ -# -*- coding:utf-8 -*- - - - - -settings = { - 'language' : 'zh-CN', - 'theme' : { - '' : '', - }, -} - -class msctSetting: - def __init__(self,**settings) -> None: - pass - - def __call__(self, **kwds): +# -*- coding:utf-8 -*- + + + + +settings = { + 'language' : 'zh-CN', + 'theme' : { + '' : '', + }, +} + +class msctSetting: + def __init__(self,**settings) -> None: + pass + + def __call__(self, **kwds): pass \ No newline at end of file diff --git a/msctspt/transfer.py b/msctspt/transfer.py index 37e179e..d508c91 100644 --- a/msctspt/transfer.py +++ b/msctspt/transfer.py @@ -25,10 +25,11 @@ def hans2pinyin(hans, style=3): return final -def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, Instrument: str, playerSelection: str = '', +def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, playerSelection: str = '', isProsess: bool = False) -> list: from bgArrayLib.compute import round_up from bgArrayLib.pitchStrConstant import pitch + from bgArrayLib.instrumentConstant import instrument_list commands = [] length = len(List) j = 1 @@ -38,20 +39,18 @@ def classList_conversion_SinglePlayer(List: list, ScoreboardName: str, Instrumen print(i) print(type(i)) try: - if i.instrument > 119: - pass - else: + commands.append( + f"execute @a{playerSelection} ~ ~ ~ execute @s[scores={{{ScoreboardName}=" + f"{str(round_up(i.time_position)).replace('.0', '')}}}] ~ ~{127 - i.velocity} " + f"~ playsound note.{instrument_list.get(str(i.instrument))} @s ~ ~ ~ " + f"1000 {pitch.get(str(i.pitch))} 1000\n") + if isProsess: commands.append( f"execute @a{playerSelection} ~ ~ ~ execute @s[scores={{{ScoreboardName}=" - f"{str(round_up(i.time_position)).replace('.0', '')}}}] ~ ~{127 - i.velocity} " - f"~ playsound {Instrument} @s ~ ~ ~ 1000 {pitch.get(str(i.pitch))} 1000\n") - if isProsess: - commands.append( - f"execute @a{playerSelection} ~ ~ ~ execute @s[scores={{{ScoreboardName}=" - f"{str(round_up(i.time_position)).replace('.0', '')}}}] ~ ~ ~ " - f"title @s actionbar §e▶ 播放中: §a{j}/{length} || {int(j / length * 1000) / 10}\n") - j += 1 - except: + f"{str(round_up(i.time_position)).replace('.0', '')}}}] ~ ~ ~ " + f"title @s actionbar §e▶ 播放中: §a{j}/{length} || {int(j / length * 1000) / 10}\n") + j += 1 + except Exception: pass # a += List[i][1] # commands.append("\n\n# 凌云我的世界开发团队 x 凌云软件开发团队 : W-YI(金羿)\n") diff --git a/nmcsup/__pycache__/__init__.cpython-39.pyc b/nmcsup/__pycache__/__init__.cpython-39.pyc index 5cbf01d7855a77855c96a5b19d13045ee3e07e50..4cd082f2c33adc5d9559d9d611bf0a1bbd810823 100644 GIT binary patch delta 29 jcmdnUxRjAQk(ZZ?0SJOTzfR<~VRWD9Va8}Wv0DuQVq^y( delta 41 vcmZ3=xRH@Nk(ZZ?0SM~1{FumX!x%i#!;IG`#<#RMGr1@=u_U!&oKzSk~qc8y2=M_%? delta 3596 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 hYvlXGzgxAF#J!q “鸣凤鸽子”等 带来的我的世界websocket服务器功能) -9.支持使用红石播放音乐 -10.支持采用延时的播放器 -11.支持使用bdx导出结构 -12.支持采用tp的方法播放 -13.支持识别曲谱图片解析音乐 -14.支持使用瀑布流的方式播放音乐 - - -17.支持自动搜寻地图目录位置(网易&微软) -++++++ -4.修改UI界面使之适应当前功能 -7.制作软件下载器使用户更直观地操作 -15. -16. - - - - - 新更新日志 - - Delta 0.2.0 -2022 2 1 - 2022 x(TO-DO) -1.程序图标完善 -2.修改窗口样式,可显示诸多信息 -3.修复生成bug -4.全部变量皆使用类存储 - - Delta 0.1.5.1 -2022 2 1 农历大年初一 -1.修复了部分midi文件无法读取的错误 - - Delta 0.1.5 -2022 2 1 农历大年初一 -1.修复所有用户在使用过程中可遇到的bug - - Delta 0.1.1 -2022 1 30 -1.新增设置调用方案,但未使用 -2.新增整个音乐生成单个BDX的功能,但必须用新方法解析 -3.发现陈年旧bug:在msctspt.funcOpera中makeFuncFiles生成的指令格式不对 -4.在nmcsup.trans中新增classList_conversion_SinglePlayer使用对于每个玩家的独立播放器 - - Delta 0.1.0 -2022 1 27 -1.完成了多音色的支持,但仍需修改 - - Delta 0.0.2 -2022 1 19 -1.纠正几乎所有语法 - - Delta 0.0.1 -2022 1 3 -1.新增对翻译字符串的支持 -2.把所有需要翻译的字符串用双引号字符串表示,其余全是单引号字符串 -2.2.累死我了,我错了我错了,饶了我吧,以后一定遵守代码规范 -3.新增多语言支持。 - - - Delta 0.0.0 -2022 1 2 -1.重新采用Tk作为窗口库 -2.优化界面布局 -3.修改部分按钮无响应的bug -4.新增启动时的Saying -5.删除命令行模式 -6.更新README文件,并增添英文README - - - Gamma 0.0.0 -2021 12 26~2021 12 31 -1.使用BeeWare作为窗口库 -2.兼容安卓,但是安卓上无法运行 -3.兼容窗口化系统,但是无法实现正常功能 -4.引申大量bug - - - Beta 0.0.4.3 -2021 11 3~2021 12 26 -1.不断改进包以及代码可读性 -2.修正部分源码错误 -3.修正部分格式错误 -4.加强对Linux系统的支持 -5.新增命令行模式 -6.代码中新增大量注释 - - - Beta 0.0.4 ~ Beta 0.0.4.2 -2021 11 20 ~ 2021 11 21 -1.完全支持Linux系统 -2.支持以.RyStruct导出结构 -3.修复大量bug -4.支持拖拽打开(参数1为.msct文件) - - - Beta 0.0.3.1~0.0.3.5 -2021 11 1~2021 11 2 -1.更新部分提示信息使之更加科学 -2.强制性限制不得使用非Win32平台打开此程序 -3.支持在Windwos7上使用此程序(发现错误并解决:DLL缺失MSVCP140.dll) -4.开始对结构导出进行部分支持 -5.发现红乐写入的错误,正在排查修复 - - - - - Beta 0.0.3 -2021 10 29 ~ 2021 10 31 -1.修改部分窗口排版 -2.修复指令载入地图的结构的错误 -3.修复指令生成出现的指令错误(感谢 昀梦 找出bug并指正) -4.支持生成红石音乐(以音符盒存储的音乐),并写入地图 -5.修复了生成指令音乐导致的错误 -6.修复bdx文件y轴过长导致无法生成完毕的错误,现在bdx的y轴为200格 - - - - - - Beta 0.0.2 -2021 10 25 -1.修复了邮件发送错误报告无法生成压缩包的问题 -2.修复了导入音轨时无法获得进程返回值的问题 -3.修复了.bdx文件生成时无法选择文件的问题 -4.修复了生成指令音乐(计分板)没有起始方块的问题 -5.新增了创建Websocket的功能,可以在localhost:8080创建websocket服务器播放音乐(感谢由 Fuckcraft “鸣凤鸽子”等 带来的我的世界websocket服务器功能(fcwslib) ) -6.解决了打包成可执行文件时无法正常退出的问题 - - - - Beta 0.0.1 -2021 10月 -1.支持生成.bdx文件(感谢由 Charlie_Ping “查理平” 带来的bdx转换功能) -2.逐步增强对安卓系统的支持 -3.逐步放弃对Windows的强行要求 -4.逐步提升性能,增加多线程 - - - - - - - - - - - Alpha部分更新日志 - - Alpha 0.0.0 -2021 8 20 -1.集合了 函数音创0.1.4.1 与 世界音创Beta0.0.1 的功能于本应用 -2.新增了可以生成 .mcpack 包的方法 - - Alpha 0.0.1 -2021 8 25 -1.新增两个彩蛋(就是函数音创命令行模式的彩蛋 - - Alpha 0.0.1.1 -2021 8 25 -1.修复大量已知问题 -2.修复了部分彩蛋bug,但是程序仍然不会正常退出 -3.菜单界面优化 - - Alpha 0.0.1.2 -2021.8.29 -1.修复大量已知问题 -2.现在可以操作指令文件了 -3.窗口界面优化 - - Alpha 0.0.2 -2021 9 5 -1.修复部分已知问题 -2.指令链导入之时仅生成链式方块且允许折转 -3.[Dev]正在逐步支持结构导出 - - Alpha 0.0.3 -2021 9 7 -1.修复指令链转入世界的摆放错误 -2.指令存储的音乐(包括函数)支持不同玩家不同的播放 -3.支持播放进度条 -4.删除彩蛋任务栏图标 -4.[Dev]已确定导出结构格式 - - Alpha 0.0.3.1 -2021 9 11 -1.取消输入玩家选择器时不会出现bug了 -2.删除日志文件修改为删除临时文件 -3.可以删除用于确认档案存在的文件了 - - Alpha 0.0.4 -2021 10 4-5 -1.可以将大函数导入世界(以一条链执行多个函数的方式) -2.关闭了试听音乐的功能,但是保留其函数于funOpera.py中 -3.修改部分代码,减少更多bug -4.发现指令链转入世界的摆放错误,但是没改正 - - 1.0.3 -2021 10 5-6 -1.解决一些已知问题 -2.解决了文件读取造成的字符编码问题 -3.使用PyPinyin库将汉字转化为拼音首字母 - - Alpha 0.0.4.1 -2021 10 9 -1.将清除日志功能设置为结束后统一清除,避免了清除过程中文件占用导致的问题 - - Alpha 0.0.5 -2021 10 10 -1.支持使用邮件方式发送错误报告(日志) - - Alpha 0.0.5.1 -1.修复了邮件发送错误报告无法发送的问题 -2.修复了打包成.exe文件之后无法正常退出的问题 - - - - +音·创(Musicreater)是由金羿(W-YI)开发的一款《我的世界》基岩版音乐生成辅助软件 +本软件源代码依照Apache软件协议公开。 + +Copyright © W-YI 2022 + +本软件是金羿前作函数音创和世界音创的集合版本,同时增加了大量功能更新。 + + + To-Do +1.可以导出自定义的结构文件用于存储要导入地图中的结构 +2.进度条 +3.可以将音乐写入音符盒(红乐) + +5.支持自动给音符盒绑定更多的音色 +6.可以由.schematic文件导入地图,亦可反向处理 + +8.支持自定义创建websockeet服务器播放音乐(感谢由 Fuckcraft “鸣凤鸽子”等 带来的我的世界websocket服务器功能) +9.支持使用红石播放音乐 +10.支持采用延时的播放器 +11.支持使用bdx导出结构 +12.支持采用tp的方法播放 +13.支持识别曲谱图片解析音乐 +14.支持使用瀑布流的方式播放音乐 + + +17.支持自动搜寻地图目录位置(网易&微软) +++++++ +4.修改UI界面使之适应当前功能 +7.制作软件下载器使用户更直观地操作 +15. +16. + + + + + 新更新日志 + + Delta 0.2.0 +2022 2 1 - 2022 x(TO-DO) +1.程序图标完善 +2.修改窗口样式,可显示诸多信息 +3.修复生成bug +4.全部变量皆使用类存储 + + Delta 0.1.5.1 +2022 2 1 农历大年初一 +1.修复了部分midi文件无法读取的错误 + + Delta 0.1.5 +2022 2 1 农历大年初一 +1.修复所有用户在使用过程中可遇到的bug + + Delta 0.1.1 +2022 1 30 +1.新增设置调用方案,但未使用 +2.新增整个音乐生成单个BDX的功能,但必须用新方法解析 +3.发现陈年旧bug:在msctspt.funcOpera中makeFuncFiles生成的指令格式不对 +4.在nmcsup.trans中新增classList_conversion_SinglePlayer使用对于每个玩家的独立播放器 + + Delta 0.1.0 +2022 1 27 +1.完成了多音色的支持,但仍需修改 + + Delta 0.0.2 +2022 1 19 +1.纠正几乎所有语法 + + Delta 0.0.1 +2022 1 3 +1.新增对翻译字符串的支持 +2.把所有需要翻译的字符串用双引号字符串表示,其余全是单引号字符串 +2.2.累死我了,我错了我错了,饶了我吧,以后一定遵守代码规范 +3.新增多语言支持。 + + + Delta 0.0.0 +2022 1 2 +1.重新采用Tk作为窗口库 +2.优化界面布局 +3.修改部分按钮无响应的bug +4.新增启动时的Saying +5.删除命令行模式 +6.更新README文件,并增添英文README + + + Gamma 0.0.0 +2021 12 26~2021 12 31 +1.使用BeeWare作为窗口库 +2.兼容安卓,但是安卓上无法运行 +3.兼容窗口化系统,但是无法实现正常功能 +4.引申大量bug + + + Beta 0.0.4.3 +2021 11 3~2021 12 26 +1.不断改进包以及代码可读性 +2.修正部分源码错误 +3.修正部分格式错误 +4.加强对Linux系统的支持 +5.新增命令行模式 +6.代码中新增大量注释 + + + Beta 0.0.4 ~ Beta 0.0.4.2 +2021 11 20 ~ 2021 11 21 +1.完全支持Linux系统 +2.支持以.RyStruct导出结构 +3.修复大量bug +4.支持拖拽打开(参数1为.msct文件) + + + Beta 0.0.3.1~0.0.3.5 +2021 11 1~2021 11 2 +1.更新部分提示信息使之更加科学 +2.强制性限制不得使用非Win32平台打开此程序 +3.支持在Windwos7上使用此程序(发现错误并解决:DLL缺失MSVCP140.dll) +4.开始对结构导出进行部分支持 +5.发现红乐写入的错误,正在排查修复 + + + + + Beta 0.0.3 +2021 10 29 ~ 2021 10 31 +1.修改部分窗口排版 +2.修复指令载入地图的结构的错误 +3.修复指令生成出现的指令错误(感谢 昀梦 找出bug并指正) +4.支持生成红石音乐(以音符盒存储的音乐),并写入地图 +5.修复了生成指令音乐导致的错误 +6.修复bdx文件y轴过长导致无法生成完毕的错误,现在bdx的y轴为200格 + + + + + + Beta 0.0.2 +2021 10 25 +1.修复了邮件发送错误报告无法生成压缩包的问题 +2.修复了导入音轨时无法获得进程返回值的问题 +3.修复了.bdx文件生成时无法选择文件的问题 +4.修复了生成指令音乐(计分板)没有起始方块的问题 +5.新增了创建Websocket的功能,可以在localhost:8080创建websocket服务器播放音乐(感谢由 Fuckcraft “鸣凤鸽子”等 带来的我的世界websocket服务器功能(fcwslib) ) +6.解决了打包成可执行文件时无法正常退出的问题 + + + + Beta 0.0.1 +2021 10月 +1.支持生成.bdx文件(感谢由 Charlie_Ping “查理平” 带来的bdx转换功能) +2.逐步增强对安卓系统的支持 +3.逐步放弃对Windows的强行要求 +4.逐步提升性能,增加多线程 + + + + + + + + + + + Alpha部分更新日志 + + Alpha 0.0.0 +2021 8 20 +1.集合了 函数音创0.1.4.1 与 世界音创Beta0.0.1 的功能于本应用 +2.新增了可以生成 .mcpack 包的方法 + + Alpha 0.0.1 +2021 8 25 +1.新增两个彩蛋(就是函数音创命令行模式的彩蛋 + + Alpha 0.0.1.1 +2021 8 25 +1.修复大量已知问题 +2.修复了部分彩蛋bug,但是程序仍然不会正常退出 +3.菜单界面优化 + + Alpha 0.0.1.2 +2021.8.29 +1.修复大量已知问题 +2.现在可以操作指令文件了 +3.窗口界面优化 + + Alpha 0.0.2 +2021 9 5 +1.修复部分已知问题 +2.指令链导入之时仅生成链式方块且允许折转 +3.[Dev]正在逐步支持结构导出 + + Alpha 0.0.3 +2021 9 7 +1.修复指令链转入世界的摆放错误 +2.指令存储的音乐(包括函数)支持不同玩家不同的播放 +3.支持播放进度条 +4.删除彩蛋任务栏图标 +4.[Dev]已确定导出结构格式 + + Alpha 0.0.3.1 +2021 9 11 +1.取消输入玩家选择器时不会出现bug了 +2.删除日志文件修改为删除临时文件 +3.可以删除用于确认档案存在的文件了 + + Alpha 0.0.4 +2021 10 4-5 +1.可以将大函数导入世界(以一条链执行多个函数的方式) +2.关闭了试听音乐的功能,但是保留其函数于funOpera.py中 +3.修改部分代码,减少更多bug +4.发现指令链转入世界的摆放错误,但是没改正 + + 1.0.3 +2021 10 5-6 +1.解决一些已知问题 +2.解决了文件读取造成的字符编码问题 +3.使用PyPinyin库将汉字转化为拼音首字母 + + Alpha 0.0.4.1 +2021 10 9 +1.将清除日志功能设置为结束后统一清除,避免了清除过程中文件占用导致的问题 + + Alpha 0.0.5 +2021 10 10 +1.支持使用邮件方式发送错误报告(日志) + + Alpha 0.0.5.1 +1.修复了邮件发送错误报告无法发送的问题 +2.修复了打包成.exe文件之后无法正常退出的问题 + + + + diff --git a/resources/myWords.txt b/resources/myWords.txt index 9eaf79f..454feca 100644 --- a/resources/myWords.txt +++ b/resources/myWords.txt @@ -1,43 +1,43 @@ -生命灵动 当用激情跃起奋发之力 -奇偶数阵 -学海无涯 应用爱意徜徉 -在生命的起源寻找灵魂的慰藉 -纪念那一段辉煌灿烂的青春年华 -以梦想为驱使 创造属于自己的未来 -集青春之力 绽放爱意之花 -那个曾与我相伴的人 依稀在我的心头留恋 -你是我灵魂中绽放出最艳丽的花朵 -心之所向 意之所属 -一个蛋从外面被敲开,注定被吃掉\n但从里面啄开,没准是只鹰 ——长津湖 -音·创 -辉煌的、璀璨的、无边无际、铺天盖地的晚霞\n洒下斑驳的金光,染红了整片山河 -《赫兰圣殿》 -风,摇曳着,轻抚着他的脸颊\n半壁残阳正留恋着人世最后一抹温暖 -清晨的阳光将吹散人间的雾霭 照亮每一寸土壤 -远方的山川 总会踏着白雾前来 -梦中的世界 总被现实相依存 -敌人都是自己树立的\n生存的道路上想要披荆斩棘,那就得学会化敌为友 -有光之处必有影 有影之处必有光 -一生所恋 相伴相随 -你的眼眸是剔透的晶灯 散发着醉人心扉的清光 -海波激出透人心脾的欢呼 -英雄何必要站在光中?\n深入黑暗,我自发光。 -如果我们有三生三世的时间\n那我们将渡过三百乘以三百六十个潮涨潮落 -善善不能用 恶恶不能去 -知行合一,格物致知;远沂博索,夕惕若厉;\n蕙心执质,嘉言懿行;怀瑾握瑜,心若芷萱。 -纪念 追忆 那段不平凡的青春 -守望黑夜的人,切莫忘记黎明的光彩 ——原神 -与邪佞战斗的人,切莫失掉正直的心 ——原神 -我的心 时刻系着祖国的山河 -生命 灵动 -坚如寒冰 烈似骄阳 -上了战场就是英雄 ——长津湖 -冰与火 恨与爱 静与情 -有些枪必须开,有些可以不开 ——长津湖 -夕阳西下,余辉将尽,夜幕降临,寒风凛冽 ——原神 -愿风擦拭你的双眼,让你看清真相 ——原神 -心愿之结晶 而何能之宝贵 -神明,正倾诉着他辉煌的过去…… -一切过程与结果都不重要 重要的是热爱与真情 -给大家带来笑容 这就是我存在的使命 -不忘本源 牢记故地 +生命灵动 当用激情跃起奋发之力 +奇偶数阵 +学海无涯 应用爱意徜徉 +在生命的起源寻找灵魂的慰藉 +纪念那一段辉煌灿烂的青春年华 +以梦想为驱使 创造属于自己的未来 +集青春之力 绽放爱意之花 +那个曾与我相伴的人 依稀在我的心头留恋 +你是我灵魂中绽放出最艳丽的花朵 +心之所向 意之所属 +一个蛋从外面被敲开,注定被吃掉\n但从里面啄开,没准是只鹰 ——长津湖 +音·创 +辉煌的、璀璨的、无边无际、铺天盖地的晚霞\n洒下斑驳的金光,染红了整片山河 +《赫兰圣殿》 +风,摇曳着,轻抚着他的脸颊\n半壁残阳正留恋着人世最后一抹温暖 +清晨的阳光将吹散人间的雾霭 照亮每一寸土壤 +远方的山川 总会踏着白雾前来 +梦中的世界 总被现实相依存 +敌人都是自己树立的\n生存的道路上想要披荆斩棘,那就得学会化敌为友 +有光之处必有影 有影之处必有光 +一生所恋 相伴相随 +你的眼眸是剔透的晶灯 散发着醉人心扉的清光 +海波激出透人心脾的欢呼 +英雄何必要站在光中?\n深入黑暗,我自发光。 +如果我们有三生三世的时间\n那我们将渡过三百乘以三百六十个潮涨潮落 +善善不能用 恶恶不能去 +知行合一,格物致知;远沂博索,夕惕若厉;\n蕙心执质,嘉言懿行;怀瑾握瑜,心若芷萱。 +纪念 追忆 那段不平凡的青春 +守望黑夜的人,切莫忘记黎明的光彩 ——原神 +与邪佞战斗的人,切莫失掉正直的心 ——原神 +我的心 时刻系着祖国的山河 +生命 灵动 +坚如寒冰 烈似骄阳 +上了战场就是英雄 ——长津湖 +冰与火 恨与爱 静与情 +有些枪必须开,有些可以不开 ——长津湖 +夕阳西下,余辉将尽,夜幕降临,寒风凛冽 ——原神 +愿风擦拭你的双眼,让你看清真相 ——原神 +心愿之结晶 而何能之宝贵 +神明,正倾诉着他辉煌的过去…… +一切过程与结果都不重要 重要的是热爱与真情 +给大家带来笑容 这就是我存在的使命 +不忘本源 牢记故地 diff --git a/铭刻时间的歌.mid b/铭刻时间的歌.mid new file mode 100644 index 0000000000000000000000000000000000000000..ff8d124d4a5addc0a1be95dc3aaebb0d2a991efd GIT binary patch literal 104074 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 XOmmKiHk96-;*q;^>pow~3y%K}2~=>N literal 0 HcmV?d00001