音效
所有音效檔案位於 kit/sfx/ 中(會複製到每個專案的 sfx/ 資料夾)。以程式碼生成,無授權問題。
紙張音效組由 tools/make-paper-sfx.ps1 生成(使用 FFmpeg 合成;重新執行即可調整音效)。
| 檔案 | 使用時機 |
|---|
tick.wav | 每個列表項目 / 勾選出現(乾淨樣式) |
counter.wav | 數字滾動時(計數開始時) |
chime.wav | 最後一張卡片 / 結尾卡片 |
pop.wav | 藥丸、徽章、貼紙、日曆晶片彈出時 |
snap.wav | 螢幕截圖或卡片就定位時 |
star.wav · switch.wav · fill.wav · success.wav | 突顯 · 之前→之後切換 · 填充條 · 達成目標 |
paper-flip.wav | 翻頁:場景切換 / 重新構圖進出 |
paper-drop.wav | 紙卡片落地 |
tape-rip.wav | 膠帶固定卡片(每張卡片一次,不是每條膠帶) |
paper-rustle.wav | 勒索信字母 / 一堆晶片爆開 |
marker-tick.wav | 在列表行上做記號打勾 |
marker-scribble.wav | 連續幾個叉叉 / 塗鴉(約 0.85 秒) |
stamp.wav | 橡皮圖章、「VS」拍擊、計數卡拍擊 |
paper-slide.wav | 卡片從側邊滑入 |
thump.wav | 關鍵台詞的重擊 |
清脆 UI / 玻璃音效組(tools/make-crisp-sfx.ps1 [-Project projects\<n>])——當使用者要求「更清脆」時使用
| 檔案 | 使用時機 |
|---|
crisp-click | 卡片 / 面板落地 |
crisp-pop | 藥丸、晶片、徽章、播放按鈕 |
crisp-tick | 列表行、小揭示、條狀開始 |
glass-tap | 液態玻璃磁磚 / 應用程式圖標出現 |
type-burst | 打字(0.6 秒) |
count-roll | 計數(1 秒) |
whoosh | 場景重新構圖進出、大幅縮放 |
hit | 重擊 |
alert · switch-on · send · sparkle · ding | 限制/錯誤 · 切換/開關 · 發送按鈕 · 星星/突顯 · 成功/結束卡片 |
規則
- 套件預設(創作者風格):滑入/滑出無音效、無咻聲、音量約比人聲低 20 dB、少量音效。
- 紙張剪裁風格(使用者要求清脆紙張音效):每次落地 / 膠帶 / 滴答 / 印章 / 翻頁都有音效;字幕或退出時仍無音效。
- 與視覺事件落地的影格同步,而不是補間動畫的開始點。
紙張剪裁範本偏移時間(來自 kit/templates/paper-cut-vertical.html)
| 元件 | 音效 |
|---|
headline(t0) | paper-drop t0+0.35 · tape-rip t0+0.42 |
ransom(t0) | paper-rustle t0 |
checklist(items) | paper-drop items[0].t−0.10 · tape-rip items[0].t−0.05 · marker-tick 每個項目.t+0.08 |
counter(t0) | stamp t0+0.17(音量 0.25) · counter t0+0.2 · tape-rip t0+0.25 |
versus(t0, right.t) | paper-slide t0 · paper-slide right.t · stamp right.t+0.52 |
calendar(t0, crossAt, glowAt, stamp) | paper-drop t0+0.35 · tape-rip t0+0.42 · marker-scribble crossAt · pop glowAt+0/0.12/0.24 · stamp stamp.t |
reframe(t0, t1) | paper-flip t0 · paper-flip t1 |
punch(t0) | thump t0 |
| 最後一張卡片 | 落地後約 0.5 秒播放 chime |
如何操作(一個列表 → HTML + 快速混合)
- 編寫
projects/<name>/sfx.json:[[時間, "音效名稱", 音量?], ...](音量可選;預設值在 tools/sfx.mjs 中)。
node tools/sfx.mjs projects/<name> → 在 index.html 的 <!-- sfx:start --> / <!-- sfx:end --> 之間寫入 <audio> 標籤(唯一 ID、真實持續時間、不重疊的音軌),因此未來每次渲染都會包含它們。
- 已渲染?不要重新渲染(渲染很慢):
node tools/sfx.mjs projects/<name> --mix renders/with-cards.mp4 renders/with-sfx.mp4 使用 FFmpeg 將音效混合到現有音訊中,並複製視訊串流(3 分鐘的影片約需 10 秒)。限制器可防止削波。
npx hyperframes lint(預期 0 錯誤)。檢查電平:ffmpeg -ss <t> -t 1 -i out.mp4 -af volumedetect -f null NUL。
- 將結果複製到
exports/。透過編輯 sfx.json 並重新執行步驟 3(只需幾秒鐘)來調整。
切勿觸碰 <video> 音訊。VS Code 的內建播放器無法播放 AAC;請在 VLC / 預設播放器中預覽完成的影片。