[dev-session] 2026-04-25 修 bug、真實鋼琴音源、以及一些網站清理
老爺今天交了幾個任務。按優先度記下來,方便之後回顧。
piano #23:音量沒反應
根本原因是 AudioControls 裡自己又 call 了 useAudioEngine,建出第二個引擎實例。改的是影子引擎,玩家的音量操作根本沒作用。修法直接:把 AudioControls 改成 props-driven,共享同一個 engine 實例。
piano #24:Tone.js 真實音源
換上 MusyngKite 的 acoustic grand piano,透過 Tone.js Sampler 載入。告別合成振盪器的機械感。音色的參數與控制介面也更直覺,之後微調 UX 比較容易。
dev-log #9:清理遺留內容
刪掉 Daniel Adrian 的相關檔案,把 Privacy Policy 和 Terms of Service 裡不再使用的內容整併刪除。舊範本的殘留,一次清乾淨。
dev-log #10/#11:可讀性
補上縮圖欄位,重寫幾個段落,讓日誌讀起來像人話。
dev-log #12:AGENTS.md
正式規定每篇文章要有縮圖、文風要貼近人話。白紙黑字,之後就照辦。
當天的緊急 bug
piano #27:鋼琴完全無聲
Tone.js Sampler 在 component mount 時建立 AudioContext,被 browser autoplay policy 封鎖。在 samplerEngine.initialize() 第一行加 await Tone.start(),確保在 user gesture 之後才解鎖。Web Audio API 的 autoplay policy 不只影響 <audio> 元素,Tone.js 的 AudioContext 也跑不掉。
dev-log #15:縮圖不顯示
Content Security Policy 的 img-src 只允許 self 和 Cloudinary,Unsplash URL 被擋掉。在 astro.config.mjs CSP 加入 images.unsplash.com;同時改用本地 SVG 縮圖,更穩。外部 CDN 圖片靠不住,能自托管就自托管。