Files
SoundGame/docs/design/15-radio-voice-ids.md
T
xsl d870a75a26 feat(new8/batch1): 两款新 RPG《不眠频率》radio +《回声地窟》dungeon 全套(多agent流水线:策划→资产→开发→测试→玩家R1→修复→R2)
- 程序章程 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(风暴根治/回声真实性/密度下限+呼吸层/导航最短路/菜单关闭反馈/金币档同账本)+ 实现核对登记
2026-09-02 18:52:37 +08:00

22 KiB
Raw Blame History

15b · 《不眠频率》(radio) 语音台词表(voice ids,录音依据)

给音频总监的录制说明

  • 双性别组(主播 HOST + 导播/系统 PROD,103 句):落 web/radio/audio/voice/female|male/<id>.{ogg,m4a},两性别 id 集合完全一致。
    • HOST(主播=玩家):female = Serena,instruct 常量 温暖清晰的年轻女声,深夜电台主播,沉稳亲切,不甜腻;male = Uncle_Fu,instruct 常量 低沉温和的中年男声,深夜电台主播,沉稳亲切,有磁性。
    • PROD(导播/系统音/向导 gd_*):female = Vivian,instruct 常量 贴近耳机的低语女声,年轻电台导播,冷静克制;male = Dylan,instruct 常量 贴近耳机的低语男声,年轻电台导播,冷静克制。
    • 区分度设计:主播(播音腔,对外广播)与导播(贴耳低语,只进你耳机)共用 speaker 池但不同 speaker 配对——female 侧主播 Serena / 导播 Vivian、male 侧主播 Uncle_Fu / 导播 Dylan,同场景高频对话的两者永不同 speaker。
  • NPC 平铺组(29 句):单音色、不做双性别,平铺落 web/radio/audio/voice/<id>.{ogg,m4a}(引擎平铺回退命中),转码时按 §通话滤波 加带通。NPC 共 5 人(≤5 约束),同一角色 speaker+instruct 恒定,区分度风险逐个标注:
    角色 speaker instruct 常量 区分度风险
    老周(75 岁走丢老人) Uncle_Fu 苍老沙哑的男声,七十五岁,疲惫害怕,带着雨夜的颤抖 中:与 male 主播同 speaker,靠年龄感 instruct + 电话滤波(500-2800Hz)区分,请试听确认
    小鹿(想退票的年轻人) Serena 年轻女声,倔强,带着哭腔,疲惫 中:与 female 主播同 speaker,靠哭腔 instruct + 电话滤波区分,请试听确认
    糖糖(失眠的孩子) Vivian 稚嫩童声,八岁小女孩,困倦,胆怯 低:与 female 导播同 speaker,童声 vs 成年低语,且从不同场
    陈姐(争吵的夫妻·妻) Vivian 疲惫沙哑的中年女声,四十五岁,强撑着平静 低:与糖糖/导播同 speaker 不同 instruct,三者从不同场,请试听确认
    老韩(雨夜司机) Eric 沙哑粗犷的中年男声,货车司机,困倦强撑 低:male 侧唯一 Eric
  • 通话滤波(转码侧):NPC 全部走带通(参数见 15-radio.md §6.2:老周 500-2800 / 小鹿 400-3400 / 糖糖 450-3000 / 陈姐 420-3100 / 老韩 300-3400,均 + 轻压缩);HOST/PROD 不滤波。试听不可读的句子回退未滤波原声(宁窄勿脏)。
  • 称呼规则:来电者对主播的称呼一律中性(「主播」「您」),全表禁用「闺女/小哥/叔叔/阿姨/大姐头」类性别化称呼(主播性别随用户设置变化);「大姐/姑娘」仅可作来电者的自称或被导播描述。
  • 数字规避:序号/口碑全部分档整句(prog_c1..c5、rep_*);句内数字(十一点半、三公里、四十分钟前)写死在整句里,禁止运行时拼接。
  • 禁语速词:instruct 不含任何语速描述(引擎 SoundTouch 变速);NPC 句靠短句+逗号停顿实现「语速放缓」听感。
  • 管线:tools/gen_voice_dual.py 照录(SPEAKERS 表需新增 radio 行);多音字自查见文末注记。

