- 程序章程 research/new8/00-program.md(8款概念/回合协议/验收门/进度账) - 设计:docs/design/15-radio.md+voice-ids(132句,6状态9抉择4结局,电话滤波资产侧带通)/16-dungeon.md+voice-ids(125句,脉冲回声/7层seed生成/三档战斗/元进度遗产) - 资产:TTS 970文件(GPU flock串行)+ Mureka BGM 8首 $0.24(台账 mureka_log.md)+ 程序合成 sfx(含预pan侧墙/开口、phone_ring铃声、amb_cave呼吸层、turn_tick)+ 终检 check_all_assets 8游戏全绿 - radio:game.js+playtest 221断言(4结局矩阵/pendingChoice盲玩公平/RING两级看门狗/菜单循环/存档schema) - dungeon:game.js+playtest 1610断言(seed全网格回声一致性/学期零死/格挡80%/死亡归因真话/元进度/菜单冻结/上滑5段状态链) - 引擎修复:audio.js _playVoice 加载竞态补杀 token(R1真机71分钟语音风暴根因)+ 同id 3s窗口≥5次熔断保险丝 + gesture.js 长按boost事件门(+66行,9套件回归全绿) - 大厅:新增 radio/dungeon 卡片 + GAMES 数组 - harness:sessions/radio.mjs+dungeon.mjs(主线+压力双剧本)+ transcribe 注册 + voice_text.json 刷新(8游戏704句)+ 13号文档 §20 登记 - R1 存档:4人设评审×2游戏 + 真机试玩报告×2(radio 5/5愿意玩;dungeon 0/4→确诊风暴)+ synthesis×2 + 转写8份 - R2 修复:radio F1-F5(看门狗补挂/rep_low改词重录/真铃声/ASK续玩语义/链末跳过保护)+ dungeon D0-1..D1-6(风暴根治/回声真实性/密度下限+呼吸层/导航最短路/菜单关闭反馈/金币档同账本)+ 实现核对登记
36 lines
1.9 KiB
Bash
36 lines
1.9 KiB
Bash
#!/bin/bash
|
||
# 《回声地窟》BGM 后处理(批次 1):Mureka flac 候选 -> 90s 无缝循环 ogg+m4a。
|
||
# 用法: bash web/dungeon/gen/gen_bgm.sh (flac 原件在 tools/mureka_out/,不入库)
|
||
#
|
||
# 工艺(tools/mureka_log.md R4/R6 同款,16-dungeon.md §9.1 全部 -20 LUFS):
|
||
# 首个强 onset 起点(silenceremove,-35dB 门限)→ 93s 裁剪 → 首尾 3s acrossfade(tri)
|
||
# 无缝循环 → loudnorm I=-20/TP=-2/LRA=11 → aresample 44.1kHz
|
||
# → ogg libvorbis q3 + m4a aac 128k,落 web/dungeon/audio/bgm/。
|
||
# Mureka 任务 id / 选用 choice / 成本见 tools/mureka_log.md「批次 1」节;
|
||
# 本作无节奏关键曲目(battle/boss 不做节拍网格同步),不需要 bpm_precise。
|
||
set -euo pipefail
|
||
cd /home/xsl/SoundGame
|
||
|
||
TMP=tools/bgm_post_wav/dungeon # 中间 wav(不入库,可由本脚本复现)
|
||
DST=web/dungeon/audio/bgm
|
||
mkdir -p "$TMP" "$DST"
|
||
|
||
post() { # post <flac> <track> <LUFS>
|
||
local src="$1" track="$2" lufs="$3"
|
||
local tmp="$TMP/$track.wav"
|
||
ffmpeg -y -v error -i "$src" -af \
|
||
"silenceremove=start_periods=1:start_threshold=-35dB:start_silence=0.02,atrim=end=93,asetpts=PTS-STARTPTS,asplit[a][b];[b]atrim=start=90,asetpts=PTS-STARTPTS[t];[a][t]acrossfade=d=3:c1=tri:c2=tri,loudnorm=I=${lufs}:TP=-2:LRA=11,aresample=44100" \
|
||
"$tmp"
|
||
ffmpeg -y -v error -i "$tmp" -c:a libvorbis -q:a 3 "$DST/$track.ogg"
|
||
ffmpeg -y -v error -i "$tmp" -c:a aac -b:a 128k "$DST/$track.m4a"
|
||
echo "$track <- $src (I=${lufs})"
|
||
}
|
||
|
||
# 选用候选 = 更接近 90s 的那支(拿不准原则),详见 mureka_log.md
|
||
post tools/mureka_out/dungeon-menu/158551678976001_0.flac menu -20
|
||
post tools/mureka_out/dungeon-explore/158551855333377_0.flac explore -20
|
||
post tools/mureka_out/dungeon-battle/158552010457089_0.flac battle -20
|
||
post tools/mureka_out/dungeon-boss/158552209555457_0.flac boss -20
|
||
|
||
echo "== dungeon bgm done: $(ls "$DST" | wc -l) files =="
|