-- title: pcm play test -- author: mieki256 -- desc: pcm play. sampling rate 1920Hz. sample length 32 * N. -- script: lua -- Input file : crt_hey_1920hz_672sample.wav -- Channel : 1 -- Sampling rate : 1920 Hz -- Duration : 350.000000 msec -- Sample length : 672 point -- N : 21 pcmtbl_hey={ "88787777878888776776988978667599", "896855969a884684ab9937829c9916c3", "7b8a12bca60af4586bb04ca9815ea772", "5d97935b58c57738b986556c87a35a48", "c786656c78c468389a96835b59b79666", "5b78b477498a96945a5ab795566b88a4", "67499995765a79a576598996756a78a5", "77599895577a97855979b5674ab79438", "8bb4555cb7834b9aa3497bc4575bc575", "4bb7843ab8943aa9a3399aa4388aa448", "8aa448999449a8844ab7755bb5567bb3", "489a834bb7468ba549b7658a845aa747", "a9757a945aa748b76699559a758a747b", "8569847a8679758a7589649a669946a9", "57985896797688669868866886896688", "67977976896697797689669878768867", "87897788787698788689678788787788", "67768878878878777788787788787777", "87887787787777778788777788777777", "77777777777777777777777777777777", "77777777777777777777777777777777", } -- Input file : crt_ooo_1920hz_512sample.wav -- Channel : 1 -- Sampling rate : 1920 Hz -- Duration : 267.000000 msec -- Sample length : 512 point -- N : 16 pcmtbl_ooo={ "7777768856987658973ab56b929b62bb", "24ca17c72ac35ca07d70ae31be12dc05", "ea07f619e33ac15c817e429d25ca37d4", "69918c33ac06c929d35ab08c609d13bd", "06d918e44ac17b808d32ae05cb07e738", "d26a907d439d16ca38d469a18b439c17", "c938c37a719c25ab28c579819b25ba39", "b38a529c26c759928c35ba57a37a45a9", "67847a47b778549b57a47a36b867659a", "66857a67a57957a67847b77846b87755", "a96657a87747a76857a6698784898655", "9a7748a56a86649b7559a56a9636b956", "9943ac657a728d846a827c846a638b75", "7a559867985776888778668679777866", "87788678677688777877777777777777", "77777777777777777777777777777777", } -- Input file : hello_1920hz_992sample.wav -- Channel : 1 -- Sampling rate : 1920 Hz -- Duration : 517.000000 msec -- Sample length : 992 point -- N : 31 pcmtbl_hello={ "8888888888888798987698a95589aa46", "7aaa387aa93a98c779c3c5a8b1979b54", "4c7e094e9c2aa8e587f1d3a8b0778c35", "3e8e096db939c5d488c0a6aa637b9b18", "7b9a3aa6a879a2a7a964899a29899a3b", "a5a98a92a9a96399a937999a2a989a5a", "95a98982a8a863a8a946999a29888b4b", "859a7a93a8a891a8b9727aab276cab0a", "7ca93bb6c579e1c3a9b0879c543c8e09", "2e9c1b7ad778d3e2a7e0c2a982598d28", "2e7e0b4daa4aa7d588d2d3a8b2968b74", "698d565b9c566aba5679c96588c86589", "c85689b8567ab9657aaa74798b94885b", "a6a74a98c7567aa984796ba5a74989b8", "747a7bb5a7398aa8847a5bb6b7567b8a", "a498498aa894894aa8a7757a5ba6a756", "7b7ab5a7488a99a4884a99b7757a6bb5", "a7488aa884796ba5a74999b7567aaa84", "797b94885b96975b97975a96a77aa4a6", "8a94888b475b9c4a98d6a893879c3a87", "c7a9456a9b8982888b6a93889a799288", "9a99637a9a993799a799789378998948", "98969988568aa78988657aa888886689", "98898957889789986896889998887689", "98898968978898888867988788888968", "97889888887886889888888877888889", "88887888888888887887888888888887", "88888988788788888888788788888888", "77888888887887888888887788888888", "78778888888878878888888888888888", "88888888888888888888888888888888", } -- Input file : ohit_mono_1920hz_960sample.wav -- Channel : 1 -- Sampling rate : 1920 Hz -- Duration : 500.000000 msec -- Sample length : 960 point -- N : 30 pcmtbl_ohit={ "7777666965dc239557a4ad44606c9789", "47649956898a507779ab338496597869", "9665768a6a53a48848696786748a6867", "8467b8595566b7668768368798a75666", "649b77484767c5897666367a99964498", "87587579754787878755985768668994", "669977665489985847c55597479b537c", "b23b8229ea26b942787639d82ae403cc", "306d936db419c5069964ca74798419c5", "08e86699157c7267c468795994668458", "8a7a956458466996d94579556795869a", "39a84485669949a8764874669968a38a", "683476998765dc541587ab4565ea3b33", "84a95874a67f4266877874998b1476a7", "7726a8ab3781976748a58a8843686876", "76ad6643867a5567c96756758a4594a9", "5c5575a637758aab4367864a74b99737", "76677765987959926984589769876678", "65987579757a75459877778689465796", "688679874685758a6778866866678677", "78668857669578885786578578787778", "76677578767787777756887688776777", "67867777787867766678777777767667", "77777777767767777777776777767777", "77777776777777777787777777777777", "77777777777777777777777777777777", "77777777777777777777777777777777", "77777777777777777777777777777777", "77777777777777777777777777777777", "77777777777777777777777777777777", } sfxparam={ -- volume,wave,arpeggio,pitch : 2byte x 30 0x80,0xf0,0x90,0x00,0xa0,0x00,0xb0,0x00, 0xc0,0x00,0xd0,0x00,0xe0,0x00,0xf0,0x00, 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00, 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00, 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00, 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00, 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00, 0x70,0x00,0x70,0x00, -- octave,pitch16x,speed,reverse,note,temp : 2byte 0x01,0x0b, -- loop start,loop size : 1byte x 4 0x80,0x00,0x00,0x10, } WAVEADDR=0x0ffe4 SFXADDR=0x100e4 SFX_ID=1 function dump_sfx_param(id) local adrs=SFXADDR+66*id local s="" for i=0,65 do s=s..string.format("0x%02x,",peek(adrs+i)) end trace("sfx param "..id) trace(s) end -- dump_sfx_param(0) -- dump_sfx_param(1) function set_sfx_param(id) local adrs=SFXADDR+66*id for i=0,65 do poke(adrs+i,sfxparam[i+1]) end sync(1<<3,0,true) -- sync SFX end PcmObj={} PcmObj.new = function(tbl,x,y,name) local o={ tbl=tbl,x=x,y=y,name=name, step=0,t=0 } return setmetatable(o,{__index=PcmObj}) end PcmObj.writeall=function(self) local a=WAVEADDR + 16 * 8 for wi=0,7 do local s=self.tbl[wi+1] for i=0,15 do poke(a,tonumber(string.sub(s,i*2+1,i*2+2),16)) a=a+1 end end sync(1<<3,0,true) -- sync SFX end PcmObj.update = function(self) if self.step==0 then return end local l=1 if self.step==1 then l=4 self.step=2 end for j=1,l do local a=WAVEADDR+16*(self.t % 8 + 8) local s=self.tbl[self.t + 1] for i=0,15 do poke(a,tonumber(string.sub(s,i*2+1,i*2+2),16)) a=a+1 end self.t=self.t+1 if self.t>=#self.tbl then self.step=0 self.t=0 break end end end PcmObj.draw = function(self) if self.step>0 then print("Play "..self.name,self.x,self.y) end end PcmObj.play = function(self) self.step=1 self.t=0 sfx(SFX_ID,"B-2",#self.tbl,0) end tbls={ {tbl=pcmtbl_hello,x=0,y=12*0,name="hello"}, {tbl=pcmtbl_hey,x=0,y=12*1,name="hey"}, {tbl=pcmtbl_ooo,x=0,y=12*2,name="ooo"}, {tbl=pcmtbl_ohit,x=0,y=12*3,name="ohit"}, } set_sfx_param(SFX_ID) pcmobjs={} for i,d in ipairs(tbls) do table.insert(pcmobjs,PcmObj.new(d.tbl, d.x, d.y, d.name)) end pcmobjs[2]:writeall() keytbls={ {key=26,kind=1}, -- Z key {key=24,kind=2}, -- X key {key=3,kind=3}, -- V key {key=22,kind=4}, -- C key } function TIC() for i,d in ipairs(keytbls) do if keyp(d.key) then pcmobjs[d.kind]:play() end end for i,o in ipairs(pcmobjs) do o:update() end cls(0) print("PCM test",12,100) print("Play : Z X C V key",12,120) for i,o in ipairs(pcmobjs) do o:draw() end end