G0 组 · 系统/向导/状态(PROD 双性别 ×24)

id 台词全文 触发
gd_brief 单击继续节目。请选择的时候,向左或向右滑。 开场链最前(full 档,F8 先例)
gd_continue 单击屏幕,继续。 叙事链末静默看门狗第 1 级(full 25s / standard 13s)
gd_again 还在吗?单击继续。 看门狗第 2 级(50s / 30s),新句不逐字重播
gd_invalid 这个手势,直播间里用不上。 无效手势(error 震,idle-only,同局限次)
gd_ring1 热线在闪。单击,接听。 RING 静默 10s(第 1 级)
gd_ring2 灯还亮着,听众在等。单击,接听。 RING 静默 25s(第 2 级,必须与第 1 级不同句)
sys_help 单击继续,双击重新听。上滑听状态,下滑开菜单。请选择时,左右滑。 上滑帮助 / 菜单内上滑
sys_menu 菜单。单击切换选项,双击确认。 下滑呼出模态菜单
sys_menu_resume 回到直播。 菜单项
sys_menu_restart 重新开始今晚。 菜单项
sys_menu_lobby 保存并回大厅。 菜单项(确认后跳转前播)
sys_settings 音色、语速、背景音乐,请回大厅修改。 菜单内设置提示
sys_skip 想跳过这句,单击就行。 开场每局一次(skip_hint 先例)
sys_continue_ask 检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。 有存档进游戏
sys_new_night 新的夜晚,开始了。 新夜班开始 / 菜单重开
sys_saved 进度已保存。 存档写入后
prog_c1 现在是今晚第一通电话。 上滑状态链(按当前通号选播)
prog_c2 现在是今晚第二通电话。 同上
prog_c3 现在是今晚第三通电话。 同上
prog_c4 现在是今晚第四通电话。 同上
prog_c5 现在是今晚第五通电话。 同上
rep_high 今晚的口碑,在听众里立住了。 口碑跨入 ≥5 档(BRIDGE 被动播报)
rep_mid 今晚的口碑,不好不坏。 口碑回落 1-4 档
rep_low 今晚的口碑,还没立起来。 口碑 ≤0 档(零起步语义,R2 F2 改词:rep=0 开播前不再读成「砸了」;附 warning 震动)

G1 组 · 开场(双性别 ×4)

id 声部 台词全文 触发
b_open 主播 午夜零点,红灯亮起。欢迎回到《今夜不眠》。 INTRO(配 sfx/onair_sting)
b_rain 主播 雨下了一整晚。热线灯,马上就要亮了。 INTRO
b_rule 导播 台里的规矩就一条:先接住人,再接电话。 INTRO(一句规矩,P4)
b_goal 导播 今晚五通电话。说什么话,由你决定。 INTRO,随后第一声铃

C1 组 · 第一通·老周(走丢的老人)(双性别 13 + 老周平铺 7 = 20)

