From 882ce96b90b6b1cb25b5f4d3ef221bc46eadfe91 Mon Sep 17 00:00:00 2001 From: EillesWan Date: Tue, 1 Feb 2022 18:20:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=83=A8=E5=88=86mi?= =?UTF-8?q?di=E6=96=87=E4=BB=B6=E6=97=A0=E6=B3=95=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Musicreater.py | 29 ++++++------------ bgArrayLib/__pycache__/bpm.cpython-38.pyc | Bin 1341 -> 1332 bytes .../pitchStrConstant.cpython-38.pyc | Bin 0 -> 3562 bytes bgArrayLib/__pycache__/reader.cpython-38.pyc | Bin 3098 -> 3099 bytes bgArrayLib/bpm.py | 12 ++++---- bgArrayLib/reader.py | 11 ++++--- languages/__pycache__/zhCN.cpython-38.pyc | Bin 7119 -> 7198 bytes .../__pycache__/threadOpera.cpython-38.pyc | Bin 1038 -> 1037 bytes msctspt/__pycache__/transfer.cpython-38.pyc | Bin 15913 -> 16108 bytes msctspt/bugReporter.py | 2 +- msctspt/threadOpera.py | 25 ++++----------- resources/MSCT Dev Log.txt | 5 +++ ...公园(In The End - Linkin Pa_爱给网_aigei_com.mid | Bin 24207 -> 0 bytes 13 files changed, 34 insertions(+), 50 deletions(-) create mode 100644 bgArrayLib/__pycache__/pitchStrConstant.cpython-38.pyc delete mode 100644 测试用/最后-林肯公园(In The End - Linkin Pa_爱给网_aigei_com.mid diff --git a/Musicreater.py b/Musicreater.py index ee3a073..72ac804 100644 --- a/Musicreater.py +++ b/Musicreater.py @@ -700,25 +700,16 @@ def __main__(): del midfile def midiSPT(th_): - try: - try: - for i in th_.getResult(): - datas = DMM() - datas['notes'] = i - dataset[0]['musics'].append(datas) - del th_ - global is_save - is_save = False - global NowMusic - RefreshMain() - RefreshMusic(NowMusic) - except OSError: - tkinter.messagebox.showerror(READABLETEXT[0], READABLETEXT[167]) - except AttributeError: - try: - tkinter.messagebox.showerror(READABLETEXT[0], READABLETEXT[167]) - except OSError: - tkinter.messagebox.showerror(READABLETEXT[0], READABLETEXT[167]) + for i in th_.getResult(): + datas = DMM() + datas['notes'] = i + dataset[0]['musics'].append(datas) + del th_ + global is_save + is_save = False + global NowMusic + RefreshMain() + RefreshMusic(NowMusic) threading.Thread(target=midiSPT, args=(th,)).start() del th dataset[0]['mainset']['ReadMethod'] = "class" diff --git a/bgArrayLib/__pycache__/bpm.cpython-38.pyc b/bgArrayLib/__pycache__/bpm.cpython-38.pyc index 35a9b6cc95035f9f83d57b39a098c32a364416cd..817e667859e1ee50e986102526cbfff1a7fcb5b8 100644 GIT binary patch delta 656 zcma)3&1+OK5T8l%^73B0x-8XgwFtJbWi9k3f`}9pQPc$~QeE*N%@f{kKX~aoNx~j> zFG3Hk(VHyYbFW_gE4=O1Q}NPmO(tK{FX`g*N+ku7E&1!sf&};; zoPULrvrM}EWN-26-3&Thi_fSdEeE14bgb0?+EFHT(q-mhCUn|Ige*GVHLgH&;xH6! zt#SX8Pw##F)NA6HZ{&InL;OTS7mD;A>2`}U7CPXN5FOL#xMog}$L_=HJ1!zm+KB8W z7h7rL4!;Eyi914bYNSCHo#_hGC?(~Y<$dl%(I~Ezac^H)VR0Hp=#=GF<>(Td>?f9w z&?>q#IE&J2sWAU<;^7(b@Eq~5_)x|tyuBmhch`<7wFr$I(f&TAU4_ld0?M?T?xLw7 zg!K|O*$c3z4RIZHBeS!M#f@U8oG2%$T4e-%)NFsEYPNAv$AN=v$SkUinjn&g!=MVDr%v9-y unIUNMHrse>QokZ@;=F$^Ud_hlddOZ15bB$`0D;ZS`#<8gsxGKF5c~!Imx}cO delta 648 zcma)(&ubGw6vyA2c{@8hY1&3Yj6YgD1f&!~E>#f^MXMm9C?aabgE$d3X)8P3lg^Su zJWI<$@!%o3#k(H8`Zq|fp1ca)eM3lTZ_Y5^dGF24_cP3VHQ&wplWNrfw}*HCzG^6d zUm-c!1Sgw3_O}k#FSIS$=mTs^t8C0Obt9|$!fke?O@@fjrP*xpF|3(G|84LZPq78o zc9d81MfO`7!w{`F$BJ;e!tbvh{H~W@#Kqe3ly+15cB=2EHocSXbju%N$5f_b_svxD zN_kB_sx|pflJGA#SpW@|pJe+?9T#vJ6>9DZ>*$*0PkC>}E%F|>6r>j9JjsSw zFJ8TQ_u&uuXZ>OSoIm1^`eXjMKjBaM=lu)*lz-8`4x7Osy z)<+~kV6CZ)?MY5nk4{)Cr_0%Fkl2z^OH!-{d4qkI)LS+sZ!&9@&*$)sTuQ2?O3!*! zoo-oM9x3RB(HTc7{N+}2H=wg^7(r#IrQC)taU)4BwKS@EQ~*gusC|)?&XP9-n4>yp^jSoxG;3k6(Akof3ewI(1_EF6_KE;C zlV?F-i=$c@#B792S#5hfO-Jr92~CaS40IE5(HU|n(I*WR#;H)gC9>^}BJ}`83O#An z+^orBGFoOJGN>$R&cw(7K@F5*)H1dT(Q?*Gfrhl%5}CzT6fMoi%$joU#IG7j2PhPm z2d79#W~L`MG}WY3%cJ}Lc!+E85W&%Xu}do zN4(G&vp~8aBb)ge>_BYc*z{fAt=UW_*vr)tA421HUr;3Fg`uC3GOm-(TTuF z9$B?M77R^-w5bSnPaI4qCK;1LkYZ+zhlN5`W;j%%zPdealf)!|4~uEB-M5LGx77pNQk6rg1Qc- zF#aJhv{Yhzgau|IUd#eg2n*wn>V*CnX0z8|&)_=Ru2Hf&S#&;x(286l`*muZoU4E# zkM1G5p$_tj5sXY0OQ9VH^Hp;6<8F;(pK>eA0!|o;`s1jUdvnHZ{PjwiNNQenpbhR!Hr^fz=c z4Y?Bbm1Ovifj)W+h`{uT8QfyJ(u+*RePf)W2JS?@J|Onpp5bZip18`nDL8SAN-NW# zFM25%?-8DzQ9$FTme_WRd5wt z1y{jUa1~qySHV?q6SFT<^yu3NMbmj5Q=Hl(AuUE6R5AEr%N zFhw(>74WW2Zv~}Yk$W%=i?&RFwL$@Z%K?FbiQP96r`3*qNz1Avp62lrCFB9~^oUX- zd07i}sYo8t(10DEBugSpc}8e@G_+(2_Vb}FO=*|)0s%J_7}AdDIu}LoQXXArq8LCv zsi#$~zy{xesKY#jE>)Q~r7n#~l~%;p=oPfyDN0tgq?YJuD8Q=qS0pLIW{7LXo#yHO ztgE~mtNuo5bGcGlU@IH`_Ff~rs^WWo?dksOrBz7x5XN_MugyJTta4asgpl}%k0vO@XRy;IJ_`%U1t9^&%~i)7DXzD_CEFh_|q?OeX*D5XsR%{0lJ6NRkdF-N%?m)H#sWL30o50Xi z5ouI4)KwHZq#ctn8krkK18TzE*g10AOk%sPx8y5 z-W82v>e!ECRi)=0sYRly5gM~9Z_^SBd9Ri^TVWI!tBfXto1@kk7Gs04&d?YJW0SE( zXn4x!{QnoI?K+FOTbr{T#x7%zvCrVYR0nC#srzgvK!RJ4nhrV?phVM!^u=kFTU?hP Lo!_aGembpR^Eh7C diff --git a/bgArrayLib/bpm.py b/bgArrayLib/bpm.py index a48aa7a..6e1f3f4 100644 --- a/bgArrayLib/bpm.py +++ b/bgArrayLib/bpm.py @@ -6,8 +6,8 @@ def mt2gt(mt, tpb_a, bpm_a): return round(mt / tpb_a / bpm_a * 60) -def get(mf): - mid = mido.MidiFile(mf) +def get(mid:mido.MidiFile): + # mid = mido.MidiFile(mf) long = mid.length tpb = mid.ticks_per_beat bpm = 20 @@ -45,13 +45,13 @@ def get(mf): return list(last_dic.keys())[0] -def compute(mf): - mid = mido.MidiFile(mf) +def compute(mid:mido.MidiFile): answer = 60000000/mid.ticks_per_beat print(answer) return answer if __name__ == '__main__': - get(r"C:\Users\lc\Documents\MuseScore3\乐谱\乐谱\Bad style - Time back.mid") - compute(r"C:\Users\lc\Documents\MuseScore3\乐谱\乐谱\Bad style - Time back.mid") + mid = mido.MidiFile(r"C:\Users\lc\Documents\MuseScore3\乐谱\乐谱\Bad style - Time back.mid") + get(mid) + compute(mid) diff --git a/bgArrayLib/reader.py b/bgArrayLib/reader.py index 86df2bb..514fbf6 100644 --- a/bgArrayLib/reader.py +++ b/bgArrayLib/reader.py @@ -40,11 +40,11 @@ def midiNewReader(midfile: str): isPercussion = False try: mid = mido.MidiFile(midfile) - except FileNotFoundError: + except Exception: log("找不到文件或无法读取文件" + midfile) return False tpb = mid.ticks_per_beat - bpm = get(midfile) + bpm = get(mid) # 解析 # def loadMidi(track1): for track in mid.tracks: @@ -127,12 +127,13 @@ def midiClassReader(midfile: str): Notes = [] tracks = [] try: - mid = mido.MidiFile(midfile) - except FileNotFoundError: + mid = mido.MidiFile(filename=midfile,clip=True) + except Exception: log("找不到文件或无法读取文件" + midfile) return False + log("midi已经载入了。") tpb = mid.ticks_per_beat - bpm = get(midfile) + bpm = get(mid) for track in mid.tracks: overallTime = 0.0 instrument = 0 diff --git a/languages/__pycache__/zhCN.cpython-38.pyc b/languages/__pycache__/zhCN.cpython-38.pyc index 00c005ffdc3cc3b72e5b54aeb031232ddc892742..5aa63607473bc72145a208f707a62748b03e9c01 100644 GIT binary patch delta 206 zcmX?aKF>lsl$V!_0SG+5{78Hv$H4Fy#6bpgfE))PE_T?cZOO=!GJDSKD29|d!3>&n zH|H^K6ZI%{1j@eO(+EK?_RoB>V^wZuO6Id^?N4@Zd$E4^)Bb5scJw~k)%Jc*4^Sfi z#q!0^=1q9kwe;nbnQ(oYvp1`Wb27`nTn;qNPm}Q$Pmrsli=&f|Ylv$^$V!Hyxj^xv gxsyGmeAp})85o$DCLffN-@Hpoh>?|%se$1F0G=sM(EtDd delta 127 zcmbPdao$`zl$V!_0SHpXe^3!Cz#S`S}=;G+);~L@`5wen@XbwV7LeX(|{b) diff --git a/msctspt/__pycache__/threadOpera.cpython-38.pyc b/msctspt/__pycache__/threadOpera.cpython-38.pyc index bb6eaa47abd1212432df6d13e58545e26441c244..1cd248cbf90d59f2e551d2e21851cfc2d10a327d 100644 GIT binary patch delta 90 zcmeC<=;h!G<>lpK0D?ufrHSj9H}c(KWaOOunz4=;PoE<>lpK0D=I|uZcA*8~N@qGICFT&Dh2$Fu91SmzygrF{d=uwWuh+Xfh|W mJfrYrP39?r96$}lAcBLDg^7=qgL(2fW)p5!kSG&Klo diff --git a/msctspt/__pycache__/transfer.cpython-38.pyc b/msctspt/__pycache__/transfer.cpython-38.pyc index c3af6c17b74761c1961a3ccb08d5c52bd54e82ea..befb6f41ba75c59bf80c685fc0d4a9c4d1916192 100644 GIT binary patch delta 3539 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 Vua54m-Vtn*@TK0S2l diff --git a/msctspt/bugReporter.py b/msctspt/bugReporter.py index 278fa54..d0b4f11 100644 --- a/msctspt/bugReporter.py +++ b/msctspt/bugReporter.py @@ -97,7 +97,7 @@ class version: ) """当前所需库,有一些是开发用的,用户不需要安装""" - version = ('0.1.5', 'Delta',) + version = ('0.1.5.1', 'Delta',) """当前版本""" def __init__(self) -> None: diff --git a/msctspt/threadOpera.py b/msctspt/threadOpera.py index 9a12f20..acddc2c 100644 --- a/msctspt/threadOpera.py +++ b/msctspt/threadOpera.py @@ -1,35 +1,22 @@ -# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日 -# 统计:致命(三级)错误:0个;警告(二级)错误:0个;语法(一级)错误:9个--未解决1个 + import threading class NewThread(threading.Thread): - """新建一个进程来运行函数,函数运行完毕后可以使用.getResult方法获取其返回值""" - + '''新建一个进程来运行函数,函数运行完毕后可以使用.getResult方法获取其返回值''' def __init__(self, func, args=()): super(NewThread, self).__init__() self.func = func self.args = args - def run(self): - try: - self.result = self.func(*self.args) - except OSError: - pass - + self.result = self.func(*self.args) def getResult(self): threading.Thread.join(self) # 等待线程执行完毕 try: - try: - try: - return self.result - except OSError: - return None - except IOError: - return None - except ValueError: + return self.result + except Exception: return None # @@ -37,4 +24,4 @@ class NewThread(threading.Thread): # 版权声明:上面的类NewThread修改自CSDN博主「星火燎愿」的原创文章中的内容,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 # 原文链接:https://blog.csdn.net/xpt211314/article/details/109543014 # ———————————————— -# +# \ No newline at end of file diff --git a/resources/MSCT Dev Log.txt b/resources/MSCT Dev Log.txt index 7929048..539408d 100644 --- a/resources/MSCT Dev Log.txt +++ b/resources/MSCT Dev Log.txt @@ -35,6 +35,11 @@ Copyright © W-YI 2022 新更新日志 + + Delta 0.1.5.1 +2022 2 1 农历大年初一 +1.修复了部分midi文件无法读取的错误 + Delta 0.1.5 2022 2 1 农历大年初一 1.修复所有用户在使用过程中可遇到的bug diff --git a/测试用/最后-林肯公园(In The End - Linkin Pa_爱给网_aigei_com.mid b/测试用/最后-林肯公园(In The End - Linkin Pa_爱给网_aigei_com.mid deleted file mode 100644 index 38403d741dcd1ecb3a0374a7ea33c5048e0b2714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24207 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 F{|8Nd<6Qs%