




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電工電子技術(shù) 課件全套 潘學(xué)海 1 手電筒電路的連接與測(cè)試 -16.流水燈電路的整體安裝與調(diào)試
- 計(jì)算機(jī)安全技術(shù)-4操作系統(tǒng)安全
- SCI論文寫作與投稿 第2版-課件匯 0-課程介紹 -7 SCI論文摘要寫作
- 婦產(chǎn)科圍手術(shù)期護(hù)理講課
- 家具店長(zhǎng)培訓(xùn)
- 2025屆上海崇明區(qū)高考二模高考數(shù)學(xué)試卷試題(含答案詳解)
- 廣東省韶關(guān)市樂昌市2025屆高三下學(xué)期2月模擬演練測(cè)驗(yàn)語文試題(含答案)
- 內(nèi)科病房住院制度管理
- 基層管理者品質(zhì)培訓(xùn)
- 護(hù)理人才培養(yǎng)工程申請(qǐng)匯報(bào)
- 山西安全資料地標(biāo)表格
- 心理學(xué)專業(yè)英語總結(jié)(完整)
- 新人教版七年級(jí)初一數(shù)學(xué)下冊(cè)第一二單元測(cè)試卷
- 白內(nèi)障手術(shù)操作規(guī)范及質(zhì)量控制標(biāo)準(zhǔn)(2017版)
- 《電子商務(wù)法律法規(guī)》課程標(biāo)準(zhǔn)
- 淡化海砂項(xiàng)目規(guī)劃實(shí)施方案(76頁)
- 中藥飲片儲(chǔ)存與養(yǎng)護(hù)
- 聲屏障施工方案、方法與技術(shù)措施
- 蠟療技術(shù)PPT課件
- 友商S6實(shí)施五部曲銷售流程倉庫管理流
- 2021年北京專升本英語真題及答案
評(píng)論
0/150
提交評(píng)論