id 声部 台词全文 触发
z1_ring_in 导播 一线来电。七十多岁,雨夜,走丢了。 接听后线路引入(配 line_connect)
z1_a 老周 主播……我,我找不到回家的路了。 通话主干
z1_b 老周 雨太大了。我本来,只想买副老花镜。 通话主干(垫 amb_rain_city)
p1 导播 老人在发抖。向左滑,陪他哼那首老歌。向右滑,冷静问他路口的路牌。 抉择提示(播完即可选)
z1_song 主播 大爷别急,这首歌我也会。咱们一句一句来。 p1 左(称呼「大爷」指对方,中性合规)
z1_songo 老周 对,对!路口修车铺,天天放这首! p1 左·反应(正反馈:声音稳住)
z1_sdone 导播 他稳住了。老歌,比路牌管用。 p1 左·收
z1_ask 主播 大爷,路口有什么招牌?念一个给我听听。 p1 右
z1_asko 老周 招牌……雨糊住了,我眼花,看不清啊…… p1 右·反应(慌)
z1_adone 导播 他慌了。先接住情绪,再走流程。 p1 右·收(即时纠偏,非归因)
p2 导播 雨声更密了。向左滑,留在原地陪他等巡逻队。向右滑,转接派出所。 抉择提示
z1_stay 主播 哪儿也不去。我陪你,这首歌还长着呢。 p2 左
z1_stayo 老周 好,好。有人说话,我就不怕了。 p2 左·反应
z1_staye 导播 十五分钟后,巡逻灯停在路口。全城听见老人笑了。 p2 左·收(数字整句内嵌)
z1_pol 主播 大爷,我把您转给派出所,他们马上就到。 p2 右(p1=左 时)
z1_polo 老周 好,好。谢谢你啊,谢谢。 p2 右·反应
z1_pole 导播 转接完成,地址报得清。干净利落。 p2 右·收(p1=左 时)
z1_bad 老周 说不清……我真是,说不清了…… p2 右(仅 p1=右 时,替代 z1_polo/z1_pole 前段)
z1_bade 导播 地址没报清就转接,雨又大。这通砸了。先稳人,再办事。 归因句(真话律:指向玩家实际两连选)
z1_ok1 导播 就这么接。记住这个手感。 首通成功收尾确认(全局一次,成功后无其他教学)

C2 组 · 第二通·小鹿(想退票的年轻人)(双性别 6 + 小鹿平铺 4 = 10)

id 声部 台词全文 触发
l1_in 导播 二线来电。姑娘,声音很轻,像怕吵到谁。 接听引入(「姑娘」描述来电者,合规)
l1_a 小鹿 主播,退票窗口十一点半就关了。我站这儿半小时了。 通话主干(垫 amb_station)
l1_b 小鹿 票是回去看我妈的。可我试镜又黄了,两手空空…… 通话主干
p3 导播 向左滑,告诉她这趟车值得上。向右滑,把选择还给她。 抉择提示
l1_go 主播 你妈等的不是奖杯,是你进门喊的那声妈。 p3 左
l1_goo 小鹿 呜……嗯。不退了,我现在就去检票。谢谢您。 p3 左·反应
l1_goe 导播 二线收工。这句话,值一个头条。 p3 左·收
l1_free 主播 退不退,都是你的自由。夜还长,慢慢想。 p3 右
l1_freeo 小鹿 嗯……我再想想。窗口要关了,我先过去了。 p3 右·反应
l1_freee 导播 她走了。没上车,也没退票。年轻人的夜,长了点。 p3 右·收

C3 组 · 第三通·糖糖(失眠的孩子)(双性别 10 + 糖糖平铺 6 = 16)

