python編寫的midi制作軟件_第1頁
python編寫的midi制作軟件_第2頁
python編寫的midi制作軟件_第3頁
python編寫的midi制作軟件_第4頁
python編寫的midi制作軟件_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、心之所向,所向披靡用Python編寫的Mid音頻制作軟件源代碼如下:#Midi.py:#ThisfilecanbeusedtosimplyturnMidiTxtfiletoMidfile.#Author:loupen#Date:2010-7-20#Ifyouwanttouseit,youmustwritetheMidiTxtfilebysomerules.#Readthedocumenttolearnmore.fromstructimport*#ThreeglobalvariablesTrackBegin=TrackEnd=ToneFore=1#writetheMidiHeaderdefMid

2、iHeader(buffer):buffer.write(pack('ccccBBBB','M',T,'h','d',0,0Q6)defmsg(buffer,tracks,deltatime):ifdeltatime>0xff:buffer.write(pack('BBBBBB',0,1,0,tracks,deltatime>>8,deltatime&0xff)else:buffer.write(pack('BBBBBB',0,1,0,tracks,0,deltatime)

3、returnbuffer.tell()-3#writetheheaderandtailoftracksdefTrackHeader(buffer,list):buffer.write(pack('cccc','M','r,'r','k')list.append(buffer.tell()buffer.write(pack('i',0)defTrackTail(buffer,list):buffer.write(pack('BBBB',0,0xff,0x2f,0)list.append(buf

4、fer.tell()#Setthepulse,instrumentandcontrollerdefSetSpeed(buffer,time):time=60.0/int(time)time=int(time*(10*6)buffer.write(pack('BBBBBBB',0,0xff,0x51,3,time>>16,(time&0xff00)>>8,time&0xff)return1#Thewords,FenZiandFenMu,arefromChinese.OdefSetPulse(buffer,FenZi,FenMu):FenZi

5、=int(FenZi)FenMu=int(FenMu)ifFenMu=2:FenMu=1elifFenMu=4:FenMu=2elifFenMu=8:FenMu=3else:return0buffer.write(pack('BBBBBBBB',0,0xff,0x58,4,int(FenZi),int(FenMu),0x18,0x08)return1defSetTone(buffer):buffer.write(pack('BBBBBB',0,0xff,0x59,2,0,0)return1defSetNumOrder(buffer,time):buffer.wr

6、ite(pack('BBBB',time>>24,(time&0xff0000)>>16,(time&0xff00)>>8,time&0xff)defSetTrackNum(buffer,ad,n):buffer.seek(ad)buffer.write(pack('B',n+1)defSetInstrument(buffer,trackNum,ITNum):trackNum=int(trackNum)trackNum+=0xc0buffer.write(pack('BBB',0,tra

7、ckNum,ITNum)defSetController(buffer,trackNum,CtrNum):trackNum=int(trackNum)trackNum+=0xb0buffer.write(pack('BBBB',0,trackNum,11,CtrNum)buffer.write(pack('BBB',0,0xa,0x40)defSetVolume(buffer,trackNum,S):trackNum=int(trackNum)trackNum+=0xb0ifS='H':buffer.write(pack('BBBB

8、9;,0,trackNum,7,0x7f)buffer.write(pack('BBB',0,0xa,0x40)ifS='L':buffer.write(pack('BBBB',0,trackNum,7,80)buffer.write(pack('BBB',0,0xa,0x40)defSetChanYin(buffer,trackNum):trackNum=int(trackNum)trackNum+=0xb0buffer.write(pack('BBBB',0,trackNum,1,127)#imitatethe

9、functionofbufferinCdefreadNext(buffer):whileTrue:a=buffer.read(1)ifain'',''n':passelse:returna#defseekFore(buffer,offset):#buffer.seek(buffer.tell()-offset)#Usethefollowingtwofunctionstodealwiththeeventsdefliftup(buffer,time,note):time=int(time)iftime>=128:buffer.write(pack(&#

10、39;BBBB',0x80|(time>>7),0x7f&time,note,0)else:buffer.write(pack('BBB',time,note,0)defpressdown(buffer,num,dict,mark,note,force):globalToneForea=dictnote+(5+mark)*12ifToneFore=1:num+=0x90buffer.write(pack('BBBB',0,num,a,force)else:buffer.write(pack('BBB',0,a,forc

11、e)ToneFore=adefmain(lp):track=1;deltatime=120speed=''temp=0begin=0;mark=0;time=deltatimeTrackNum=0,1,2,3;ITNum=lp;CtrNum=0x7fdict='0':0,'1':0,2:2,'3':4,'4':5,5:7,'6':9,7:11pTxt=open(r'.1.txt')s=".%d.mid"%lp0pMid=open(s,'wb')if

12、pTxt.read(6)!="<MIDI>”:print"ThisisnotMidiTxtfile!"pMid.close()pTxt.close()return0whileTrue:ifpTxt.read(1)='|':FenMu=pTxt.readpTxt.seek(pTxt.tell()-3)FenZi=pTxt.read(1)n=0whilen<8:ifreadNext(pTxt)='<':breakn+=1ifn=8:print"ThisisnotMidiTxtfile!"pMi

13、d.close()pTxt.close()return0breakn=0a=readNext(pTxt)whilea!='>':speed+=aa=readNext(pTxt)MidiHeader(pMid)track=msg(pMid,0,deltatime)TrackHeader(pMid,TrackBegin)SetPulse(pMid,FenZi,FenMu)SetTone(pMid)SetSpeed(pMid,speed)TrackTail(pMid,TrackEnd)pMid.seek(TrackBegin0)SetNumOrder(pMid,TrackEnd

14、0-TrackBegin0-4)pMid.seek(TrackEnd0)a=readNext(pTxt)whilea='':pTxt.readline()TrackHeader(pMid,TrackBegin)SetInstrument(pMid,TrackNumn,ITNumn)SetController(pMid,TrackNumn,CtrNum)a=readNext(pTxt)n+=1whileTrue:ifa='|':a=readNext(pTxt)ifa='|':a=readNext(pTxt)ifain'','

15、':globalToneForeToneFore=-1;breakelifa='":mark+=1a=readNext(pTxt)elifa='.':ifbegin=0:mark-=1elifbegin=1:time*=3.0/2liftup(pMid,time,ToneFore)begin=0elifbegin=2:a=pTxt.readifain'','口:ifa='|':print"'|'istooclosetoNumber!n",pTxt.tell(),pTxt.rea

16、d(1)time*=3.0/2time+=templiftup(pMid,time,ToneFore)begin=0;temp=0mark=0else:continuea=readNext(pTxt)elifa='Y':time=deltatime/2a=pTxt.readifain''J':ifa='|':print"邛'istooclosetoNumber!n",pTxt.tell(),pTxt.read(1)ifbegin=2:time+=templiftup(pMid,time,ToneFore)beg

17、in=0;temp=0mark=0a=readNext(pTxt)elifa='E':time=deltatime/4a=pTxt.readifain'','|':ifa='|':print"'|'istooclosetoNumber!n",pTxt.tell(),pTxt.read(1)ifbegin=2:time+=templiftup(pMid,time,ToneFore)begin=0;temp=0mark=0a=readNext(pTxt)elifa='S':time=

18、deltatime/8a=pTxt.readifain''J':ifa='|':print"邛'istooclosetoNumber!n",pTxt.tell(),pTxt.read(1)ifbegin=2:time+=templiftup(pMid,time,ToneFore)begin=0;temp=0mark=0a=readNext(pTxt)elif7'>=a>='0':ifbegin=0:ifa='0':force=0else:force=100pressdown(

19、pMid,TrackNumn-1,dict,mark,a,force)time=deltatimemark=0;begin=1a=pTxt.readifain'','|':ifa='|':print"'|'istooclosetoNumber!n",pTxt.tell(),pTxt.read(1)liftup(pMid,time,ToneFore)begin=0a=readNext(pTxt)elifbegin=2:time=deltatimea=pTxt.readifain'','|&

20、#39;:ifa='|':print"'|'istooclosetoNumber!n",pTxt.tell(),pTxt.read(1)time+=templiftup(pMid,time,ToneFore)begin=0;temp=0mark=0a=readNext(pTxt)elifa='A':begin=2temp+=timea=readNext(pTxt)elifa='-':a=pTxt.readifain'','|':ifa='|':print"

21、;'|'istooclosetoNumber!n",pTxt.tell(),pTxt.read(1)time+=templiftup(pMid,time,ToneFore)begin=0;temp=0mark=0a=readNext(pTxt)elifa='*':SetVolume(pMid,TrackNumn-1,'H')ToneFore=1a=readNext(pTxt)elifa=',':SetVolume(pMid,TrackNumn-1,'L')ToneFore=1a=readNext(pTxt

22、)elifa='W:SetChanYin(pMid,TrackNumn-1)ToneFore=1a=readNext(pTxt)else:print"ThisisnotMidiTxtfile!"pMid.close()pTxt.close()return0TrackTail(pMid,TrackEnd)pMid.seek(TrackBeginn)SetNumOrder(pMid,TrackEndn-TrackBeginn-4)pMid.seek(TrackEndn)SetTrackNum(pMid,track,n)pMid.close()pTxt.close()pr

23、int"nOK!-LOUPEN”以上文件存為midi.py。#test.py:importmidii=1z=j=int(input("Howmanytracks?")whilei<=j:tmp=input("TheInstrumentnumberis:")z.append(int(tmp)i+=1midi.main(z)以上文件存為test.py。以下為mid文本范例【賽馬】:<MIDI><2|4><120>1|6.3E5E|6.3E5E|6.3E5E|6.3E5E|6E5E3E5E6E5E3E5E|6

24、E5E3E5E6E5E3E5E|6Y5E6E6Y5E6E|6Y5E6E6Y5E6E|.6Y3Y1Y.6Y|3Y6Y5Y3Y|2E3E2E1E2E3E2E1E|2E3E2E1E2E3E2E1E|.6Y3Y1Y.6Y|3Y6Y5Y3Y|2E3E2E1E2E3E2E1E|2E3E2E1E2E3E2E1E|2.6E1E|2.6E1E|2.6E1E|2.6E1E|2E3E2E1E2E3E2E1E|2E3E2E1E2E3E2E1E|2Y1E2E2Y1E2E|2Y1E2E2Y1E2E|.66|53|25|31|.66|53|25|31|.6.1E2E|.6.1E2E|.6.1E2E|.6.1E2E|.6E2

25、E1E2E.6E2E1E2E|.6E2E1E2E.6E2E1E2E|.6.6Y.6Y|.6A.6|36Y.'1E|5.3Y|5Y6Y'1Y.'3E|6A6|36Y.'1E|55Y3Y|2Y3Y6Y5Y|3A3|56Y.'1E|1.6Y|2Y3Y6Y5Y|33Y2Y|1Y.2E3Y5Y|6.6|2Y3Y1Y.3E|.6A.6|3Y3E3E6Y'1Y|5Y5E5E5Y3Y|5Y5E6E'1Y'2E'1E|6Y6E6E6Y.6Y|3Y3E3E6Y'1Y|5Y5E5E5Y3Y|2Y2E3E6Y5Y|3Y3E5E3Y.6Y|

26、5Y5E5E6Y'1Y|1Y1E1E1Y.6Y|2Y2E3E6Y5Y|3Y3E5E3Y2Y|1E.6E1E2E3E2E3E5E|6E5E6E'1E5E6E5E3E|2E3E2E1E2E1E.6E1E|.66|0Y.6Y1Y3Y|0Y.6Y1Y3Y|0Y2Y.7Y2Y|.6Y3Y1Y3Y|0Y.6Y1Y3Y|0Y.6Y1Y3Y|0Y2Y.7Y2Y|.6Y3Y1Y3Y|0Y.6Y1Y3Y|0Y.6Y1Y3Y|0Y2Y.7Y2Y|.6Y3Y1Y3Y|0Y5Y3Y2Y|1Y2Y1Y.6|2Y2Y3Y1Y|.6.3E5E|.6.3E5E|.6.3E5E|.6.3E5E|.6.1E2E|3E2E3E5E6E'1E6E5E|3E2E3E5E6E'1E6E5E|3E5E3E2E1Y3Y|.6.1E2E|3E2E3E5E6E'1E6E5E|3E2E3E5E6E'1E6E5E|3E5E3E2E1Y3Y|.6.3E6E|'1Y6Y6Y'3Y|'1Y6Y6Y3Y|'1Y6Y6Y'3Y|'1Y6Y6Y3Y|1Y.6E1E2Y1E2E|3Y2E3E5Y3E5E|5Y3E5E6Y5E6E|'1Y6E'1E'2Y'1E'2E|'3E'2E'1E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論