From 82591aa870424799525fa612b40ef8e9272e3339 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sat, 23 Nov 2024 20:52:16 -0500 Subject: [PATCH] Add sampling capability to square wave channels --- Tetris.nes | Bin 0 -> 49168 bytes jsnes/src/index.js | 1 + jsnes/src/papu.js | 33 ++++++++++++++++++++++++---- jsnes/src/sample.js | 52 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 +++-- samples/YEARGH.WAV | Bin 0 -> 8503 bytes samples/meow1.wav | Bin 0 -> 82598 bytes src/App.svelte | 19 +++++++++++++--- src/lib/NES.svelte | 12 +++++++--- src/lib/sampload.js | 8 +++++++ yarn.lock | 2 +- 11 files changed, 119 insertions(+), 13 deletions(-) create mode 100644 Tetris.nes create mode 100644 jsnes/src/sample.js create mode 100644 samples/YEARGH.WAV create mode 100644 samples/meow1.wav create mode 100644 src/lib/sampload.js diff --git a/Tetris.nes b/Tetris.nes new file mode 100644 index 0000000000000000000000000000000000000000..8336a66cb483d0500f3163fd1750063456be4ff0 GIT binary patch literal 49168 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 literal 0 HcmV?d00001 diff --git a/jsnes/src/index.js b/jsnes/src/index.js index b69b1ff..c8ef3a9 100644 --- a/jsnes/src/index.js +++ b/jsnes/src/index.js @@ -1,4 +1,5 @@ module.exports = { Controller: require("./controller"), NES: require("./nes"), + Sample: require("./sample"), }; diff --git a/jsnes/src/papu.js b/jsnes/src/papu.js index 2579eb8..318a717 100644 --- a/jsnes/src/papu.js +++ b/jsnes/src/papu.js @@ -316,23 +316,31 @@ PAPU.prototype = { } // Clock Square channel 1 Prog timer: + var square1sample = this.nes.opts[square1.sampleName]; square1.progTimerCount -= nCycles; if (square1.progTimerCount <= 0) { square1.progTimerCount += (square1.progTimerMax + 1) << 1; + if (square1sample) { square1sample.advance(4); } square1.squareCounter++; square1.squareCounter &= 0x7; square1.updateSampleValue(); + } else if (square1sample) { + square1.updateSampleValue(); } // Clock Square channel 2 Prog timer: + var square2sample = this.nes.opts[square2.sampleName]; square2.progTimerCount -= nCycles; if (square2.progTimerCount <= 0) { square2.progTimerCount += (square2.progTimerMax + 1) << 1; + if (square2sample) { square2sample.advance(4); } square2.squareCounter++; square2.squareCounter &= 0x7; square2.updateSampleValue(); + } else if (square2sample) { + square2.updateSampleValue(); } // Clock noise channel Prog timer: @@ -499,6 +507,9 @@ PAPU.prototype = { this.noise.accValue = smpNoise >> 4; this.noise.accCount = 1; + var extra = 0; + if (this.nes.opts.sampleSquare1) { this.smpSquare1 = 0; extra += this.square1.sampleValue; } + if (this.nes.opts.sampleSquare2) { this.smpSquare2 = 0; extra += this.square2.sampleValue; } // Stereo sound. // Left channel: @@ -560,7 +571,7 @@ PAPU.prototype = { } if (this.nes.opts.onAudioSample) { - this.nes.opts.onAudioSample(sampleValueL / 32768, sampleValueR / 32768); + this.nes.opts.onAudioSample((sampleValueL / 32768) + extra, (sampleValueR / 32768) + extra); } // Reset sampled values: @@ -1156,6 +1167,7 @@ ChannelNoise.prototype = { var ChannelSquare = function (papu, square1) { this.papu = papu; + this.sampleName = `sampleSquare${square1 ? 1 : 2}`; // prettier-ignore this.dutyLookup = [ @@ -1292,6 +1304,7 @@ ChannelSquare.prototype = { }, updateSampleValue: function () { + var sample = this.papu.nes.opts[this.sampleName]; if (this.isEnabled && this.lengthCounter > 0 && this.progTimerMax > 7) { if ( this.sweepMode === 0 && @@ -1299,13 +1312,25 @@ ChannelSquare.prototype = { ) { //if (this.sweepCarry) { this.sampleValue = 0; + if (sample) { sample.reset(); } } else { - this.sampleValue = - this.masterVolume * - this.dutyLookup[(this.dutyMode << 3) + this.squareCounter]; + if (sample) { + if (this.envVolume === 0 || this.masterVolume === 0) { + this.sampleValue = 0; + sample.reset(); + } else { + this.sampleValue = sample.sample(this.progTimerCount, (this.progTimerMax + 1) << 1, this.masterVolume); + // console.log("sampled value:", this.sampleValue); + } + } else { + this.sampleValue = + this.masterVolume * + this.dutyLookup[(this.dutyMode << 3) + this.squareCounter]; + } } } else { this.sampleValue = 0; + if (sample) { sample.reset(); } } }, diff --git a/jsnes/src/sample.js b/jsnes/src/sample.js new file mode 100644 index 0000000..a881eaf --- /dev/null +++ b/jsnes/src/sample.js @@ -0,0 +1,52 @@ + +var Sample = function (audiobuffer, toneHz, gain) { + var samples = new Float32Array(audiobuffer.getChannelData(0)); + for (var chan = 1; chan < audiobuffer.numberOfChannels; chan ++) { + var channel_samples = audiobuffer.getChannelData(chan); + for (var i = 0; i < samples.length; i ++) { + samples[i] += channel_samples[i] + 1; + } + } + gain = (gain ? gain : 1) / (audiobuffer.numberOfChannels * 2); + for (i = 0; i < samples.length; i ++) { + samples[i] = samples[i] * gain; + } + + this.samples = samples; + this.index = 0; + this.increment = audiobuffer.sampleRate / toneHz; + this.prevMaxTimer = null; + this.clocksPerPeriod = 1; +} + +Sample.prototype = { + clone: function() { + var copy = Object.create(this); + copy.index = 0; + return copy; + }, + advance: function(clocksPerPeriod) { + this.clocksPerPeriod = clocksPerPeriod; + this.index += this.increment / clocksPerPeriod; + }, + reset: function() { this.index = 0; }, + sample: function(timer, maxTimer, volume) { + if (maxTimer !== this.prevMaxTimer) { + if (this.prevMaxTimer) { + var semitoneInterval = 1.059463; + const semitoneUp = this.prevMaxTimer * semitoneInterval; + const semitoneDown = this.prevMaxTimer / semitoneInterval; + if (maxTimer <= semitoneDown || maxTimer >= semitoneUp) { + this.index = 0; + } + } + this.prevMaxTimer = maxTimer; + } + var index = (this.index + (((this.increment / this.clocksPerPeriod) * (maxTimer - timer)) / maxTimer)) >> 0; + if (index < 0) index = 0; + if (index >= this.samples.length) index = this.samples.length - 1; + return (this.samples[index] * volume); + } +} + +module.exports = Sample; \ No newline at end of file diff --git a/package.json b/package.json index 9ab88c0..97a54cc 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,11 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "rebuild": "cd jsnes && yarn && cd .. && yarn upgrade jsnes && vite --force" }, "dependencies": { - "jsnes": "file:../jsnes" + "jsnes": "file:./jsnes" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^4.0.0", diff --git a/samples/YEARGH.WAV b/samples/YEARGH.WAV new file mode 100644 index 0000000000000000000000000000000000000000..7e6417f70ee33756e7e67dafa9b318f3a02852cb GIT binary patch literal 8503 zcmW-G2T+?=*7loZvvD>~;y8(8JC5zxaol?hHU>=ZAc_D{1QJN7H`IIYT|!+H(F8*D z-is+VI5sZ0*SMuPee-Sh+kDH<{B!5d+_`h-%$)O_Gxt2_$xcp4IQBUJZyAn^b9Yrr}H0jI&=S$iWANF;2oPD&A(6atCfC=)2uLKcI?XH)2M1zT(} zNo59|n8QFZ)MXHjf-F&cTxy%sW)bl8A|jC^CZPFz29qUM@HtGKi&ts!DtIcJj?I;e z=@bTs&7cX?a=y}{6$;fdHe0|WkhNMSUFXuVWKJ!ME0fR(43UT-G@F!qt3k#W3K)d4 zRFVgoW@*tVE$!`ErOBj3mkYS%P_9A1RGGA5o|Ibx*N`*mT9rmo(`0oRHAW7G#VCQW zg>al+!g6JZnonj4$Rr+zB~}QfMwL*h7 z6JyWYhquc~!u}zz-P2M{F6RqNQ%YrA2;O1lift|h4sY?GbEGX=te~+$K$Yv{SOkkj zAW?ZLnOI{t%N06FX%63tOk*{>nUdxpeI;*0vc`asF{Ez zBeQbh2$ojwY;Sc`IaKtDmj`UB@D^#~#>CnN)x zQJ|5E>)NcQfQ!szoDJd2@^TfEm#dXSmuyA3<)z87*%Y->*)rTz<*|uL(7ixHm4E@8Nepy1-~+)cP+Wl?-b0 zd}p<#wLw_28&Fn%a;|RVYyZf_#f!pnL2*Ph7=s0KgGz0K$8ECnQH=CZqK;n1?OYsl zT6?mqgXvS!byd(|Lu*x5fL6MUvhdx7)0NCIKWo1Cx^i75JP=S9ga) z!7u#)kZ5+s3$Omx*SYlcia05?B4SglP$5uyd%BGVw|m-4=37}A35S8ap476y^y=l=cBdPA=+mf@ zbZPU#i-+UPO7>UV&YU~_(Z1P-hQ$X<4_hgvnR%HZAy9SC;=-V(vlASVa^}prVmukI zfAA!z5!bb1LlbZ$d~vbm{8YefYZN9Y6qn{g2z&v#qV`G+6kR{A0wHWpMoFbsXR&G( zB7+WDzE(Jp4IlImXOKOQzjNBF15WVqw9-PXxN+r%mn5&l?*afJ`4qMFU#k!L>O0gK zyS62z7b@GAzq{MblUYbn{940B)uRtK3_mgk8k9_{Pxjo5c9F=_FTF_SSsRRK4g0UYF z8}Z@hb7g$h@U5G(M!Jf1ZYuyV9avA}v(-m+OpX$@`;Abh!9RBI+X)_yl#>@5n!3Gw zrB6KAJvz;U;1L{ZQlhwKYNWosfzC_YpIcEvkB8&{ zErJQF{Nn=w0m-924183J0&Colf4|%z;20^M1o`k>nM4g+At6|4wivoRGvCCbhBo}2M_#~91p&ETk(yP>#o->^fuqvvD{bFP; zN+#oQRYp4BSpMFrRt<*8>swjWAS^A??C8Qutx8|p+ioG}H-eb)wefs6~Cg{X~IV$!ZyRxS*6x0&Dv_eH!3P-@z*bdUb>bdVJnlYA;Z1){xt=kcwDPV!gB!Z!i{ zf9&$}fsy|{ZO+OU!LmmG`+bjH z!;0P&`PG|%_|~;o-?m+wab&Oidr|=mPwn{YUl*J76wpVT51l@=-}BQC|MxgBY(_-` zZ>5(ps{9w9El)bgYIW9<@bO7-3K(OZ{O!@4iDN`LhHTyBeQ|STdE%m<5%bQwB~+ZXW9r2>ot(0Y;?F*fII+X@{k74H zfnW_Yb?YvM2=5&1x_rY=FGo}y+!nui_wbK%gSL_LZvM%?XF92PMg4_W(*_hlfI7VK ztq-c6UFfp(Kc7;?esEgFtEf=)|8S>+QZC{o?N|?hXXkr*{r8p~h#gyS93)*xSKy#VIKyC-N&rn+wGhpQd@5+wAGk z8DxpgGxg(>Q71Yl_2j3Aw|vp`%P-Fd#xJOgJ^>C9=_X(Ajn(C9LSZRr<9mlTP`>%; z`jx;^JN7v6TE2j1X*vJupXbFX1=z5+w!R-R`|G9i?U!#FGT#SIi8*p@-L=&lenJi! zd*Xdyi{sX%DgVIZ8R5}44`Zl2sk-g^Z~CNo94713miJI&3xjRGg@w9|cRz$u*#>p> z-Iw#`^0JDQ1MdNaOUo^Rrpt3)(E3kGIUKXK`qHC5Bc=qE_0{gbffgPO2W*2A4HX~0 z1Ca=-Jv9?I+Kfaf40`6^hhdYiW`|wg-a5vfzo!~xcAsbBUY(W&&n-(nviVf+PZxR{ zOzlmyFW-+aNeZ$_rtYh*)6H$Zzv?dRIe0x$~29`&x&tX}a3Q z&4Xd66{lYV&wn>!k~!UtrSI?Od;AWKrg^ds2Zmv=h(p`tSMPP{RMr}I>%7gZkJdwdy)8PGf4P$qk%Xk@?thE(;?F4$%jj>70ya}R z#+!7ify+$=A&Ce=(pyJ6e*1k?EUfC5Zv;Z*lT$u}dw$xKd?Eo}xbJVgn}0m(Wa;Z$ zqk&z;hOuFvdtkJYnjDe{iTfbB`_Yq|jcjv}|MA}vX!WDrzSgOLyf8H`J?+pY&h;nP zX6*u(KV#kYGK0UTwZ41QNr0qhq=bABKJen|Y`~~*mTy~^AZV<2H}{?I;y_FCvX8#L z-TLU>cu#FZ&>Ok#2+ZI&I|r{%SzyIbX!bh*?8@V*4u@xGta!tw99c`N&UocsD;^Ak zm4pME8-H2p^J+cQt^;o#$JKWE77H&p_z{2Q z=SSxmFta~%``&El)cl~kuESJz>U04Keqf*L|F`E8B2cA|e>x;nH!|05G1Oa;(J@GB*6tI&?_XZB=2HEth{GwYuBl$Trm01c z5eXrH)*mr^{rvm(GGfq}urD0v85{SggMq5th-ef&(N0F_pC^=b+BRwE)W3!1g_ zQ~8UBD+81=ml=L87Fp9Z;Zv*Xtk{ga0?5&~@}I0ex~@oKdeBMdvWx>W<8^9_MN$@b z;1eKfdiCk7gRZF4C+-eGxh57G>`tqQSswl=5ZCu&eo#wt1f`j$;+dVnYO%PX#fHgG zEy?&SUe`Z*uMw+s8)>iS~@|Lx-|ngV?r9~73P=6>syb;oR_1209stkyWbHUsipVcU^H0xP(SixG=lYe;iU>26lGqX@>C5FcS zP7O_K_Gm%7-vtuCUcJ^qgPVF?1tH;;!LcSjTIFl8VNbpW5bv%uyNcmMi@KOYDV~Wo zb0OT(-@t(<=k42}=yTRDum!$)J~AEQ_BvEla-B=VL}LV?H;>dUj;;g?$eoUYY>23R zyoydzI4oQ;5l2h}4)^?e<&HfW?iORwNVT`M!6uf9M0S31=yo9G=IZS}e7dyFj))DX z^)7U1&=`ixOFaADd#pRRdR(bR4Z}wGxh#EavyoD1u$k2~c<#F!C38(3=YPK|rmD5^$87f1wR2=Jci=Lgqaak*wG zjerzZ2ZBCMB~4hRC`tJeI5@TXV3ZO{9c(2=9xd;=GHxwiGal4refe&D$I5&V5u+OJ zBqpWOZS8Fm1XHG38|8rC1+WtfOB0ZMOMfjpDMw=N2(rLr0&)HMMNctYCYSNBkpLk3{r3e| zbfReuIDK)=*n=m|@Oao&>LKxX@jkt@An^#=KK+yv@C^ zyfT^uc8wdUF-i1+tHI(dqtB_v%v?`B)(7hfcNi;6E7-y5W+GJORWWGfysbcGuw!8vnrZB6W}F3?+Ll^jAWy)l z%8x>_BiDu3-v9kC$C)&#jEBg#ElkuI5NI(6gDs#M$a_9TUtj%Z47vS`hKD4Hns2`t zsyucYiACDI^pdpoM}q(J^s@BuS7ehyuC1=`>kvkS6v`aFh6(_XKfgb!Jep!0G-9%Z zfh$Ae^jwO}X*JLzfUTz4$Jdq7B&VNI3^fNX_0Xc}b}>y%$MZ`!ex_Ku@}#e*Ohn8l zGu6G<2PL?&vH~#Mt5hnAKi(pE`Jb=-;5|{sS|h5W{>kHp;!T^&{q-hVDM}3eGIQqX z+&JrKw9H*&*P84WQE_aMDiEv}rM(UmUVr{zIq&@}U$vOY)d!YZ(m&5N_bjzQ_W@f6 z{`h)Sx-B_)frG_)TBhm|N7FQ(-a!X4O3b|VVS zDc$=IP~Q(f-{HmNkQi)SW$V&(W8qm)8C5IcYx!dG-YwEsKiqbOyp!Sf3-JQ~r5m=h zJ7f8cZ6+F`B>j_RPq%E@%NMta$HDIUIx((9 z9cUy&c;2?IYSJkHz>nWunT`(^^_V2+N=56iy(o!S)84MZpo(?^$J)Ms^=Id)<1`tG zPSkhbpOqv;f~nR93zt%!cYGi5$?7eC(#9}bl^j!|dHUD+(s$kiH4fHNAXu+8b=@)F zk3U^!Z2lZoH92mii8Nd!1WQ%*OxF}{1~y8+`S(*xWF*yM(^5#P_6{|=f}{)9atrnX zQ8)ftY)m_V4-6Q|1f{cI4NkA>8*ZY5<5ENSW&0l8y`ankRm!CZY+Zj}9X$cU&{tP6 z8I+8V*FjcRpUqV6PY|<_NPOVszbCWb+>j+395j(hB0GBX2ExnLZ>rAzJ;XX%O%e{T zw2=?4i)*+t)yT+5$PL|6cKgqV^QBv34eok_SlUp}j*r3Gdi(9voHv1zYtQd=oC^{6 z*D+HHh27JwxO`cYTSG5A^ZF;2sT&U(L$dTeReTs*9_*FGraK0^YlQ{zA?r49=KlC) z5t>UEV2eS#nY&*rPab6$YTFdWcuLwATPrU9>xXCjFT+X;Xh!|y!$o=Q_7I}QS0ksb zRU72c0rl$YMf|Ro(GsfBWxsdg`e(G=(#CajXs(8Ank1Ypp6;>dB8ckYBC7x<=Zu zH@!e&x3?}WIZHxMWwY(|UKtw2qUD}S?OXk$8?yBaqAzGHCr{rBqIPe{?YlCdE{V;? zmxgEbf4efHICi2~)jKMuOVm1Pd48F4VAg{<4!q_0pC9LhQ52@+YIl^kaNZS|_asg-!_E>}O=lp`9}vc!$z-Vm9sH;?tjwx~{ammUb*ZZ+iaR>^LENq-yY=WPN;WoEg zNC^=zi%*^bs(*N~o_cC)vUj#y!qqhdO?h7>@Pn;tOjfqY+a%9C&7K$y=u*N7HJuF- zzCkHrL(&+XlihmAsfff_i2vDlv#RjVQ!Tx{9uZw-t^~s+zQHMX>1P0dySMt^*{p*J zR0V@<4vx>-($AnxZBsp>)Gyw84?6VQw-=?b0tBY4i0HcXq@NTWhp8U$TaeKwzT8qe z`{T_;b74|Cth|ix@0*^MWEN6+7A+o9M3j@GqD)sGT=Rx(N?_J>S_RgYNpF5gCQe%K zWtI|TCIvAe!Lc%CRu+b1>Z^59y(8eohn|rPj@prlMI3jd?BvJj`@hY5K-+Wlz7DTQ zY2Xu~aATm!E-Wof{PNSniPisJA|KeFBde))dhK=tIUl8THMoV~eZUs=yN$47wKO0&b!GVCl3i{k|PYpIzr1uQ{M zoZ`;YDQoKPaOv8=%OMIZI(j)tZ8JziHC!vvPTzWw&t#fv&8J7X$nC&vA z-eD11qWuyud!>GYiN_)|zsv(Mq_uQW#rftP4t$j}}g+g1UWx}y4yGPG}<&=;VjACL_PkW~^7gQ$J8}w44s!G8k5SdaP zk4U1ij6RnzJ(k$q*4iK_DxiwARW_wSD4-JAQmKf~GeqYyJ$V!hcap_XIVGL;0KMXqbMnHdP8qDs%GWQ$Y|Eu)gF zRtV`-B3GqVtC-L=aiq>{l@TZc5ud*%fU8v!9!t!pRSH!yg^Ww32?b=Vs@fz~atTzm zR>BjC`8u4GInePogPJ2EDM7 zKxOi|6=-8~gG*XofD+qnCasXcVN%&Loz|*lR8){SdWV@-O1Ik;VlsliCIkwoRHjfR z=Sh`9Hk-*1>hvm^lt+Le?Am`8+0*O?}WC*X5={|}C3 BbVdLG literal 0 HcmV?d00001 diff --git a/samples/meow1.wav b/samples/meow1.wav new file mode 100644 index 0000000000000000000000000000000000000000..2e25a4a3fae2092be2a777c46928cdb43798194d GIT binary patch literal 82598 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