id 声部 台词全文 触发
k1_in 导播 三线来电。听呼吸,是个小孩。 接听引入
k1_a 糖糖 喂……有人吗?我睡不着。 通话主干(垫 amb_kid_room)
k1_b 糖糖 家里灯关了。可是楼下,一直有声音。 通话主干(配 sfx/arg_muffled 线索音)
p4 导播 向左滑,唱一段摇篮曲哄她睡。向右滑,轻轻问她怎么了。 抉择提示
k1_lull 主播 闭上眼睛。风把云朵盖在被子上,月亮替你值夜班。 p4 左(错过线索路线)
k1_lullo 糖糖 月亮也睡了……那我也睡。 p4 左·反应
k1_lulle 导播 睡着了。可你没听见,她在怕什么。 p4 左·收(诚实复盘,非惩罚)
k1_ask 主播 睡不着的时候,心里是不是装着事?说给我听听。 p4 右(置 heardArgument=true)
k1_asko 糖糖 爸爸妈妈摔门了。是不是……我做错了什么呀。 p4 右·反应
p5 导播 孩子的声音在抖。向左滑,告诉她这不是她的错。向右滑,答应她明天都会好。 抉择提示(仅 p4=右 可达)
k1_truth 主播 糖糖,记住,大人的事,不是小孩的错。一个字都不是。 p5 左
k1_trutho 糖糖 嗯……那我睡了。他们明天,会一起给我切蛋糕吗? p5 左·反应
k1_truthe 导播 蛋糕。记下来——四线的来电,可能跟这个家有关。 p5 左·收(flag 预告)
k1_lie 主播 睡吧。明天一睁眼,什么都会好起来的。 p5 右(善意谎言)
k1_lieo 糖糖 真的吗?拉钩。晚安…… p5 右·反应
k1_liee 导播 你许了个兑不了的现。孩子睡了,谎留下了。 p5 右·收(诚实复盘)

C4 组 · 第四通·陈姐(争吵的夫妻)(双性别 13 + 陈姐平铺 7 = 20)

id 声部 台词全文 触发
w1_in 导播 四线来电。户外风声大,是位大姐。 接听引入(垫 amb_street_rain)
w1_a 陈姐 主播,我就想找个人说说。我家那口子,今晚要出远门的活儿。 通话主干
w1_b 陈姐 明天孩子生日!蛋糕都订好了,他人要今晚走! 通话主干
p6 导播 摔门声你听见了。向左滑,替孩子给她带句话。向右滑,劝她回家把话说开。 抉择提示(固定文本,两条件路线共用)
w1_say 主播 四十分钟前,有个孩子问我们:爸妈摔门,是不是她的错。 p6 左·条件 heardArgument=true
w1_sayo 陈姐 什么?她还没睡?这么晚了,她还醒着? w1_say·反应
w1_saye 导播 她攥着电话,很久没出声。风都停了。 w1_say·收
w1_say2 主播 今天有位小朋友,还在等爸妈回家切蛋糕。 p6 左·条件 heardArgument=false
w1_say2o 陈姐 蛋糕……是他订的。他嘴上不说,心里都记着。 w1_say2·反应
w1_say2e 导播 话递到了。就差最后一脚。 w1_say2·收
p7 导播 她的呼吸平了。向左滑,留在直播里,让全城等这个门铃。向右滑,换垫乐,私下陪她说完。 抉择提示(仅 p6=左 可达)
w1_air 主播 陈姐,别挂。让他接电话——全城都在听。 p7 左(留在直播)
w1_airo 陈姐 喂!回来吧!蛋糕要化了,孩子等着呢! p7 左·反应(对电话那头喊)
w1_aire 导播 电话那头,传来跑步声。今晚的高光时刻。 p7 左·收
w1_priv 主播 这里只有我们俩了。想说就说,想哭就哭。 p7 右(换垫乐私聊)
w1_privq 陈姐 呜……其实他订完蛋糕就跟我道歉了。是我,把门摔得太响。 p7 右·反应
w1_prive 导播 灯牌是你亲手关的,故事还是完整的。稳。 p7 右·收
w1_home 主播 吵架隔着电话吵不赢。回家吧,蛋糕别放到坏了。 p6 右(本通结束,无 p7)
w1_homeo 陈姐 嗯……我这就往回走。谢谢你,听我瞎嚷嚷。 p6 右·反应
w1_homee 导播 她往回走了。成不成,看他们自己的了。 p6 右·收

C5 组 · 第五通·老韩(雨夜司机·高潮)(双性别 8 + 老韩平铺 5 = 13)

id 声部 台词全文 触发
h1_in 导播 五线来电。引擎声没停过——他在开车! 接听引入(垫 amb_cab)
h1_a 老韩 主播,别挂。陪我说话,我的眼皮,沉得很。 通话主干
h1_b 老韩 跑完这趟,闺女的学费就齐了。雨刷都快刮不动了。 通话主干(「闺女」指其女儿,合规)
p8 导播 方向盘比话筒危险。向左滑,陪他聊聊闺女。向右滑,让他立刻进服务区。 抉择提示
h1_talk 主播 说说她。开学第一天,她跟你说的头一句话,是什么? p8 左
h1_talko 老韩 她说,爸,我在学校给你赚了朵小红花。哈哈,哈哈…… p8 左·反应
h1_danger 导播 车道偏了——听! 危机拍(前 2s 起 brake_screech 渐强 + danger 签名同窗)
h1_dango 老韩 嘶——好险!前车急刹,我擦着护栏过去了。彻底醒了! 危机拍·化解
h1_talke 导播 吓醒的,也算醒。这一趟,聊到家。 p8 左·收
h1_stop 主播 听我的,前面三公里有服务区。学费急,命更急。 p8 右
h1_stopo 老韩 行,听你的。进了服务区,我给你们放首歌听。 p8 右·反应
h1_stope 导播 他下了高速。单子黄了,人齐了。 p8 右·收
h1_echo 导播 对了。头通电话那位大爷,就是这片被巡逻队找到的。这城市的夜,是接着的。 插播回响(条件 bond_zhou=true,queue)

D9 组 · 签收抉择(心结)(双性别 6)

id 声部 台词全文 触发
g9_in 导播 五线收工。垫乐起——零点档,还剩最后一段。 C5 后 BRIDGE→签收(配 bgm/bridge)
p9 导播 留言机红灯在闪,是老主播三年前没播完的那句晚安。向左滑,替他播出去。向右滑,照常收播。 抉择提示(39 字,全表最长句)
d9_face 主播 师父,三年了。这句晚安,我替您播。各位,晚安。 p9 左(knot=解;配 tape_static)
d9_facee 导播 带子里其实只有电流声。但空着的那一秒,你说满了。 p9 左·收(老主播不配音,电流声留白)
d9_avoid 主播 各位,今晚到这里。明晚零点,今夜不眠,不见不散。 p9 右
d9_avoide 导播 留言机的红灯,又多亮了一夜。 p9 右·收(开环钩子)

EP 组 · 结局与尾声回响(双性别 19;结局 8 + 回响 11)

id 声部 台词全文 触发
e1_a 主播 天亮了,热线灯还亮着。你们的晚安,是这座城市的心跳。 结局 e1(rep≥5 且直面)主句
e1_b 主播 这把话筒,我总算接得住了。明晚零点,接着不眠。 e1 收(钩子)
e2_a 主播 今晚的热线烧得发烫。全城的失眠者,都被接住了。 结局 e2(rep≥5 且回避)主句
e2_b 主播 只是路过留言机的时候,你还是没敢看它。红灯灭得很慢。 e2 收(钩子)
e3_a 主播 口碑掉了一夜。可那句迟到三年的晚安,今晚说出去了。 结局 e3(rep<5 且直面)主句
e3_b 主播 一个人的频道,也是频道。师父,收到了吗? e3 收(钩子)
e4_a 主播 今夜不眠,静音收播。有的夜班,谁也接不住谁。 结局 e4(rep<5 且回避)主句
e4_b 主播 留言机还在闪。你没看它,它也没怪你。明晚再说吧。 e4 收(钩子;含 e4 复盘,不另配归因句)
ep_lead 导播 收播了。导播间替你记了一笔账——今晚的人都怎样了。 结局链后尾声引入
ep_zhou_ok 导播 老周:孙子替他买了老花镜。回信说,谢谢那首歌。 尾声(bond_zhou=1)
ep_zhou_no 导播 老周在便利店屋檐下坐到天亮。没出事,也没人听见他的歌。 尾声(bond_zhou=0)
ep_deer_ok 导播 小鹿上车了。她妈后来打电话说,那声妈,比奖杯值钱。 尾声(bond_deer=1)
ep_deer_no 导播 小鹿退了票。检票口的灯,记得那趟没上成的车。 尾声(bond_deer=0)
ep_kid_ok 导播 糖糖家的门,这个月没再摔过。她说这是主播魔法。 尾声(bond_kid=1)
ep_kid_no 导播 糖糖后来又打来过一次。还是那句:楼下在吵。 尾声(bond_kid=0)
ep_wife_ok 导播 陈姐家切了蛋糕。那句「回来吧」,是我这晚听过最好的声音。 尾声(bond_wife=1)
ep_wife_no 导播 陈姐在公车站坐到了末班车。那通电话,成了没寄出的信。 尾声(bond_wife=0)
ep_han_ok 导播 老韩到家了。后视镜上,多了朵小红花。 尾声(bond_han=1)
ep_han_no 导播 老韩在服务区睡了一觉。学费齐了,那首歌没放成。 尾声(bond_han=0)

合计:132 句(GPU 预算 ≤170 ✓)

  • 双性别 103 句(HOST 21 + PROD 82)×2 性别 = 206 文件;
  • NPC 平铺 29 句(老周 7 / 小鹿 4 / 糖糖 6 / 陈姐 7 / 老韩 5)= 29 文件;
  • 合计 235 条音频 ×2 格式(ogg+m4a)= 470 文件。
  • 每结局专属台词齐备:e1/e2/e3/e4 各 2 句(ep 组前 8 行)+ 尾声回响 11 句共用。
  • 每局实走抉择 8-9 个(p5 仅 p4=右、p7 仅 p6=左 可达),抉择提示 p1..p9 共 9 个。

多音字 / 发音风险自查注记

风险词 处理
重听 全表写「重新听」(sys_help),无「重听」字样
切(qiē/qiè) 「切垫乐」写「换垫乐」(p7);「切蛋糕」「切了蛋糕」为正确常用读法,保留
挣(zhēng/zhèng) 「挣钱」写「赚了朵小红花」(h1_talko)
巷(xiàng/hàng) 全表不用「巷」,写「路口」
答录机(dā lù jī) 全表用「留言机」,规避
颤(chàn) 台词侧用「发抖」(z1_a 触发/语境、instruct 描述不受影响,instruct 不进语音)
哄(hōng/hǒng) 「哄她睡」为 hǒng 常用读法,保留,试听确认
宿/血/露/降/率/传(zhuàn 义) 全表未使用
了(le/liǎo)、还(hái/huán)、得(de/děi) 常规句式常见读法,逐句人工试听项(z1_staye「听见了」、l1_goe 等)
数字 句内数字全部写死(十一点半/十五分钟/三公里/四十分钟前/零点),序号用分档整句(prog_c1..c5)

台词侧自查

  • 单句 ≤40 字:全表最长 = p9(37 字),次长 sys_help(26 字)✓;NPC 句平均 ≤18 字(P4 语速感靠短句+逗号,不用 instruct 语速词)✓。
  • NPC ≤5 人、speaker+instruct 恒定、区分度风险逐个标注 ✓。
  • 称呼合规:来电者对主播只用「主播/您/谢谢你」,性别化称呼仅指向来电者自身或第三方 ✓。
  • 每个结局(e1..e4)专属主句+钩子各 2 句齐备,尾声救/错过双线齐备 ✓。
  • 归因真话律:负向收尾句(z1_bade/k1_lulle/k1_liee/ep_*_no/e4_b)全部指向玩家实际选择,无假归因句 ✓。
  • 向导 gd_* 6 句(gd_brief/gd_continue/gd_again/gd_invalid/gd_ring1/gd_ring2)符合 14 号 §6 台词规范(一句一义、无重复句式、单句 ≤15 字)✓。