From 06a7f6ea9a2450b8fcf5700eacd9bb4cacd753eb Mon Sep 17 00:00:00 2001 From: Aditya Gupta Date: Wed, 10 Jun 2026 13:36:24 +0530 Subject: [PATCH] feat: Play move sounds --- src/routes/+page.svelte | 40 ++++++++++++++++++++++++++++++-------- static/sounds/capture.mp3 | Bin 0 -> 6054 bytes static/sounds/move.mp3 | Bin 0 -> 5635 bytes 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 static/sounds/capture.mp3 create mode 100644 static/sounds/move.mp3 diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 0984dda..3dc89f1 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -566,6 +566,18 @@ } } + function playSound(san) { + if (typeof Audio === 'undefined') return; + try { + const isCapture = san.includes('x'); + const src = isCapture ? '/sounds/capture.mp3' : '/sounds/move.mp3'; + const audio = new Audio(src); + audio.play().catch(e => console.log('Audio play blocked or failed:', e)); + } catch (e) { + console.error('Audio play error:', e); + } + } + function doMove(fr,fc,tr,tc) { let san = moveToSAN(board, fr, fc, tr, tc); let piece = board[fr][fc]; @@ -584,9 +596,11 @@ turn = turn==='w'?'b':'w'; selected = null; highlights = []; + + playSound(san); } - function playMoveByHistory(san) { + function playMoveByHistory(san, mute = true) { for (let r=0;r<8;r++) for(let c=0;c<8;c++) { let p = board[r][c]; if (!p || p[0]!==turn) continue; @@ -606,6 +620,10 @@ board = board; // trigger Svelte 5 reactivity lastMove=[r,c,tr,tc]; turn=turn==='w'?'b':'w'; + + if (!mute) { + playSound(san); + } return; } } @@ -1763,21 +1781,27 @@
- - You need to prepare for these moves + + + {#if turn !== currentRepertoireObj.side} + You need to prepare for these moves + {:else} + Choose your next move + {/if} +
-
+
-
+
Opponent's Move / Continuation
-
+
Expected
-
+
Win %
@@ -1807,7 +1831,7 @@ class="relative z-1 text-left w-full cursor-pointer grid items-center" style="grid-column: 1/span 2; grid-template-columns: subgrid; display: grid;" onclick={() => { - playMoveByHistory(b.move); + playMoveByHistory(b.move, false); history.push(b.move); history = history; }} diff --git a/static/sounds/capture.mp3 b/static/sounds/capture.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..69baa2a414b6bb209a5ec10efcd438063b6f1d68 GIT binary patch literal 6054 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 literal 0 HcmV?d00001 diff --git a/static/sounds/move.mp3 b/static/sounds/move.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5fe03713f3f145544e784061f4d911c8881fe2cf GIT binary patch literal 5635 zcmeI0XD}Sz*T)wtEQ?j6CW~EG?}Cu9(N-sV%j!KuOA)eItkqX<(Q8>0~ok-boNd z7o5H_Il}a3fdBvw zDuCc$kbiOd3+6Ame`)#4%wG=wLjKF2TqXt@hFWrxGSbq(&VLmuKw(tlh5(AU|L9l` z*l+kZ@PBqEpY{EDAPO45s3!nGd#O*kh!#r0F#kkmuRMUC#OI;n>N;j|qxQ2eNgQ>7CsWHpM?TFa2Ta^o-XMT#b7xrmxnCn3G z`B=w$xn^F+;HX_or-B3<<_-&0BmkI<$icn1X<*y{KtWa9RLBHaPENNi(CFUgh;%VP zWhPWlbWgZPmdWl4aGcfE2l$k0EVf>ZCMgq&eG+hwnQUm`ZsXI)*%b4GN__3c%2RFD zu24j`iiVVe*tZF#FUc*EJy$XYbIH9%WcuH#k3$SbzO-SHfwY6)cj#0ao3!Fz_8=); zl_~bH({ETVokhK5)Yg1=Gm}m^E>v5KEmQf%_Esr>0z7w!#3>M#7z0d9Q!f?)DuWgB zP(BqRxMHekIj>+{=+5ps%wm`=#bZ#C&h>N%Og+-qp>Bqe!ZtW*Xv7%{D`=A5S|=Xi9$Pt8SA&hjmv1Kx z?IK;={RQ~fKh(Jk7YFsv-TE<)l3z3D!36bPLta8QNd$#WR;D8KYadO@D7SC0WYShO z5@r;Y`~0c^CH zS8z_2bxc~Wzcl4zX{LUsxhF&RSrL^s*h!3@qhlo3vs}8l2H`hHFiQ&ZGBsJh#jjWR zV)J?ZUENf*<<}*5E8p-d8C3zlC--Zz>L9k#HkH>Tb;oVlBtsDLB2YnbPIT(Y9n%ay zB_9qa>JIW*qw5$37-&6q2I39yrCwTh!YOlDWXc@LNR^t&?(|?wPQsf*a|Ad}BLcnh z9Mfy{F6ry+mhV`DKPy16cpX2hIJ~@OS&*x$aQgVoWVRrB zwfXIili=UyyQk-Z#xpCW-|e80z}k!VGkNVby!VG+Fe?Uhs2XNCmr(vF@kbUWUk)W` zJjvS-wav%hy`eOt%gO{v9f-uhVxdr%jmm4b&e2%XmL|oZu42achB7O|j^TpAxsB^h zQ77}~hp&hM6X52Gz!q-&DrWTR728q1ErSf)0jwglxR;kHmL?W1m>wK`oUXJ#osk-_ zttoOb^J3eRY5UgQ%n_rIwgcO&o$^4aCA4ds_D8QAI)F#P-`# zUl{~qVkfjoHP-beqrLEgRj0XpWT;t1dgHPgeWAW2*!y>l1UoAOy*D(f+xY;XkZ~tXJbTYi`bup@$AzO>(I{BK8TZ1;UbxaiV!`_*oE@!*uyz5f ztO^Yd$XN#7huE6{M2bZ*x&VHRf7pF$Rm1W?vvWxiU(*WG-B_ZTZDq1$RNZoQ3=pE{ z&lJ?+3{LuJxuXzrd826Q;#8g){P7-=bHXKQRo1bLL8Ydq)Vp3*LivSS8-2CHTuY@; zJ?sri0_IMTuIdpAPjCHVT($v*&fCz=rnK&QO?v_{yZ~#mZvF%~#j2g1GJW@nA*$C8Hx_Aih1 zxEu7(BvN3ah%h?(XMkYV6}BuRv+vw_@|o&G3b323pH6?GC}bEve$shY^W~%4f&es% zon0xqU*d%pbw9sMAeSqkRFqa8q|Pqlo5*<)6k3C5`LtR?{1TUDAm2Ed1y}s!6-bb@ z`c=4i&2#tQN6u<+xhZ3Zld;gahRiU3_bd-GO!9+QgX9Gk`D`oc$oVZ=cgf6@rXTZd z;rk!bSp`Mdjzy|lVr4?;HYu$)ZpaNr?ZRC*sS^>!YY3MTkIEwwVxRkgYTgTFJo4!e zhlL3+S>PYXEdzi%4pU*)GGF`zxz^o;?wY$5U40K{Mm?gh>LHdRG_-l&dL_c0@GJ5# z@e$Zk-KA(y#xrPNR8%>(M-J%uWnH&mR=;ktEcL6mc&CK`kwnsbyR{ml%dJ+oH{&vN zHXd%D9MLr5R;%p&5xe=dcBs-&@po2|tzKb$d#o1@md?SjBS7$x$+%7_FCP5RS5pIx z&`%KSxIdqcACI95mWSg?_|j5EfD7#Cw{}!?@$o=WZPrmVal@v0omy0JKvzWg*`Vph zx8scuxmwNBr;cksY{#!XuZpR34w`noeHfNE$4;%1`mjb$kW~DsGAdKEPFG=Q%bCZw zGi;8Ei3{OZYddW$u@aHPe2UTUm^(ueSKr{ncA%xv8XWHX($U-XQX1vB$riz^tf&fo zEo#TJdXmN~!)b?j9of^@*o2aKBtR>{d3LeiTiK+2IJ$gRyD&s?@`1M@)0V%qr^APb zodHToS2rwZwzg!C92=1QYt0AjDSd#%Awd;+pn@kwZ1qwi)Mc1cUDkv)ga`(7b>NKT zZh=u=7tk=Krh2;X0^!bb+(*(e?G?Kp#vR99za4;5yL<1}D1i@s41w-;vc~kdvTbu1 zK{&DXi6s~4AZi(>Xf`D|OW^UW@DsAgbCz!Jk~WQTx7)~i|3O05%2XyKTMn$tWo{$L zS#c+Mg1B}q>*KQA`KwX$>)$8mtQ^jk%(I?CoOrsnM=quj%PvGFc`2D+a`k17jIR&; z*6PL+a%=2!!A}TM|GZh|`X?^5D~g*Xfet&7FTEx^zx@K?aO$5fflECX<+fq>|x7y)(CK?oEVNZm0v!;bl&m!Nj8uhW2R2A$0|$YNitdXkW6>l z8&|;nW3MG*gf5r<^g}*Vl$WiJE!?SuGBkYHVXf5k-Po+;D4R;v+4{Sz@UDkd&N&PrW4{>1A zK3gfZ-yhjz5v84R(+6QyjbO`(03IHqg0Noa^nT2K#_-THd0D&*wYm&W#`?hJ?f(jChjx# zcNMs)VDk=ylD+X^4_hViwN>eESFlFVrq?1nR_syl_im@!pzdMy5A8S%?^OYi+wXIf z(wINtQ*)^>);*wh@{;dMXILz=!aGAJYV*NO2i^u+BOoNHTmV9wtv@UIezZ7}mXv3d zXUI1GcJ&`8d<6jCxR{1X=@t9$a*=%y-0V(aYDeXB{VBy&zY}rAu^e#%aM-Qsg;E9D zqbWBxzwlshxJ{VQdU&-~kXSb|mQqCKqCglot&RcB>ST|0tjdGK+GoVk>S`k_r79XM z@TETzL|DphdR@xJk@4Oj$d>E#q!H$&Y*5 z)0s53lC3@T!savQK9Bjsu_SiMP{SWFUXB`?z>A{;OAn{WL66*ex9{tH?bZi9%Bc#s z$j%LkQ~%Q#UM6X9h2%ML#g@K%R;|E}MWv$0+p2o&Z3DZH?(re$VniJ+^L&oimuDlI zEY`X+eVemuZ7e4gK5om|-klZBQbD3CKcmeuo|9ki9RLw1g3}sR8i-G$uU53U`qOWb zLbxVMlP$1X%e{&bI7sWpKjCTe39G6O%A6O{xi*3|i{XSxM0O=#mXD#k$~hwtUjr0@ zBgJJ!7ufpuO{LX_Eh%q9GPyQ-HgdEa&bP-a0w@7)F}OYt$UEd~NUk}Ms6lYA{%J2z zir#sJ$&MEAUm2#u^Hyb{y3VcbZ>QTs?STb0>4*{GR!jTeFQxVSGiki2z%K^$Wl6kP z3kbpIpI_)ThFacZ>MKg#xrKP&(G3@2HW8zB#KqE|$t?Uki@^la@NmK5TYC`8s>O1v zP-8w!?MBPoO;+)bPal8%$o5oavsuWScbipL0yki%Y@{v6CPjX zdfqJ3_OXN7EqYjFx!V?3$$|uxDY%U~gNLxM*LDm`oHSk***iK`xplZ>6XqskvXXG7 zcJBTtKPjT*c+a|b{Km)mxax`yJLX>l_%&;Ghs`{pC*QM0pXf(Q1YLV&^{A+h`4Ws) zy)cqaJPHUzx}#mu8`@@~ZUd2hNvdqLNyRPdliG0Ystwo%RlRys%x5k0SUGsQyA2|F zd}TeOPIR)Z?ETsM5(8pEx754S#UCD7_(MMAAXVONZ_e=qfvCGxr{z3SXJ5SStWnU8 zLQBK z|1Cz({;`37YR^0d*x+ayW*|4<;aNlW6R>BM2+=u?!GNwYR7W(X0`f@dx)Ah&mTun@ zn-p4<@)m4=*#p&->XYMpYM>*GP+lJR_<0rkG-&n zqcI7f0bnkmUvslxpzK34QB!%vAsUk4?Q$IcDW*ejQ@{w5a{vm`Z%JJ}Vw92?z%V@x z8opDWh<8Hl;l_w5O;m=t6%Kob1mv|f;DB-4kYfA92mxsLftFc8ZNuP2!-QC zpKL;MO2r0tq+k_I@*Y3OAOhlAaj@EWc013qUneEG=t%s6rgf%{Z1AIB!_OQ8BQMwj zX9kLX8_@z-mvu m2*YAPrUdBv_@6ETKvB*M06+l%`DhFP_+OCq|0(~yf&Tzsqe?aa literal 0 HcmV?d00001