tW+rTKBpv<}@MuO+ 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 literal 0 HcmV?d00001 diff --git a/src/App.svelte b/src/App.svelte index 1cb6c92..4ce6e78 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1,7 +1,9 @@

- - + + + + + +

DPad: Arrow keys
B button: Z, A button: X, Select: Tab / C, Start: Return / V

diff --git a/src/lib/NES.svelte b/src/lib/NES.svelte index 87fbf50..8be1c1e 100644 --- a/src/lib/NES.svelte +++ b/src/lib/NES.svelte @@ -3,7 +3,7 @@ import { onMount } from 'svelte'; let nes = $state(); - let { rom } = $props(); + let { rom, opts } = $props(); const SCREEN_WIDTH = 256; const SCREEN_HEIGHT = 240; @@ -81,10 +81,10 @@ } let emu = new jsnes.NES({ - onFrame: function(framebuffer_24){ + onFrame: function(framebuffer_24) { for(var i = 0; i < FRAMEBUFFER_SIZE; i++) framebuffer_u32[i] = 0xFF000000 | framebuffer_24[i]; }, - onAudioSample: function(l, r){ + onAudioSample: function(l, r) { audio_samples_L[audio_write_cursor] = l; audio_samples_R[audio_write_cursor] = r; audio_write_cursor = (audio_write_cursor + 1) & SAMPLE_MASK; @@ -105,6 +105,7 @@ canvas_ctx.putImageData(image, 0, 0); } nes = { + baseOpts: emu.opts, emu, activate() { this.stopAnimating(); @@ -140,6 +141,11 @@ } } }) + $effect(() => { + if (nes) { + nes.emu.opts = { ...opts, ...nes.baseOpts }; + } + })
diff --git a/src/lib/sampload.js b/src/lib/sampload.js new file mode 100644 index 0000000..db3e223 --- /dev/null +++ b/src/lib/sampload.js @@ -0,0 +1,8 @@ +import { Sample } from 'jsnes'; + +export async function loadSample(url, toneHz, gain) { + const audioCtx = new AudioContext(); + const response = await fetch(url); + const buffer = await audioCtx.decodeAudioData(await response.arrayBuffer()); + return new Sample(buffer, toneHz, gain); +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 9529f00..7ba2cc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -357,7 +357,7 @@ is-reference@^3.0.3: dependencies: "@types/estree" "^1.0.6" -"jsnes@file:../jsnes": +"jsnes@file:./jsnes": version "1.2.1" kleur@^4.1.5: