diff --git a/.gitignore b/.gitignore index 0cfab4cb..8de1c673 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ __pycache__/ web/teahouse/gen/staging/ tools/gen_rhythm_syn_wav/ tools/gen_space_syn_wav/ +tools/gen_simon_syn_wav/ diff --git a/docs/design/02-simon-redesign.md b/docs/design/02-simon-redesign.md index 279022b5..fac79860 100644 --- a/docs/design/02-simon-redesign.md +++ b/docs/design/02-simon-redesign.md @@ -121,3 +121,38 @@ interval(round) = max(420, 700 - (round - 1) * 25) // 第 12 轮才到 420ms - 新录:§3.2 全部(约 45 句 × 2 音色 = 90 条 × 2 格式)。 - 保留:6 个 tone、sfx/gameover。 - 更新 `web/simon/README.md` 玩法描述与 `gen/gen_voice.py` 的 `LINES` 表(文本表驱动,female/male 两跑)。 + +--- + +## 9. 修订记录(追加;旧文不动) + +### round5(2026-09-14,research/simon-polish/round1 取证 → round2 修复;S1-S7) + +用户真机反馈"玩法保留,但不清楚自己当前的状态"。round1 取证(剧本转写 + live 两会话: +认真新手局 13 轮 + 急性子乱按局)落成 S1-S8(research/simon-polish/round1/findings.md), +本轮修复 S1-S7,**玩法零改动,只加状态透明层**: + +1. **S2 · input 开放标记音 `sfx/input_open`**:`_toInput` 播放(游戏层资产,三档 + guide / iOS 无震动全可闻)。confirm 震只标记"播放完毕",占用预告/your_turn 语音 + 链播完才真开放——取证中该窗口内作答被静默吞(live-A 行 108-115)。无语音链的 + 轮次不再叠向导 turn earcon,input_open 独立作边界标记(二选一不叠响)。 +2. **S1/S3/S4 · input 阶段长按=状态查询**(`_statusQuery`,13 句 `status_*` 分档 + 整句,见 02b 追加节):长度 4 档 × 进度 4 档 × 重听账目 5 档(下一次重听消耗哪个 + 桶,与 §6.3 两账口径一致)。长按是六手势全被玩法占用下唯一的空闲键位(键盘= + 按住空格,00 §5.5 通道自动获得);玩家主动查询,三档 guide 全可用,不耗账、 + 不判错、不清进度、不闭作答窗口。查询只绑定 input 阶段——playback 维持纯聆听 + 豁免(§4.1),查询语音会污染记忆任务。 +3. **S5 · announce/roundend 误触给 error 震**:非单击手势在播报/表扬链期间不再 + 静默吞(00 §5.4 三秒反馈律);playback 维持 §4.1 静默豁免不动。 +4. **S6 · 结算语音链阶段看守**:链只在结算屏交付——gameover 瞬间下滑进菜单则挂起, + 回结算屏补播(`_deliverSettle`/`_backToSettle`)。承诺「单击屏幕,再来一局」 + 永远与所处相位一致(取证:链在菜单内播完 → 承诺在菜单内是假的 → 关菜单后结算 + 屏死寂 8.4s,live-B 行 140-174)。重开/回大厅作废挂起链。 +5. **S7 · `your_turn` 每局一次**:第 1 轮复活/重听的重播不再重念(取证一局三遍, + live-B 行 67/96-98)。 + +验证:playtest 156 断言全绿(新增 S2-S7 断言 + 场景三专项);guide.test 122 断言 +全绿;check_all_assets 15 游戏全绿;其余 14 款游戏 playtest 回归全绿。修后 live +两会话复跑(research/simon-polish/round2/):核对局 V 14/14、压力局 P 8/8 断言通过, +ASR 非 OK 行全部归因玩家自裁(跳旁白截断/短句同音近失/补播抢占),无游戏自残; +四人设复审闭环(round2/p*.md,状态感知 2/5→4/5 across 四席,P0 清零)。 diff --git a/docs/design/02-simon-voice-ids.md b/docs/design/02-simon-voice-ids.md index 24083674..a9163e3c 100644 --- a/docs/design/02-simon-voice-ids.md +++ b/docs/design/02-simon-voice-ids.md @@ -50,3 +50,39 @@ web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载 | `gd_occ_up` | 这一轮,按上方向键是作答。 | | `gd_occ_dt` | 这一轮,按回车是作答。 | | `gd_occ_both` | 这一轮,按上方向键和回车都是作答。 | + +--- + +## 状态查询整句(status_*,round5,simon-polish round1 取证 S1/S3/S4 追加,13 句) + +> input 阶段**长按=问状态**(触屏长按 / 键盘按住空格)——六手势全是答题输入下唯一空闲 +> 键位。三句链:本轮长度档 → 已答进度档 → 重听账目档(下一次重听消耗哪个桶,与 +> `_relisten` 两账口径一致)。玩家主动查询,**三档 guide 全可用**(游戏层资产,不 +> 走向导插播通道);不耗账、不判错、不清进度、不闭作答窗口。全部数字分档整句, +> 禁运行时拼接(00 §3.2)。不含操作词,无需键盘变体。 +> 资产:×2 性别 = 13×2 条、×2 格式 = 13×4 文件;管线 `gen_voice_dual.py --only …` +> 生成 → `--convert` 落盘,终检 `tools/check_all_assets.py`。 + +| id | 台词全文 | 分档 | +|---|---|---| +| `status_len_short` | 这一轮很短。 | 序列 2-4 音(第 1-3 轮) | +| `status_len_mid` | 这一轮不长不短。 | 序列 5-8 音(第 4-7 轮) | +| `status_len_long` | 这一轮挺长。 | 序列 9-12 音(第 8-11 轮) | +| `status_len_xlong` | 这一轮很长,稳住。 | 序列 13+ 音(第 12 轮起) | +| `status_prog_start` | 刚开头,一个还没对。 | 已答 0 | +| `status_prog_early` | 刚答了个开头。 | 已答 ≤ 1/3 | +| `status_prog_half` | 答了一半左右。 | 已答 ≤ 2/3 | +| `status_prog_late` | 就剩最后几个了。 | 已答 > 2/3 | +| `status_free2` | 免费重听还有两次。 | 免费余 2(下一次重听免费) | +| `status_free1` | 免费重听还有一次。 | 免费余 1(下一次重听免费) | +| `status_chance2` | 免费用完,机会还剩两次。 | 免费 0、真机会 2 | +| `status_chance1` | 免费用完,机会还剩一次。 | 免费 0、真机会 1 | +| `status_out` | 免费和机会都用完了,答错就结束。 | 两账皆空 | + +## 程序合成音效(sfx/input_open,round5 S2) + +> 「答题窗口开放」标记音:confirm 震只标记"播放完毕",占用预告/your_turn 语音链 +> 播完才真开放(此前作答被静默吞)。游戏层资产、不走向导层——guide=off / iOS +> 无震动(00 §2.5)下仍有听觉边界;无语音链的轮次不叠向导 turn earcon,二选一。 +> 双音上行柔铃 B5→D6(0.38s,TP -3.6dBFS),与 6 手势音色及 turn earcon 错开。 +> 管线 `tools/gen_simon_syn.py`(去直流 + 8ms cos² + 真峰值 ≤-3dBFS + 编码回读校验)。 diff --git a/research/simon-polish/round1/driver.mjs b/research/simon-polish/round1/driver.mjs new file mode 100644 index 00000000..897f2a96 --- /dev/null +++ b/research/simon-polish/round1/driver.mjs @@ -0,0 +1,280 @@ +/** + * simon live 玩家驱动(round1 取证)。 + * 两种人设策略: + * node driver.mjs A —— 认真新手:听完整教学、听轮次播报、凭"听觉"复现(以事件流 + * 重构的序列充当完美记忆),测试免费重听经济句,打到高轮次。 + * node driver.mjs B —— 急性子乱按:连点跳旁白、播放期乱滑、乱答、长按、结算乱按。 + * 决策只看事件流(vstart/vend/sfx start/vibrate),等价"听到什么做什么"。 + */ +const BASE = 'http://localhost:8143'; +const MODE = process.argv[2] || 'A'; + +async function post(p, body) { + const r = await fetch(BASE + p, { + method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body || {}), + }); + const j = await r.json(); + if (!r.ok || j.ok === false) throw new Error(`${p}: ${JSON.stringify(j)}`); + return j; +} +async function evq(since) { + const r = await fetch(`${BASE}/events?since=${since}`); + return r.json(); +} +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); + +const G2E = { up: 'swipeup', down: 'swipedown', left: 'swipeleft', right: 'swiperight', tap: 'tap', doubletap: 'doubletap' }; +const TONE2G = { + tone_up: 'up', tone_down: 'down', tone_left: 'left', tone_right: 'right', + tone_tap: 'tap', tone_doubletap: 'doubletap', +}; +const vid = (url) => String(url || '').split('/').pop().replace(/\.\w+$/, ''); +const isTone = (id) => id.startsWith('tone_'); + +const w = { since: 0, all: [] }; +async function poll() { + const { events: evs, next } = await evq(w.since); + w.since = next; + for (const e of evs) w.all.push(e); + return evs; +} +async function until(cond, { timeout = 60000, step = 120 } = {}) { + const t0 = Date.now(); + for (;;) { + const evs = await poll(); + const hit = evs.filter(cond); + if (hit.length) return hit; + if (Date.now() - t0 > timeout) throw new Error(`until 超时(${Date.now() - t0}ms)`); + await sleep(step); + } +} +async function gesture(name, note) { + if (note) console.log(` [我] ${note} → ${name}`); + else console.log(` [我] ${name}`); + await post('/gesture', { type: name }); +} +const voiceBusy = () => { + for (let i = w.all.length - 1; i >= 0; i--) { + const e = w.all[i]; + if (e.ev === 'vend') return false; + if (e.ev === 'vstart') return true; + } + return false; +}; +async function waitQuiet(extra = 300) { + for (;;) { + await poll(); + if (!voiceBusy()) break; + await sleep(150); + } + await sleep(extra); +} + +/** + * 收集一轮 playback:从调用时刻起,tone+紧随 beat 震 = 序列音;confirm 震 = 边界。 + * 返回 { seq, confirmIdx }(confirmIdx = w.all 中边界震的下标)。 + */ +async function collectPlayback() { + const mark = w.all.length; + await until((e) => e.ev === 'vibrate' && e.pattern === '[20]', { timeout: 40000 }); + let confirmIdx = w.all.length - 1; + // 音/震次序不保证(play 异步时 beat 可能先 push):窗口内 tone 数 == beat 数即可, + // 按 tone 出现顺序取序列(input 回声在 confirm 之后,落不进窗口)。 + const seq = []; + let beats = 0; + for (let i = mark; i <= confirmIdx; i++) { + const e = w.all[i]; + if (e.ev === 'vibrate' && e.pattern === '[8]') beats++; + else if (e.ev === 'start' && e.layer !== 'voice' && isTone(vid(e.url))) seq.push(TONE2G[vid(e.url)]); + } + if (beats !== seq.length) console.log(` [!] 窗口内 beat=${beats} 与音数=${seq.length} 不齐`); + return { seq, confirmIdx }; +} + +/** 答一个音:回声 tone 必须在 1.5s 内出现,否则重发(吞手势检测,仅驱动自用)。 */ +async function answerOne(g) { + for (let tries = 0; tries < 3; tries++) { + const mark = w.all.length; + await post('/gesture', { type: G2E[g] }); + const t0 = Date.now(); + for (;;) { + const evs = await poll(); + if (evs.some((e) => e.ev === 'start' && isTone(vid(e.url)))) return; + if (Date.now() - t0 > 1500) break; + await sleep(120); + } + console.log(` [!] ${g} 被吞(无回声),重发`); + } + throw new Error(`手势 ${g} 连续被吞`); +} + +async function answerAll(seq) { + for (const g of seq) await answerOne(g); +} + +// ---------------------------------------------------------------- 局 A:认真新手 +async function runA() { + console.log('== 局 A(认真新手,female/normal/guide full)'); + await post('/session', { game: 'simon', settings: { voice: 'female', speed: 'normal', bgm: 'normal', guide: 'full' } }); + await until((e) => e.ev === 'probe_ready', { timeout: 30000 }); + await sleep(800); + await gesture('tap', '解锁启动遮罩'); + + const teach = ['up', 'down', 'left', 'right', 'tap', 'doubletap']; + let ti = 0; + while (ti < teach.length) { + const idWant = `t${ti + 1}_${teach[ti] === 'doubletap' ? 'double' : teach[ti]}`; + const hit = await until((e) => e.ev === 'vstart' && vid(e.url) === idWant, { timeout: 40000 }); + console.log(` [听] 教学语音:${vid(hit[0].url)}`); + await until((e) => e.ev === 'vstart' && vid(e.url) === 't_try', { timeout: 20000 }); + await waitQuiet(200); + if (ti === 2) { + await gesture('swiperight', '故意把左滑做成右滑'); + await until((e) => e.ev === 'vstart' && vid(e.url) === 't_wrong_left', { timeout: 10000 }); + console.log(' [听] 纠错:t_wrong_left'); + await waitQuiet(200); + } + await gesture(G2E[teach[ti]], `照做「${teach[ti]}」`); + ti++; + } + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 30000 }); + console.log(' [听] 教学收尾完毕,进第 1 轮'); + + let round = 1; // 第 1 轮播报已在教学收尾 until 听到 + let announceId = 'round_01'; + let relistens = 0; + const planRelisten = { 5: true, 7: true }; + for (;;) { + const { seq: heard } = await collectPlayback(); + console.log(`-- 第 ${round} 轮(${announceId}):序列 ${heard.length} 个音:${heard.join(' ')}`); + if (heard.length !== round + 1) console.log(` [!] 序列长度 ${heard.length} ≠ round+1=${round + 1}`); + let seq = heard; + + if (planRelisten[round]) { + // 先把前缀的 up 答掉(期望恰为 up 时上滑=作答,不会触发重听) + while (seq.length && seq[0] === 'up') { await answerOne('up'); seq.shift(); } + } + if (planRelisten[round] && seq.length) { + relistens++; + await gesture('swipeup', `想不起来了,主动重听(第 ${relistens} 次)`); + await until((e) => e.ev === 'vstart' && vid(e.url) === 'relisten', { timeout: 10000 }); + console.log(' [听] relisten + 余量句链播'); + const rep = await collectPlayback(); // 重播同一序列(进度清零) + seq = rep.seq; + console.log(` [听] 重播 ${seq.length} 个音:${seq.join(' ')}`); + } + + await waitQuiet(300); // 占用预告/轮到你了语音播完(第 1 轮 your_turn) + if (round >= 13) { + // 高轮后故意三连错耗尽复活 → 走完整结算(retry_use/chances_out/score_band/new_record) + for (let k = 0; k < 3; k++) { + const wrong = ['down', 'left', 'right', 'tap'].find((x) => x !== seq[0]); + await gesture(G2E[wrong], `故意答错(第 ${k + 1} 次)`); + if (k < 2) { + await until((e) => e.ev === 'vstart' && vid(e.url) === 'retry_use', { timeout: 10000 }); + console.log(' [听] retry_use(自动消耗机会,重播同一序列)'); + const rep = await collectPlayback(); + seq = rep.seq; + await waitQuiet(300); + } + } + } else { + await answerAll(seq); + } + // 追终局或下一轮 + const tail = await until( + (e) => e.ev === 'vstart' && (vid(e.url) === 'gameover' || vid(e.url).startsWith('score_band') || vid(e.url).startsWith('round_')), + { timeout: 25000 }, + ); + const tid = vid(tail[0].url); + if (tid === 'gameover' || tid.startsWith('score_band')) { + console.log(` [听] 结算开播:${tid}`); + await waitQuiet(600); + await gesture('tap', '结算播报完,单击再来一局'); + await until((e) => e.ev === 'vstart' && vid(e.url) === 'round_01', { timeout: 15000 }); + console.log(' [听] 新局开始'); + break; + } + round++; + announceId = tid; + } + // 新局打两轮,然后下滑进菜单体验菜单导航 + for (let r = 1; r <= 2; r++) { + const { seq } = await collectPlayback(); + console.log(`-- 新局第 ${r} 轮:${seq.join(' ')}`); + await waitQuiet(300); + await answerAll(seq); + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 20000 }).catch(() => {}); + } + await gesture('swipedown', '下滑开菜单'); + await until((e) => e.ev === 'vstart' && vid(e.url) === 'menu_open', { timeout: 8000 }); + await gesture('tap', '菜单里单击切到下一项'); + await gesture('tap', '再单击一项'); + await gesture('swipeup', '上滑听规则'); + await waitQuiet(300); + await gesture('doubletap', '双击确认当前项'); + await sleep(600); + console.log('== 局 A 结束'); +} + +// ---------------------------------------------------------------- 局 B:急性子乱按 +async function runB() { + console.log('== 局 B(急性子乱按,male/1.7/guide full)'); + await post('/session', { game: 'simon', settings: { voice: 'male', speed: '1.7', bgm: 'normal', guide: 'full' } }); + await until((e) => e.ev === 'probe_ready', { timeout: 30000 }); + await sleep(800); + await gesture('tap', '解锁'); + for (let i = 0; i < 3; i++) await gesture('tap', '连点跳开场旁白'); + await gesture('swipeleft', '教学里乱滑'); + await gesture('tap', '教学里连点'); + await gesture('swipedown', '下滑,跳教学'); + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 15000 }); + console.log(' [听] 进第 1 轮(教学被跳)'); + + const rnd = () => ['up', 'down', 'left', 'right', 'tap', 'doubletap'][Math.floor(Math.random() * 6)]; + let gameoverSeen = false; + for (let guard = 0; guard < 140 && !gameoverSeen; guard++) { + const evs = await poll(); + for (const e of evs) { + if (e.ev === 'vstart' && vid(e.url) === 'gameover') { gameoverSeen = true; console.log(' [听] gameover'); } + } + if (gameoverSeen) break; + // 播放/重播中(最近事件有 beat 震):一半概率乱按 + if (evs.some((e) => e.ev === 'vibrate' && e.pattern === '[8]') && Math.random() < 0.5) { + await gesture(G2E[rnd()], '播放中乱按一气'); + continue; + } + // 轮次播报一响就跳 + if (evs.some((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'))) { + await gesture('tap', '跳轮次播报'); + } + await gesture(G2E[rnd()], '凭感觉乱答'); + await sleep(200); + } + await waitQuiet(400); + await gesture('swipeup', '结算后上滑听规则'); + await waitQuiet(200); + await gesture('tap', '结算里连点'); + await gesture('tap', '再点'); + await gesture('longpress', '长按试试'); + await gesture('swipedown', '下滑开菜单'); + await until((e) => e.ev === 'vstart' && vid(e.url) === 'menu_open', { timeout: 8000 }).catch(() => {}); + await gesture('tap', '菜单乱点'); + await gesture('swipeleft', '菜单乱滑'); + await gesture('doubletap', '菜单双击'); + await sleep(600); + console.log('== 局 B 结束'); +} + +const runner = MODE === 'B' ? runB : runA; +runner() + .then(async () => { + const stop = await post('/stop'); + console.log('落盘:', stop.outdir, stop.files?.length, '件,', stop.segs, '语音段,', stop.rows, '判定行'); + process.exit(0); + }) + .catch(async (e) => { + console.error('驱动出错:', e); + try { await post('/stop'); } catch (_) { /* 忽略 */ } + process.exit(1); + }); diff --git a/research/simon-polish/round1/findings.md b/research/simon-polish/round1/findings.md new file mode 100644 index 00000000..f12104d6 --- /dev/null +++ b/research/simon-polish/round1/findings.md @@ -0,0 +1,87 @@ +# 音序回响 round1 取证结论:状态盲区编号清单(S1..S8) + +> 证据来源: +> - **转写** = research/simon-polish/round1/transcript.md(剧本 transcribe.mjs 产物,行号) +> - **A** = research/simon-polish/round1/live-A-transcript.md(认真新手局,female/normal/guide full, +> 打到第 13 轮后故意三连错走完整结算;行号) +> - **B** = research/simon-polish/round1/live-B-transcript.md(急性子乱按局,male/1.7/guide full; +> 行号) +> - 驱动决策日志 live-A-driver.log / live-B-driver.log(含驱动侧"被吞重发"标记) +> 严重级:P0=核心循环断裂级 / P1=明显困惑 / P2=瑕疵。 + +--- + +## S1(P1)轮次 / 序列长度信息在跳过播报后永久丢失 +- 证据:B 行 4-18(连点把 t0_welcome/skip_hint/t0_goal/t1_up 全部跳过,每下只得到 + 一记 [20] 震与语音截断,没有"你跳到哪儿了"的确认);B 行 28-37(round_01 播报被 + 跳,6.1-8.6s 连按四轮手势全被吞,随后直接就是播放音——**玩家不知现在是第几轮、 + 这轮该听几个音**);对照 A 行 659-662(round_13 播报正常播完时信息是完整的)。 +- 影响:跳播报是 12 号文档给的合法加速手段,但跳完即失明;转写行 64「已对上 0/2」 + 这类进度信息只存在于 harness 旁白,**玩家侧没有任何等价物**。 + +## S2(P1)playback→input 边界在占用预告 / your_turn 语音链期间吞手势,"轮到你了"与"现在能答"之间无标记 +- 证据:A 行 108-115(t=75.44 confirm 震 → 75.45 gd_occ_dt 开播 → 75.75 驱动答 + 「right」**只有 [10] 识别震、无回声,被吞** → 78.12 重发才被收;驱动日志 + live-A-driver.log 行 20「right 被吞(无回声),重发」);B 行 42-46(gd_occ_up + 4 秒语音窗口内乱按全吞);B 行 47-49(your_turn 同样把 input 开放时间延后到语音 + 结束之后)。 +- 影响:真实玩家没有"回声缺失检测器"——按了没声,分不清是"手势没识别""还没轮到 + 我"还是"游戏卡了"。confirm 震标记的是"播放完毕",不是"可以作答";iOS / guide=off + 下连 confirm 外的向导标记都没有(00 §2.5)。 + +## S3(P1)复现进度(对了几 / 剩几)全程不可感知 +- 证据:转写行 90-95(R2 三音连答,中途只有回声,无任何进度信号);A 行 659-690 + 一带(第 13 轮 14 个音,复现中途断片只能靠心算计数);转写行 64/90/107/127/152 + 的「已对上 k/N」全部是 harness describe() 剧本旁白,非玩家可闻。 +- 影响:长轮次复现断片 = 不知道接着答还是重来(规则"重听清零整轮重输"也未在教学 + 讲明,见 S-list 外观察);对记忆类游戏是纯增压。 + +## S4(P1)两本账(免费重听 + 真机会)余额不可主动查询 +- 证据:账目只在消耗/获得瞬间播报——A 行 185-186(chance_plus)、205-208 + (gd_chances_left1)、306-309(gd_chances_left0)、732-736(chances_out); + input 阶段六手势全是答题输入,**无 status key**(space-polish round1 P1 同款诉求 + 在 simon 复发;上滑被重听占用、双击被第 6 音色占用,豁免表内唯一没留查询锚的 + 游戏之一)。 +- 影响:脑负荷最高的游戏里,"我还能重听几次"全凭几分钟前的记忆;遗忘的代价是 + 不敢重听(难度虚增)或误判余额(猝死)。 + +## S5(P1)非输入阶段(announce / roundend)手势静默吞,违反 00 §5.4"3 秒内必须有反馈" +- 证据:A 行 824-830(roundend 表扬链播时驱动下滑开菜单,**菜单没开成也没有任何 + 反馈**,随后 until 超时 8s——真实玩家此时只会反复滑);B 行 19-21(教学讲解期 + 乱滑仅 [10]);B 行 29-35(t_skip/round_01 播报期手势全吞)。 +- 影响:02 §4.1 只豁免了 playback 的静默;announce/roundend 不在豁免内却没反馈。 + 急性子玩家的所有"提前操作"都掉进无声洞,进一步强化"不知道自己在哪"。 + +## S6(P0)gameover 瞬间下滑进菜单 → 结算语音链在菜单里播完 → 结算承诺与所处阶段脱节,关闭菜单后结算屏静默 +- 证据:B 行 140-154(t=37.4 判死 → 37.65 乱按的下滑 → menu_open 38.02 → **结算链 + gameover/score_band1/replay/rules_prompt 全部在菜单内播完** 38.45-52.84);B 行 + 161-168(链尾 rules_prompt 承诺「单击屏幕,再来一局」,但 75.22/75.69 两次单击的 + 真实语义是 menu_home/menu_back 切项——**承诺在菜单内是假的**);B 行 170-174 + (77.17 下滑关菜单 → 结算屏 **77.5-85.9s 零语音 8.4 秒**,链已播完,玩家回到结算 + 页却什么都听不到,直到误打误撞再单击才重开)。 +- 影响:round1 live P0「言行一致」的同族漏洞——当时修的是"结算屏单击必须重开", + 但结算链**播放在哪个阶段没人看守**。压力线(真实玩家最常见的手型)必然踩中: + 死的那一刻手还在屏幕上。核心循环(死→听懂成绩→一键再来)断裂。 + +## S7(P2)第 1 轮每次重播都重复 your_turn +- 证据:B 行 67(27.48 your_turn)、B 行 96-98(35.29 your_turn)——round 1 两次 + 复活/重听重播各再播一遍「轮到你了。」;B 局 round 1 内共三遍。 +- 影响:不误导但啰嗦,与 14 号文档"提示永不逐字重复"精神相忤;每遍还占 input 开放 + 前的语音链时长(加重 S2 的吞手势窗口)。 + +## S8(P2)教学 → 对局过渡与菜单规则语音的叠话 +- 证据:B 行 155-160(菜单内上滑 rules 15.8s + rules_prompt,期间 menu 语音与规则 + 链叠播,菜单项状态被盖住)。 +- 影响:P2 瑕疵,不独立修(S6 的红elivery会自然改变该窗口的语音秩序),记录在案。 + +--- + +## S-list 外观察(非盲区,记录备查) +- 教学「重听=整轮清零重输」规则未在任何台词讲明(t7_retry 只讲"随时重听"); + 与 S3 叠加,建议查询句的进度语义顺带锚定"从头答"口径。 +- 结算五句链整体完整(A 行 773-784:gameover→score_band5→new_record→replay→ + rules_prompt 全兑现,score_band 与真实完成轮数一致),new_record 判定正确。 +- 答错复活链账目真实(A 行 694-696 / 732-736:retry_use 2→1、1→0+chances_out, + 与 chances=2 的账本一致)。 +- 单击重开言行一致在结算屏本身成立(A:结算播报完后单击 → round_01 立即开播)。 +- 菜单内单击切项+逐项播报在局 B 实测正常(B 行 161-168)。 diff --git a/research/simon-polish/round1/live-A-driver.log b/research/simon-polish/round1/live-A-driver.log new file mode 100644 index 00000000..36655b88 --- /dev/null +++ b/research/simon-polish/round1/live-A-driver.log @@ -0,0 +1,52 @@ +== 局 A(认真新手,female/normal/guide full) + [我] 解锁启动遮罩 → tap + [听] 教学语音:t1_up + [我] 照做「up」 → swipeup + [听] 教学语音:t2_down + [我] 照做「down」 → swipedown + [听] 教学语音:t3_left + [我] 故意把左滑做成右滑 → swiperight + [听] 纠错:t_wrong_left + [我] 照做「left」 → swipeleft + [听] 教学语音:t4_right + [我] 照做「right」 → swiperight + [听] 教学语音:t5_tap + [我] 照做「tap」 → tap + [听] 教学语音:t6_double + [我] 照做「doubletap」 → doubletap + [听] 教学收尾完毕,进第 1 轮 +-- 第 1 轮(round_01):序列 2 个音:right down +-- 第 2 轮(round_02):序列 3 个音:right down doubletap + [!] right 被吞(无回声),重发 +-- 第 3 轮(round_03):序列 4 个音:right down doubletap down +-- 第 4 轮(round_04):序列 5 个音:right down doubletap down up +-- 第 5 轮(round_05):序列 6 个音:right down doubletap down up tap + [我] 想不起来了,主动重听(第 1 次) → swipeup + [听] relisten + 余量句链播 + [听] 重播 6 个音:right down doubletap down up tap +-- 第 6 轮(round_06):序列 7 个音:right down doubletap down up tap right +-- 第 7 轮(round_07):序列 8 个音:right down doubletap down up tap right up + [我] 想不起来了,主动重听(第 2 次) → swipeup + [听] relisten + 余量句链播 + [听] 重播 8 个音:right down doubletap down up tap right up +-- 第 8 轮(round_08):序列 9 个音:right down doubletap down up tap right up down +-- 第 9 轮(round_09):序列 10 个音:right down doubletap down up tap right up down down +-- 第 10 轮(round_10):序列 11 个音:right down doubletap down up tap right up down down right +-- 第 11 轮(round_11):序列 12 个音:right down doubletap down up tap right up down down right left +-- 第 12 轮(round_12):序列 13 个音:right down doubletap down up tap right up down down right left up +-- 第 13 轮(round_13):序列 14 个音:right down doubletap down up tap right up down down right left up tap + [我] 故意答错(第 1 次) → swipedown + [听] retry_use(自动消耗机会,重播同一序列) + [我] 故意答错(第 2 次) → swipedown + [听] retry_use(自动消耗机会,重播同一序列) + [我] 故意答错(第 3 次) → swipedown + [听] 结算开播:gameover + [我] 结算播报完,单击再来一局 → tap + [听] 新局开始 +-- 新局第 1 轮:tap doubletap +-- 新局第 2 轮:tap doubletap doubletap + [我] 下滑开菜单 → swipedown +驱动出错: Error: until 超时(8115ms) + at until (file:///home/xsl/AutoVideo/SoundGame/research/simon-polish/round1/driver.mjs:47:42) + at process.processTicksAndRejections (node:internal/process/task_queues:103:5) + at async runA (file:///home/xsl/AutoVideo/SoundGame/research/simon-polish/round1/driver.mjs:210:3) diff --git a/research/simon-polish/round1/live-A-events.jsonl b/research/simon-polish/round1/live-A-events.jsonl new file mode 100644 index 00000000..c31da2f2 --- /dev/null +++ b/research/simon-polish/round1/live-A-events.jsonl @@ -0,0 +1,894 @@ +{"ev":"probe_ready","t":8.200000017881393,"ta":null} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":823.7000000178814,"ta":-0.074} +{"ev":"recstart","mime":"audio/webm;codecs=opus","t":897.5,"ta":0} +{"ev":"fetch","url":"audio/sfx/tone_up.ogg","status":200,"ok":true,"ms":14,"t":912,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_down.ogg","status":200,"ok":true,"ms":14,"t":912.5,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_left.ogg","status":200,"ok":true,"ms":15,"t":912.6000000238419,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_right.ogg","status":200,"ok":true,"ms":15,"t":912.7000000178814,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_tap.ogg","status":200,"ok":true,"ms":15,"t":912.8000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_doubletap.ogg","status":200,"ok":true,"ms":15,"t":912.9000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/gameover.ogg","status":200,"ok":true,"ms":15,"t":912.9000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/voice/female/t0_welcome.ogg","status":200,"ok":true,"ms":15,"t":913,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/t0_goal.ogg","status":200,"ok":true,"ms":15,"t":913,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/skip_hint.ogg","status":200,"ok":true,"ms":14,"t":913,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/t_try.ogg","status":200,"ok":true,"ms":15,"t":913.1000000238419,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/round_01.ogg","status":200,"ok":true,"ms":14,"t":913.1000000238419,"ta":0.016} +{"ev":"vstart","url":"audio/voice/female/t0_welcome.ogg","t":1399.6000000238419,"dur":4.24,"ta":0.502} +{"ev":"vend","url":"audio/voice/female/t0_welcome.ogg","t":5961.5,"reason":"kill","ta":5.064} +{"ev":"vstart","url":"audio/voice/female/skip_hint.ogg","t":5961.800000011921,"dur":1.6,"ta":5.064} +{"ev":"vend","url":"audio/voice/female/skip_hint.ogg","t":7563,"reason":"kill","ta":6.666} +{"ev":"vstart","url":"audio/voice/female/t0_goal.ogg","t":7563.200000017881,"dur":6.08,"ta":6.666} +{"ev":"vend","url":"audio/voice/female/t0_goal.ogg","t":13994.40000000596,"reason":"kill","ta":13.097} +{"ev":"fetch","url":"audio/voice/female/t1_up.ogg","status":200,"ok":true,"ms":3,"t":13997.200000017881,"ta":13.1} +{"ev":"vstart","url":"audio/voice/female/t1_up.ogg","t":14003.300000011921,"dur":4.64,"ta":13.106} +{"ev":"vend","url":"audio/voice/female/t1_up.ogg","t":18939.90000000596,"reason":"kill","ta":18.042} +{"ev":"start","t":18940.20000001788,"sid":1,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":18.043} +{"ev":"vstart","url":"audio/voice/female/t_try.ogg","t":19840.5,"dur":0.7970975056689342,"ta":18.943} +{"ev":"vend","url":"audio/voice/female/t_try.ogg","t":20611.600000023842,"reason":"kill","ta":19.714} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":20881.80000001192,"ta":19.984} +{"ev":"vibrate","pattern":"[10]","t":21242.30000001192,"ta":20.345} +{"ev":"start","t":21242.80000001192,"sid":2,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":20.345} +{"ev":"fetch","url":"audio/voice/female/t_ok.ogg","status":200,"ok":true,"ms":2,"t":21245,"ta":20.348} +{"ev":"vstart","url":"audio/voice/female/t_ok.ogg","t":21247.70000001788,"dur":0.4770975056689342,"ta":20.35} +{"ev":"vend","url":"audio/voice/female/t_ok.ogg","t":21726,"reason":"kill","ta":20.829} +{"ev":"fetch","url":"audio/voice/female/t2_down.ogg","status":200,"ok":true,"ms":3,"t":21728.70000001788,"ta":20.831} +{"ev":"vstart","url":"audio/voice/female/t2_down.ogg","t":21731.90000000596,"dur":2.24,"ta":20.834} +{"ev":"vend","url":"audio/voice/female/t2_down.ogg","t":24070.90000000596,"reason":"kill","ta":23.173} +{"ev":"start","t":24071.100000023842,"sid":3,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":23.174} +{"ev":"vstart","url":"audio/voice/female/t_try.ogg","t":24971.20000001788,"dur":0.7970975056689342,"ta":24.074} +{"ev":"vend","url":"audio/voice/female/t_try.ogg","t":25742.70000001788,"reason":"kill","ta":24.845} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":25947,"ta":25.05} +{"ev":"vibrate","pattern":"[10]","t":26308.100000023842,"ta":25.411} +{"ev":"start","t":26308.100000023842,"sid":4,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":25.411} +{"ev":"vstart","url":"audio/voice/female/t_ok.ogg","t":26308.30000001192,"dur":0.4770975056689342,"ta":25.411} +{"ev":"vend","url":"audio/voice/female/t_ok.ogg","t":26787.5,"reason":"kill","ta":25.89} +{"ev":"fetch","url":"audio/voice/female/t3_left.ogg","status":200,"ok":true,"ms":2,"t":26789.90000000596,"ta":25.892} +{"ev":"vstart","url":"audio/voice/female/t3_left.ogg","t":26793.5,"dur":2.64,"ta":25.896} +{"ev":"vend","url":"audio/voice/female/t3_left.ogg","t":29504.20000001788,"reason":"kill","ta":28.607} +{"ev":"start","t":29504.30000001192,"sid":5,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":28.607} +{"ev":"vstart","url":"audio/voice/female/t_try.ogg","t":30404.5,"dur":0.7970975056689342,"ta":29.507} +{"ev":"vend","url":"audio/voice/female/t_try.ogg","t":31175.5,"reason":"kill","ta":30.278} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":31382.90000000596,"ta":30.485} +{"ev":"vibrate","pattern":"[10]","t":31741.5,"ta":30.844} +{"ev":"vibrate","pattern":"[60,40,60]","t":31741.5,"ta":30.844} +{"ev":"fetch","url":"audio/voice/female/t_wrong_left.ogg","status":200,"ok":true,"ms":2,"t":31744,"ta":30.847} +{"ev":"vstart","url":"audio/voice/female/t_wrong_left.ogg","t":31748.100000023842,"dur":2.48,"ta":30.851} +{"ev":"vend","url":"audio/voice/female/t_wrong_left.ogg","t":34449.30000001192,"reason":"kill","ta":33.552} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":34803.60000002384,"ta":33.906} +{"ev":"vibrate","pattern":"[10]","t":35157.90000000596,"ta":34.26} +{"ev":"start","t":35158,"sid":6,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":34.261} +{"ev":"vstart","url":"audio/voice/female/t_ok.ogg","t":35158.10000002384,"dur":0.4770975056689342,"ta":34.261} +{"ev":"vend","url":"audio/voice/female/t_ok.ogg","t":35633.60000002384,"reason":"kill","ta":34.736} +{"ev":"fetch","url":"audio/voice/female/t4_right.ogg","status":200,"ok":true,"ms":2,"t":35636,"ta":34.739} +{"ev":"vstart","url":"audio/voice/female/t4_right.ogg","t":35638.70000001788,"dur":1.44,"ta":34.741} +{"ev":"vend","url":"audio/voice/female/t4_right.ogg","t":37235.60000002384,"reason":"kill","ta":36.338} +{"ev":"start","t":37235.60000002384,"sid":7,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":36.338} +{"ev":"vstart","url":"audio/voice/female/t_try.ogg","t":38135.90000000596,"dur":0.7970975056689342,"ta":37.238} +{"ev":"vend","url":"audio/voice/female/t_try.ogg","t":38907.10000002384,"reason":"kill","ta":38.01} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":39124.20000001788,"ta":38.227} +{"ev":"vibrate","pattern":"[10]","t":39474.5,"ta":38.577} +{"ev":"start","t":39474.60000002384,"sid":8,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":38.577} +{"ev":"vstart","url":"audio/voice/female/t_ok.ogg","t":39474.70000001788,"dur":0.4770975056689342,"ta":38.577} +{"ev":"vend","url":"audio/voice/female/t_ok.ogg","t":39952.10000002384,"reason":"kill","ta":39.055} +{"ev":"fetch","url":"audio/voice/female/t5_tap.ogg","status":200,"ok":true,"ms":2,"t":39954.5,"ta":39.057} +{"ev":"vstart","url":"audio/voice/female/t5_tap.ogg","t":39957.70000001788,"dur":1.6,"ta":39.06} +{"ev":"vend","url":"audio/voice/female/t5_tap.ogg","t":41554,"reason":"kill","ta":40.657} +{"ev":"start","t":41554.10000002384,"sid":9,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":40.657} +{"ev":"vstart","url":"audio/voice/female/t_try.ogg","t":42454.30000001192,"dur":0.7970975056689342,"ta":41.557} +{"ev":"vend","url":"audio/voice/female/t_try.ogg","t":43225.70000001788,"reason":"kill","ta":42.328} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":43437.80000001192,"ta":42.54} +{"ev":"vibrate","pattern":"[20]","t":43801.30000001192,"ta":42.904} +{"ev":"start","t":43801.5,"sid":10,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":42.904} +{"ev":"vstart","url":"audio/voice/female/t_ok.ogg","t":43801.60000002384,"dur":0.4770975056689342,"ta":42.904} +{"ev":"vend","url":"audio/voice/female/t_ok.ogg","t":44293.80000001192,"reason":"kill","ta":43.396} +{"ev":"fetch","url":"audio/voice/female/t6_double.ogg","status":200,"ok":true,"ms":3,"t":44296.40000000596,"ta":43.399} +{"ev":"vstart","url":"audio/voice/female/t6_double.ogg","t":44299.20000001788,"dur":2.16,"ta":43.402} +{"ev":"vend","url":"audio/voice/female/t6_double.ogg","t":46639,"reason":"kill","ta":45.742} +{"ev":"start","t":46639.10000002384,"sid":11,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":45.742} +{"ev":"vstart","url":"audio/voice/female/t_try.ogg","t":47539.30000001192,"dur":0.7970975056689342,"ta":46.642} +{"ev":"vend","url":"audio/voice/female/t_try.ogg","t":48310.5,"reason":"kill","ta":47.413} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":48579.80000001192,"ta":47.682} +{"ev":"vibrate","pattern":"[20]","t":48827.70000001788,"ta":47.93} +{"ev":"start","t":48827.90000000596,"sid":12,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":47.93} +{"ev":"vstart","url":"audio/voice/female/t_ok.ogg","t":48827.90000000596,"dur":0.4770975056689342,"ta":47.93} +{"ev":"vend","url":"audio/voice/female/t_ok.ogg","t":49308.90000000596,"reason":"kill","ta":48.411} +{"ev":"fetch","url":"audio/voice/female/t7_ready.ogg","status":200,"ok":true,"ms":3,"t":49311.40000000596,"ta":48.414} +{"ev":"vstart","url":"audio/voice/female/t7_ready.ogg","t":49316.10000002384,"dur":3.44,"ta":48.419} +{"ev":"vend","url":"audio/voice/female/t7_ready.ogg","t":52768.5,"reason":"kill","ta":51.871} +{"ev":"fetch","url":"audio/voice/female/t7_retry.ogg","status":200,"ok":true,"ms":3,"t":52771.30000001192,"ta":51.874} +{"ev":"vstart","url":"audio/voice/female/t7_retry.ogg","t":52778.20000001788,"dur":5.76,"ta":51.881} +{"ev":"vend","url":"audio/voice/female/t7_retry.ogg","t":58735.5,"reason":"kill","ta":57.838} +{"ev":"fetch","url":"audio/voice/female/gd_economy.ogg","status":200,"ok":true,"ms":3,"t":58738.20000001788,"ta":57.841} +{"ev":"vstart","url":"audio/voice/female/gd_economy.ogg","t":58744.80000001192,"dur":6.72,"ta":57.847} +{"ev":"vend","url":"audio/voice/female/gd_economy.ogg","t":65538.20000001788,"reason":"kill","ta":64.641} +{"ev":"vstart","url":"audio/voice/female/round_01.ogg","t":65538.70000001788,"dur":1.52,"ta":64.641} +{"ev":"vend","url":"audio/voice/female/round_01.ogg","t":67140.20000001788,"reason":"kill","ta":66.243} +{"ev":"vibrate","pattern":"[8]","t":67140.40000000596,"ta":66.243} +{"ev":"start","t":67140.5,"sid":13,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":66.243} +{"ev":"vibrate","pattern":"[8]","t":67840.70000001788,"ta":66.943} +{"ev":"start","t":67840.80000001192,"sid":14,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":66.943} +{"ev":"vibrate","pattern":"[20]","t":68941,"ta":68.044} +{"ev":"fetch","url":"audio/voice/female/your_turn.ogg","status":200,"ok":true,"ms":3,"t":68944.60000002384,"ta":68.047} +{"ev":"vstart","url":"audio/voice/female/your_turn.ogg","t":68947.30000001192,"dur":0.7970975056689342,"ta":68.05} +{"ev":"vend","url":"audio/voice/female/your_turn.ogg","t":69717.5,"reason":"kill","ta":68.82} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":70135.10000002384,"ta":69.238} +{"ev":"vibrate","pattern":"[10]","t":70490.10000002384,"ta":69.593} +{"ev":"start","t":70490.20000001788,"sid":15,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":69.593} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":70897.70000001788,"ta":70} +{"ev":"vibrate","pattern":"[10]","t":71256.5,"ta":70.359} +{"ev":"vibrate","pattern":"[100]","t":71256.70000001788,"ta":70.359} +{"ev":"start","t":71256.90000000596,"sid":16,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":70.359} +{"ev":"fetch","url":"audio/voice/female/correct.ogg","status":200,"ok":true,"ms":3,"t":71259.20000001788,"ta":70.362} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":71261.90000000596,"dur":0.6370975056689342,"ta":70.364} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":72016.10000002384,"reason":"kill","ta":71.119} +{"ev":"fetch","url":"audio/voice/female/round_02.ogg","status":200,"ok":true,"ms":3,"t":72319.20000001788,"ta":71.422} +{"ev":"vstart","url":"audio/voice/female/round_02.ogg","t":72322.5,"dur":1.44,"ta":71.425} +{"ev":"vend","url":"audio/voice/female/round_02.ogg","t":73920.20000001788,"reason":"kill","ta":73.023} +{"ev":"vibrate","pattern":"[8]","t":73920.20000001788,"ta":73.023} +{"ev":"start","t":73920.30000001192,"sid":17,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":73.023} +{"ev":"vibrate","pattern":"[8]","t":74594.40000000596,"ta":73.697} +{"ev":"start","t":74594.5,"sid":18,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":73.697} +{"ev":"vibrate","pattern":"[8]","t":75268.60000002384,"ta":74.371} +{"ev":"start","t":75268.70000001788,"sid":19,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":74.371} +{"ev":"vibrate","pattern":"[20]","t":76342.90000000596,"ta":75.445} +{"ev":"fetch","url":"audio/voice/female/gd_occ_dt.ogg","status":200,"ok":true,"ms":3,"t":76345.80000001192,"ta":75.448} +{"ev":"vstart","url":"audio/voice/female/gd_occ_dt.ogg","t":76349.10000002384,"dur":1.68,"ta":75.452} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":76648.5,"ta":75.751} +{"ev":"vibrate","pattern":"[10]","t":77006.5,"ta":76.109} +{"ev":"vend","url":"audio/voice/female/gd_occ_dt.ogg","t":78215.30000001192,"reason":"kill","ta":77.318} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":79015.60000002384,"ta":78.118} +{"ev":"vibrate","pattern":"[10]","t":79372.80000001192,"ta":78.475} +{"ev":"start","t":79372.90000000596,"sid":20,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":78.475} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":79779.80000001192,"ta":78.882} +{"ev":"vibrate","pattern":"[10]","t":80139.20000001788,"ta":79.242} +{"ev":"start","t":80139.30000001192,"sid":21,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":79.242} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":80545.60000002384,"ta":79.648} +{"ev":"vibrate","pattern":"[20]","t":80792.60000002384,"ta":79.895} +{"ev":"vibrate","pattern":"[100]","t":80792.70000001788,"ta":79.895} +{"ev":"start","t":80793,"sid":22,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":79.896} +{"ev":"fetch","url":"audio/voice/female/gd_clear.ogg","status":200,"ok":true,"ms":3,"t":80795.20000001788,"ta":79.898} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":80798.80000001192,"dur":1.84,"ta":79.901} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":82673.20000001788,"reason":"kill","ta":81.776} +{"ev":"fetch","url":"audio/voice/female/round_03.ogg","status":200,"ok":true,"ms":3,"t":82975.90000000596,"ta":82.078} +{"ev":"vstart","url":"audio/voice/female/round_03.ogg","t":82979,"dur":1.68,"ta":82.082} +{"ev":"vend","url":"audio/voice/female/round_03.ogg","t":84855.60000002384,"reason":"kill","ta":83.958} +{"ev":"vibrate","pattern":"[8]","t":84855.70000001788,"ta":83.958} +{"ev":"start","t":84855.90000000596,"sid":23,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":83.958} +{"ev":"vibrate","pattern":"[8]","t":85503.90000000596,"ta":84.606} +{"ev":"start","t":85504.10000002384,"sid":24,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":84.607} +{"ev":"vibrate","pattern":"[8]","t":86152,"ta":85.255} +{"ev":"start","t":86152.20000001788,"sid":25,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":85.255} +{"ev":"vibrate","pattern":"[8]","t":86800.30000001192,"ta":85.903} +{"ev":"start","t":86800.40000000596,"sid":26,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":85.903} +{"ev":"vibrate","pattern":"[20]","t":87848.60000002384,"ta":86.951} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":88276.40000000596,"ta":87.379} +{"ev":"vibrate","pattern":"[10]","t":88639.10000002384,"ta":87.742} +{"ev":"start","t":88639.20000001788,"sid":27,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":87.742} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":89045.40000000596,"ta":88.148} +{"ev":"vibrate","pattern":"[10]","t":89405.70000001788,"ta":88.508} +{"ev":"start","t":89405.80000001192,"sid":28,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":88.508} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":89812.5,"ta":88.915} +{"ev":"vibrate","pattern":"[20]","t":90059.20000001788,"ta":89.162} +{"ev":"start","t":90059.30000001192,"sid":29,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":89.162} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":90466.80000001192,"ta":89.569} +{"ev":"vibrate","pattern":"[10]","t":90822.5,"ta":89.925} +{"ev":"vibrate","pattern":"[100]","t":90822.60000002384,"ta":89.925} +{"ev":"start","t":90822.70000001788,"sid":30,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":89.925} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":90822.80000001192,"dur":0.6370975056689342,"ta":89.925} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":91589,"reason":"kill","ta":90.692} +{"ev":"fetch","url":"audio/voice/female/round_04.ogg","status":200,"ok":true,"ms":3,"t":91892.20000001788,"ta":90.995} +{"ev":"vstart","url":"audio/voice/female/round_04.ogg","t":91895.80000001192,"dur":1.84,"ta":90.998} +{"ev":"vend","url":"audio/voice/female/round_04.ogg","t":93771.5,"reason":"kill","ta":92.874} +{"ev":"vibrate","pattern":"[8]","t":93771.5,"ta":92.874} +{"ev":"start","t":93771.60000002384,"sid":31,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":92.874} +{"ev":"vibrate","pattern":"[8]","t":94393.70000001788,"ta":93.496} +{"ev":"start","t":94393.70000001788,"sid":32,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":93.496} +{"ev":"vibrate","pattern":"[8]","t":95015.80000001192,"ta":94.118} +{"ev":"start","t":95015.90000000596,"sid":33,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":94.118} +{"ev":"vibrate","pattern":"[8]","t":95638,"ta":94.741} +{"ev":"start","t":95638.10000002384,"sid":34,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":94.741} +{"ev":"vibrate","pattern":"[8]","t":96260.20000001788,"ta":95.363} +{"ev":"start","t":96260.30000001192,"sid":35,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":95.363} +{"ev":"vibrate","pattern":"[20]","t":97282.5,"ta":96.385} +{"ev":"fetch","url":"audio/voice/female/gd_occ_both.ogg","status":200,"ok":true,"ms":3,"t":97285.20000001788,"ta":96.388} +{"ev":"vstart","url":"audio/voice/female/gd_occ_both.ogg","t":97289.90000000596,"dur":2.72,"ta":96.392} +{"ev":"vend","url":"audio/voice/female/gd_occ_both.ogg","t":99993.80000001192,"reason":"kill","ta":99.096} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":100445.20000001788,"ta":99.548} +{"ev":"vibrate","pattern":"[10]","t":100805.20000001788,"ta":99.908} +{"ev":"start","t":100805.30000001192,"sid":36,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":99.908} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":101210,"ta":100.313} +{"ev":"vibrate","pattern":"[10]","t":101571.70000001788,"ta":100.674} +{"ev":"start","t":101571.90000000596,"sid":37,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":100.674} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":101979,"ta":101.082} +{"ev":"vibrate","pattern":"[20]","t":102225.30000001192,"ta":101.328} +{"ev":"start","t":102225.30000001192,"sid":38,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":101.328} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":102632.5,"ta":101.735} +{"ev":"vibrate","pattern":"[10]","t":102988.20000001788,"ta":102.091} +{"ev":"start","t":102988.30000001192,"sid":39,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":102.091} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":103393.60000002384,"ta":102.496} +{"ev":"vibrate","pattern":"[10]","t":103755.10000002384,"ta":102.858} +{"ev":"vibrate","pattern":"[100]","t":103755.10000002384,"ta":102.858} +{"ev":"vibrate","pattern":"[15]","t":103755.20000001788,"ta":102.858} +{"ev":"start","t":103755.30000001192,"sid":40,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":102.858} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":103755.30000001192,"dur":1.84,"ta":102.858} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":105635.70000001788,"reason":"kill","ta":104.738} +{"ev":"fetch","url":"audio/voice/female/chance_plus.ogg","status":200,"ok":true,"ms":3,"t":105638.40000000596,"ta":104.741} +{"ev":"vstart","url":"audio/voice/female/chance_plus.ogg","t":105641.90000000596,"dur":1.44,"ta":104.744} +{"ev":"vend","url":"audio/voice/female/chance_plus.ogg","t":107237.90000000596,"reason":"kill","ta":106.34} +{"ev":"fetch","url":"audio/voice/female/round_05.ogg","status":200,"ok":true,"ms":3,"t":107540.70000001788,"ta":106.643} +{"ev":"vstart","url":"audio/voice/female/round_05.ogg","t":107545.10000002384,"dur":2.96,"ta":106.648} +{"ev":"vibrate","pattern":"[8]","t":110038.5,"ta":109.141} +{"ev":"start","t":110038.60000002384,"sid":41,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":109.141} +{"ev":"vend","url":"audio/voice/female/round_05.ogg","t":110534.90000000596,"reason":"kill","ta":109.637} +{"ev":"vibrate","pattern":"[8]","t":110634.70000001788,"ta":109.737} +{"ev":"start","t":110634.80000001192,"sid":42,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":109.737} +{"ev":"vibrate","pattern":"[8]","t":111230.80000001192,"ta":110.333} +{"ev":"start","t":111230.90000000596,"sid":43,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":110.333} +{"ev":"vibrate","pattern":"[8]","t":111827,"ta":110.93} +{"ev":"start","t":111827.10000002384,"sid":44,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":110.93} +{"ev":"vibrate","pattern":"[8]","t":112423.20000001788,"ta":111.526} +{"ev":"start","t":112423.20000001788,"sid":45,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":111.526} +{"ev":"vibrate","pattern":"[8]","t":113019.30000001192,"ta":112.122} +{"ev":"start","t":113019.40000000596,"sid":46,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":112.122} +{"ev":"vibrate","pattern":"[20]","t":114015.60000002384,"ta":113.118} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":114139.80000001192,"ta":113.242} +{"ev":"vibrate","pattern":"[10]","t":114505,"ta":113.608} +{"ev":"vibrate","pattern":"[15]","t":114505.20000001788,"ta":113.608} +{"ev":"fetch","url":"audio/voice/female/relisten.ogg","status":200,"ok":true,"ms":3,"t":114508,"ta":113.611} +{"ev":"vstart","url":"audio/voice/female/relisten.ogg","t":114510.90000000596,"dur":0.7996371882086167,"ta":113.613} +{"ev":"vend","url":"audio/voice/female/relisten.ogg","t":115271.20000001788,"reason":"kill","ta":114.374} +{"ev":"fetch","url":"audio/voice/female/gd_chances_left1.ogg","status":200,"ok":true,"ms":3,"t":115273.70000001788,"ta":114.376} +{"ev":"vstart","url":"audio/voice/female/gd_chances_left1.ogg","t":115277.30000001192,"dur":1.52,"ta":114.38} +{"ev":"vend","url":"audio/voice/female/gd_chances_left1.ogg","t":116873.40000000596,"reason":"kill","ta":115.976} +{"ev":"vibrate","pattern":"[8]","t":116873.5,"ta":115.976} +{"ev":"start","t":116873.5,"sid":47,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":115.976} +{"ev":"vibrate","pattern":"[8]","t":117469.70000001788,"ta":116.572} +{"ev":"start","t":117469.80000001192,"sid":48,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":116.572} +{"ev":"vibrate","pattern":"[8]","t":118065.90000000596,"ta":117.168} +{"ev":"start","t":118066,"sid":49,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":117.169} +{"ev":"vibrate","pattern":"[8]","t":118662,"ta":117.765} +{"ev":"start","t":118662.10000002384,"sid":50,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":117.765} +{"ev":"vibrate","pattern":"[8]","t":119258.30000001192,"ta":118.361} +{"ev":"start","t":119258.30000001192,"sid":51,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":118.361} +{"ev":"vibrate","pattern":"[8]","t":119854.5,"ta":118.957} +{"ev":"start","t":119854.5,"sid":52,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":118.957} +{"ev":"vibrate","pattern":"[20]","t":120850.70000001788,"ta":119.953} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":121243,"ta":120.346} +{"ev":"vibrate","pattern":"[10]","t":121604.60000002384,"ta":120.707} +{"ev":"start","t":121604.70000001788,"sid":53,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":120.707} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":122011.40000000596,"ta":121.114} +{"ev":"vibrate","pattern":"[10]","t":122371.20000001788,"ta":121.474} +{"ev":"start","t":122371.30000001192,"sid":54,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":121.474} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":122777.40000000596,"ta":121.88} +{"ev":"vibrate","pattern":"[20]","t":123024.30000001192,"ta":122.127} +{"ev":"start","t":123024.40000000596,"sid":55,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":122.127} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":123431.70000001788,"ta":122.534} +{"ev":"vibrate","pattern":"[10]","t":123788.10000002384,"ta":122.891} +{"ev":"start","t":123788.20000001788,"sid":56,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":122.891} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":124195.70000001788,"ta":123.298} +{"ev":"vibrate","pattern":"[10]","t":124554.10000002384,"ta":123.657} +{"ev":"start","t":124554.20000001788,"sid":57,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":123.657} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":124960.5,"ta":124.063} +{"ev":"vibrate","pattern":"[20]","t":125323.60000002384,"ta":124.426} +{"ev":"vibrate","pattern":"[100]","t":125323.70000001788,"ta":124.426} +{"ev":"start","t":125323.80000001192,"sid":58,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":124.426} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":125324,"dur":0.6370975056689342,"ta":124.427} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":126090.90000000596,"reason":"kill","ta":125.193} +{"ev":"fetch","url":"audio/voice/female/round_06.ogg","status":200,"ok":true,"ms":3,"t":126394,"ta":125.497} +{"ev":"vstart","url":"audio/voice/female/round_06.ogg","t":126397.80000001192,"dur":1.68,"ta":125.5} +{"ev":"vend","url":"audio/voice/female/round_06.ogg","t":128273.30000001192,"reason":"kill","ta":127.376} +{"ev":"vibrate","pattern":"[8]","t":128273.40000000596,"ta":127.376} +{"ev":"start","t":128273.5,"sid":59,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":127.376} +{"ev":"vibrate","pattern":"[8]","t":128843.70000001788,"ta":127.946} +{"ev":"start","t":128843.70000001788,"sid":60,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":127.946} +{"ev":"vibrate","pattern":"[8]","t":129413.80000001192,"ta":128.516} +{"ev":"start","t":129414,"sid":61,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":128.517} +{"ev":"vibrate","pattern":"[8]","t":129983.90000000596,"ta":129.086} +{"ev":"start","t":129984.10000002384,"sid":62,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":129.087} +{"ev":"vibrate","pattern":"[8]","t":130554.20000001788,"ta":129.657} +{"ev":"start","t":130554.30000001192,"sid":63,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":129.657} +{"ev":"vibrate","pattern":"[8]","t":131124.30000001192,"ta":130.227} +{"ev":"start","t":131124.5,"sid":64,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":130.227} +{"ev":"vibrate","pattern":"[8]","t":131694.60000002384,"ta":130.797} +{"ev":"start","t":131694.70000001788,"sid":65,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":130.797} +{"ev":"vibrate","pattern":"[20]","t":132664.80000001192,"ta":131.767} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":132996.30000001192,"ta":132.099} +{"ev":"vibrate","pattern":"[10]","t":133354.10000002384,"ta":132.457} +{"ev":"start","t":133354.30000001192,"sid":66,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":132.457} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":133760.30000001192,"ta":132.863} +{"ev":"vibrate","pattern":"[10]","t":134120.40000000596,"ta":133.223} +{"ev":"start","t":134120.5,"sid":67,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":133.223} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":134527.60000002384,"ta":133.63} +{"ev":"vibrate","pattern":"[20]","t":134774.20000001788,"ta":133.877} +{"ev":"start","t":134774.20000001788,"sid":68,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":133.877} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":135180.60000002384,"ta":134.283} +{"ev":"vibrate","pattern":"[10]","t":135537.10000002384,"ta":134.64} +{"ev":"start","t":135537.20000001788,"sid":69,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":134.64} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":135943.40000000596,"ta":135.046} +{"ev":"vibrate","pattern":"[10]","t":136304,"ta":135.407} +{"ev":"start","t":136304.10000002384,"sid":70,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":135.407} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":136710.60000002384,"ta":135.813} +{"ev":"vibrate","pattern":"[20]","t":137073.90000000596,"ta":136.176} +{"ev":"start","t":137074.10000002384,"sid":71,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":136.177} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":137179.60000002384,"ta":136.282} +{"ev":"vibrate","pattern":"[10]","t":137537.10000002384,"ta":136.64} +{"ev":"vibrate","pattern":"[100]","t":137537.10000002384,"ta":136.64} +{"ev":"start","t":137537.20000001788,"sid":72,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":136.64} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":137537.20000001788,"dur":1.84,"ta":136.64} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":139417.90000000596,"reason":"kill","ta":138.52} +{"ev":"fetch","url":"audio/voice/female/round_07.ogg","status":200,"ok":true,"ms":3,"t":139721.20000001788,"ta":138.824} +{"ev":"vstart","url":"audio/voice/female/round_07.ogg","t":139725.60000002384,"dur":2.96,"ta":138.828} +{"ev":"vibrate","pattern":"[8]","t":142218.40000000596,"ta":141.321} +{"ev":"start","t":142218.60000002384,"sid":73,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":141.321} +{"ev":"vend","url":"audio/voice/female/round_07.ogg","t":142714.90000000596,"reason":"kill","ta":141.817} +{"ev":"vibrate","pattern":"[8]","t":142762.70000001788,"ta":141.865} +{"ev":"start","t":142762.70000001788,"sid":74,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":141.865} +{"ev":"vibrate","pattern":"[8]","t":143306.80000001192,"ta":142.409} +{"ev":"start","t":143306.90000000596,"sid":75,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":142.409} +{"ev":"vibrate","pattern":"[8]","t":143851,"ta":142.954} +{"ev":"start","t":143851.10000002384,"sid":76,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":142.954} +{"ev":"vibrate","pattern":"[8]","t":144395.20000001788,"ta":143.498} +{"ev":"start","t":144395.40000000596,"sid":77,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":143.498} +{"ev":"vibrate","pattern":"[8]","t":144939.30000001192,"ta":144.042} +{"ev":"start","t":144939.5,"sid":78,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":144.042} +{"ev":"vibrate","pattern":"[8]","t":145483.5,"ta":144.586} +{"ev":"start","t":145483.60000002384,"sid":79,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":144.586} +{"ev":"vibrate","pattern":"[8]","t":146027.80000001192,"ta":145.13} +{"ev":"start","t":146027.90000000596,"sid":80,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":145.13} +{"ev":"vibrate","pattern":"[20]","t":146972.10000002384,"ta":146.075} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":147057.40000000596,"ta":146.16} +{"ev":"vibrate","pattern":"[10]","t":147419.90000000596,"ta":146.522} +{"ev":"vibrate","pattern":"[15]","t":147419.90000000596,"ta":146.522} +{"ev":"vstart","url":"audio/voice/female/relisten.ogg","t":147420,"dur":0.7996371882086167,"ta":146.523} +{"ev":"vend","url":"audio/voice/female/relisten.ogg","t":148171.10000002384,"reason":"kill","ta":147.274} +{"ev":"fetch","url":"audio/voice/female/gd_chances_left0.ogg","status":200,"ok":true,"ms":3,"t":148173.80000001192,"ta":147.276} +{"ev":"vstart","url":"audio/voice/female/gd_chances_left0.ogg","t":148180.30000001192,"dur":5.44,"ta":147.283} +{"ev":"vend","url":"audio/voice/female/gd_chances_left0.ogg","t":153859.60000002384,"reason":"kill","ta":152.962} +{"ev":"vibrate","pattern":"[8]","t":153859.70000001788,"ta":152.962} +{"ev":"start","t":153859.70000001788,"sid":81,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":152.962} +{"ev":"vibrate","pattern":"[8]","t":154403.80000001192,"ta":153.506} +{"ev":"start","t":154404,"sid":82,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":153.507} +{"ev":"vibrate","pattern":"[8]","t":154948,"ta":154.051} +{"ev":"start","t":154948.20000001788,"sid":83,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":154.051} +{"ev":"vibrate","pattern":"[8]","t":155492.20000001788,"ta":154.595} +{"ev":"start","t":155492.30000001192,"sid":84,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":154.595} +{"ev":"vibrate","pattern":"[8]","t":156036.40000000596,"ta":155.139} +{"ev":"start","t":156036.5,"sid":85,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":155.139} +{"ev":"vibrate","pattern":"[8]","t":156580.5,"ta":155.683} +{"ev":"start","t":156580.70000001788,"sid":86,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":155.683} +{"ev":"vibrate","pattern":"[8]","t":157124.80000001192,"ta":156.227} +{"ev":"start","t":157124.90000000596,"sid":87,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":156.227} +{"ev":"vibrate","pattern":"[8]","t":157668.90000000596,"ta":156.771} +{"ev":"start","t":157669,"sid":88,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":156.772} +{"ev":"vibrate","pattern":"[20]","t":158613.10000002384,"ta":157.716} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":158957.60000002384,"ta":158.06} +{"ev":"vibrate","pattern":"[10]","t":159319.40000000596,"ta":158.422} +{"ev":"start","t":159319.5,"sid":89,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":158.422} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":159725.60000002384,"ta":158.828} +{"ev":"vibrate","pattern":"[10]","t":160085.90000000596,"ta":159.188} +{"ev":"start","t":160085.90000000596,"sid":90,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":159.188} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":160492.5,"ta":159.595} +{"ev":"vibrate","pattern":"[20]","t":160738.70000001788,"ta":159.841} +{"ev":"start","t":160738.80000001192,"sid":91,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":159.841} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":161145.30000001192,"ta":160.248} +{"ev":"vibrate","pattern":"[10]","t":161503.10000002384,"ta":160.606} +{"ev":"start","t":161503.20000001788,"sid":92,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":160.606} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":161909.80000001192,"ta":161.012} +{"ev":"vibrate","pattern":"[10]","t":162269.40000000596,"ta":161.372} +{"ev":"start","t":162269.5,"sid":93,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":161.372} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":162675,"ta":161.778} +{"ev":"vibrate","pattern":"[20]","t":163038.20000001788,"ta":162.141} +{"ev":"start","t":163038.40000000596,"sid":94,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":162.141} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":163144.60000002384,"ta":162.247} +{"ev":"vibrate","pattern":"[10]","t":163503.10000002384,"ta":162.606} +{"ev":"start","t":163503.10000002384,"sid":95,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":162.606} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":163909.80000001192,"ta":163.012} +{"ev":"vibrate","pattern":"[10]","t":164269.70000001788,"ta":163.372} +{"ev":"vibrate","pattern":"[100]","t":164269.80000001192,"ta":163.372} +{"ev":"start","t":164269.80000001192,"sid":96,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":163.372} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":164269.90000000596,"dur":0.6370975056689342,"ta":163.372} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":165027.40000000596,"reason":"kill","ta":164.13} +{"ev":"fetch","url":"audio/voice/female/round_08.ogg","status":200,"ok":true,"ms":3,"t":165330.60000002384,"ta":164.433} +{"ev":"vstart","url":"audio/voice/female/round_08.ogg","t":165334.70000001788,"dur":2.08,"ta":164.437} +{"ev":"vend","url":"audio/voice/female/round_08.ogg","t":167674.40000000596,"reason":"kill","ta":166.777} +{"ev":"vibrate","pattern":"[8]","t":167674.5,"ta":166.777} +{"ev":"start","t":167674.60000002384,"sid":97,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":166.777} +{"ev":"vibrate","pattern":"[8]","t":168192.70000001788,"ta":167.295} +{"ev":"start","t":168192.80000001192,"sid":98,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":167.295} +{"ev":"vibrate","pattern":"[8]","t":168710.80000001192,"ta":167.813} +{"ev":"start","t":168711,"sid":99,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":167.814} +{"ev":"vibrate","pattern":"[8]","t":169229.10000002384,"ta":168.332} +{"ev":"start","t":169229.10000002384,"sid":100,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":168.332} +{"ev":"vibrate","pattern":"[8]","t":169747.20000001788,"ta":168.85} +{"ev":"start","t":169747.30000001192,"sid":101,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":168.85} +{"ev":"vibrate","pattern":"[8]","t":170265.40000000596,"ta":169.368} +{"ev":"start","t":170265.40000000596,"sid":102,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":169.368} +{"ev":"vibrate","pattern":"[8]","t":170783.60000002384,"ta":169.886} +{"ev":"start","t":170783.70000001788,"sid":103,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":169.886} +{"ev":"vibrate","pattern":"[8]","t":171301.80000001192,"ta":170.404} +{"ev":"start","t":171301.90000000596,"sid":104,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":170.404} +{"ev":"vibrate","pattern":"[8]","t":171820,"ta":170.923} +{"ev":"start","t":171820.10000002384,"sid":105,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":170.923} +{"ev":"vibrate","pattern":"[20]","t":172738.30000001192,"ta":171.841} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":173112.80000001192,"ta":172.215} +{"ev":"vibrate","pattern":"[10]","t":173469.20000001788,"ta":172.572} +{"ev":"start","t":173469.30000001192,"sid":106,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":172.572} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":173875.80000001192,"ta":172.978} +{"ev":"vibrate","pattern":"[10]","t":174236,"ta":173.339} +{"ev":"start","t":174236,"sid":107,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":173.339} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":174643,"ta":173.746} +{"ev":"vibrate","pattern":"[20]","t":174889.60000002384,"ta":173.992} +{"ev":"start","t":174889.60000002384,"sid":108,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":173.992} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":175296.60000002384,"ta":174.399} +{"ev":"vibrate","pattern":"[10]","t":175652.10000002384,"ta":174.755} +{"ev":"start","t":175652.20000001788,"sid":109,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":174.755} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":176058.70000001788,"ta":175.161} +{"ev":"vibrate","pattern":"[10]","t":176418.60000002384,"ta":175.521} +{"ev":"start","t":176418.60000002384,"sid":110,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":175.521} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":176825.70000001788,"ta":175.928} +{"ev":"vibrate","pattern":"[20]","t":177188.60000002384,"ta":176.291} +{"ev":"start","t":177188.80000001192,"sid":111,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":176.291} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":177293.90000000596,"ta":176.396} +{"ev":"vibrate","pattern":"[10]","t":177651.90000000596,"ta":176.754} +{"ev":"start","t":177652,"sid":112,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":176.755} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":178058.90000000596,"ta":177.161} +{"ev":"vibrate","pattern":"[10]","t":178418.90000000596,"ta":177.521} +{"ev":"start","t":178419,"sid":113,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":177.522} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":178827.10000002384,"ta":177.93} +{"ev":"vibrate","pattern":"[10]","t":179185.5,"ta":178.288} +{"ev":"vibrate","pattern":"[100]","t":179185.5,"ta":178.288} +{"ev":"start","t":179185.60000002384,"sid":114,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":178.288} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":179185.70000001788,"dur":1.84,"ta":178.288} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":181070.90000000596,"reason":"kill","ta":180.173} +{"ev":"fetch","url":"audio/voice/female/round_09.ogg","status":200,"ok":true,"ms":3,"t":181374.20000001788,"ta":180.477} +{"ev":"vstart","url":"audio/voice/female/round_09.ogg","t":181378.30000001192,"dur":2.08,"ta":180.481} +{"ev":"vend","url":"audio/voice/female/round_09.ogg","t":183717.90000000596,"reason":"kill","ta":182.82} +{"ev":"vibrate","pattern":"[8]","t":183717.90000000596,"ta":182.82} +{"ev":"start","t":183718.10000002384,"sid":115,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":182.821} +{"ev":"vibrate","pattern":"[8]","t":184210.10000002384,"ta":183.313} +{"ev":"start","t":184210.30000001192,"sid":116,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":183.313} +{"ev":"vibrate","pattern":"[8]","t":184702.30000001192,"ta":183.805} +{"ev":"start","t":184702.5,"sid":117,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":183.805} +{"ev":"vibrate","pattern":"[8]","t":185194.60000002384,"ta":184.297} +{"ev":"start","t":185194.70000001788,"sid":118,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":184.297} +{"ev":"vibrate","pattern":"[8]","t":185686.80000001192,"ta":184.789} +{"ev":"start","t":185686.90000000596,"sid":119,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":184.789} +{"ev":"vibrate","pattern":"[8]","t":186179,"ta":185.282} +{"ev":"start","t":186179,"sid":120,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":185.282} +{"ev":"vibrate","pattern":"[8]","t":186671.10000002384,"ta":185.774} +{"ev":"start","t":186671.20000001788,"sid":121,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":185.774} +{"ev":"vibrate","pattern":"[8]","t":187163.30000001192,"ta":186.266} +{"ev":"start","t":187163.40000000596,"sid":122,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":186.266} +{"ev":"vibrate","pattern":"[8]","t":187655.5,"ta":186.758} +{"ev":"start","t":187655.60000002384,"sid":123,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":186.758} +{"ev":"vibrate","pattern":"[8]","t":188147.70000001788,"ta":187.25} +{"ev":"start","t":188147.80000001192,"sid":124,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":187.25} +{"ev":"vibrate","pattern":"[20]","t":189039.90000000596,"ta":188.142} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":189380.10000002384,"ta":188.483} +{"ev":"vibrate","pattern":"[10]","t":189734.90000000596,"ta":188.837} +{"ev":"start","t":189735,"sid":125,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":188.838} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":190141.30000001192,"ta":189.244} +{"ev":"vibrate","pattern":"[10]","t":190501.90000000596,"ta":189.604} +{"ev":"start","t":190502,"sid":126,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":189.605} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":190908.60000002384,"ta":190.011} +{"ev":"vibrate","pattern":"[20]","t":191155.10000002384,"ta":190.258} +{"ev":"start","t":191155.20000001788,"sid":127,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":190.258} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":191561.5,"ta":190.664} +{"ev":"vibrate","pattern":"[10]","t":191918.60000002384,"ta":191.021} +{"ev":"start","t":191918.60000002384,"sid":128,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":191.021} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":192324.20000001788,"ta":191.427} +{"ev":"vibrate","pattern":"[10]","t":192684.70000001788,"ta":191.787} +{"ev":"start","t":192684.70000001788,"sid":129,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":191.787} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":193089,"ta":192.192} +{"ev":"vibrate","pattern":"[20]","t":193452,"ta":192.555} +{"ev":"start","t":193452.10000002384,"sid":130,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":192.555} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":193557.70000001788,"ta":192.66} +{"ev":"vibrate","pattern":"[10]","t":193918.40000000596,"ta":193.021} +{"ev":"start","t":193918.40000000596,"sid":131,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":193.021} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":194323.70000001788,"ta":193.426} +{"ev":"vibrate","pattern":"[10]","t":194684.80000001192,"ta":193.787} +{"ev":"start","t":194684.90000000596,"sid":132,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":193.787} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":195091.10000002384,"ta":194.194} +{"ev":"vibrate","pattern":"[10]","t":195451.40000000596,"ta":194.554} +{"ev":"start","t":195451.5,"sid":133,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":194.554} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":195858.10000002384,"ta":194.961} +{"ev":"vibrate","pattern":"[10]","t":196218.30000001192,"ta":195.321} +{"ev":"vibrate","pattern":"[100]","t":196218.30000001192,"ta":195.321} +{"ev":"start","t":196218.40000000596,"sid":134,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":195.321} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":196218.5,"dur":0.6370975056689342,"ta":195.321} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":196975.60000002384,"reason":"kill","ta":196.078} +{"ev":"fetch","url":"audio/voice/female/round_10.ogg","status":200,"ok":true,"ms":3,"t":197278.60000002384,"ta":196.381} +{"ev":"vstart","url":"audio/voice/female/round_10.ogg","t":197282.5,"dur":1.6,"ta":196.385} +{"ev":"vend","url":"audio/voice/female/round_10.ogg","t":198879.20000001788,"reason":"kill","ta":197.982} +{"ev":"vibrate","pattern":"[8]","t":198879.30000001192,"ta":197.982} +{"ev":"start","t":198879.40000000596,"sid":135,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":197.982} +{"ev":"vibrate","pattern":"[8]","t":199345.5,"ta":198.448} +{"ev":"start","t":199345.5,"sid":136,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":198.448} +{"ev":"vibrate","pattern":"[8]","t":199811.5,"ta":198.914} +{"ev":"start","t":199811.60000002384,"sid":137,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":198.914} +{"ev":"vibrate","pattern":"[8]","t":200277.70000001788,"ta":199.38} +{"ev":"start","t":200277.80000001192,"sid":138,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":199.38} +{"ev":"vibrate","pattern":"[8]","t":200743.90000000596,"ta":199.846} +{"ev":"start","t":200744,"sid":139,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":199.847} +{"ev":"vibrate","pattern":"[8]","t":201210,"ta":200.313} +{"ev":"start","t":201210.10000002384,"sid":140,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":200.313} +{"ev":"vibrate","pattern":"[8]","t":201676.10000002384,"ta":200.779} +{"ev":"start","t":201676.30000001192,"sid":141,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":200.779} +{"ev":"vibrate","pattern":"[8]","t":202142.40000000596,"ta":201.245} +{"ev":"start","t":202142.5,"sid":142,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":201.245} +{"ev":"vibrate","pattern":"[8]","t":202608.5,"ta":201.711} +{"ev":"start","t":202608.60000002384,"sid":143,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":201.711} +{"ev":"vibrate","pattern":"[8]","t":203074.70000001788,"ta":202.177} +{"ev":"start","t":203074.80000001192,"sid":144,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":202.177} +{"ev":"vibrate","pattern":"[8]","t":203540.90000000596,"ta":202.643} +{"ev":"start","t":203540.90000000596,"sid":145,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":202.643} +{"ev":"vibrate","pattern":"[20]","t":204407.10000002384,"ta":203.51} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":204807.10000002384,"ta":203.91} +{"ev":"vibrate","pattern":"[10]","t":205168,"ta":204.271} +{"ev":"start","t":205168.10000002384,"sid":146,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":204.271} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":205573.80000001192,"ta":204.676} +{"ev":"vibrate","pattern":"[10]","t":205934.40000000596,"ta":205.037} +{"ev":"start","t":205934.5,"sid":147,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":205.037} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":206341.20000001788,"ta":205.444} +{"ev":"vibrate","pattern":"[20]","t":206587.80000001192,"ta":205.69} +{"ev":"start","t":206587.90000000596,"sid":148,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":205.69} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":206994.10000002384,"ta":206.097} +{"ev":"vibrate","pattern":"[10]","t":207351.20000001788,"ta":206.454} +{"ev":"start","t":207351.30000001192,"sid":149,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":206.454} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":207757.5,"ta":206.86} +{"ev":"vibrate","pattern":"[10]","t":208117.60000002384,"ta":207.22} +{"ev":"start","t":208117.70000001788,"sid":150,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":207.22} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":208525,"ta":207.628} +{"ev":"vibrate","pattern":"[20]","t":208888.10000002384,"ta":207.991} +{"ev":"start","t":208888.20000001788,"sid":151,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":207.991} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":208993.90000000596,"ta":208.096} +{"ev":"vibrate","pattern":"[10]","t":209350.90000000596,"ta":208.453} +{"ev":"start","t":209351.10000002384,"sid":152,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":208.454} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":209757.30000001192,"ta":208.86} +{"ev":"vibrate","pattern":"[10]","t":210117.5,"ta":209.22} +{"ev":"start","t":210117.60000002384,"sid":153,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":209.22} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":210524.90000000596,"ta":209.627} +{"ev":"vibrate","pattern":"[10]","t":210884.30000001192,"ta":209.987} +{"ev":"start","t":210884.40000000596,"sid":154,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":209.987} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":211290.40000000596,"ta":210.393} +{"ev":"vibrate","pattern":"[10]","t":211650.90000000596,"ta":210.753} +{"ev":"start","t":211651,"sid":155,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":210.754} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":212057.5,"ta":211.16} +{"ev":"vibrate","pattern":"[10]","t":212417.5,"ta":211.52} +{"ev":"vibrate","pattern":"[100]","t":212417.60000002384,"ta":211.52} +{"ev":"start","t":212417.80000001192,"sid":156,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":211.52} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":212417.80000001192,"dur":1.84,"ta":211.52} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":214296.10000002384,"reason":"kill","ta":213.399} +{"ev":"fetch","url":"audio/voice/female/round_11.ogg","status":200,"ok":true,"ms":3,"t":214599,"ta":213.702} +{"ev":"vstart","url":"audio/voice/female/round_11.ogg","t":214602.5,"dur":1.44,"ta":213.705} +{"ev":"vend","url":"audio/voice/female/round_11.ogg","t":216200,"reason":"kill","ta":215.303} +{"ev":"vibrate","pattern":"[8]","t":216200,"ta":215.303} +{"ev":"start","t":216200.10000002384,"sid":157,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":215.303} +{"ev":"vibrate","pattern":"[8]","t":216640.10000002384,"ta":215.743} +{"ev":"start","t":216640.20000001788,"sid":158,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":215.743} +{"ev":"vibrate","pattern":"[8]","t":217080.30000001192,"ta":216.183} +{"ev":"start","t":217080.40000000596,"sid":159,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":216.183} +{"ev":"vibrate","pattern":"[8]","t":217520.5,"ta":216.623} +{"ev":"start","t":217520.60000002384,"sid":160,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":216.623} +{"ev":"vibrate","pattern":"[8]","t":217960.60000002384,"ta":217.063} +{"ev":"start","t":217960.70000001788,"sid":161,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":217.063} +{"ev":"vibrate","pattern":"[8]","t":218400.80000001192,"ta":217.503} +{"ev":"start","t":218400.90000000596,"sid":162,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":217.503} +{"ev":"vibrate","pattern":"[8]","t":218840.90000000596,"ta":217.943} +{"ev":"start","t":218841.10000002384,"sid":163,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":217.944} +{"ev":"vibrate","pattern":"[8]","t":219281.20000001788,"ta":218.384} +{"ev":"start","t":219281.30000001192,"sid":164,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":218.384} +{"ev":"vibrate","pattern":"[8]","t":219721.30000001192,"ta":218.824} +{"ev":"start","t":219721.5,"sid":165,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":218.824} +{"ev":"vibrate","pattern":"[8]","t":220161.5,"ta":219.264} +{"ev":"start","t":220161.70000001788,"sid":166,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":219.264} +{"ev":"vibrate","pattern":"[8]","t":220601.70000001788,"ta":219.704} +{"ev":"start","t":220601.80000001192,"sid":167,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":219.704} +{"ev":"vibrate","pattern":"[8]","t":221041.90000000596,"ta":220.144} +{"ev":"start","t":221042,"sid":168,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":220.145} +{"ev":"vibrate","pattern":"[20]","t":221882.20000001788,"ta":220.985} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":222237.60000002384,"ta":221.34} +{"ev":"vibrate","pattern":"[10]","t":222600.80000001192,"ta":221.703} +{"ev":"start","t":222600.90000000596,"sid":169,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":221.703} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":223007.90000000596,"ta":222.11} +{"ev":"vibrate","pattern":"[10]","t":223367,"ta":222.47} +{"ev":"start","t":223367.10000002384,"sid":170,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":222.47} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":223773.10000002384,"ta":222.876} +{"ev":"vibrate","pattern":"[20]","t":224019.5,"ta":223.122} +{"ev":"start","t":224019.5,"sid":171,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":223.122} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":224426.60000002384,"ta":223.529} +{"ev":"vibrate","pattern":"[10]","t":224783.90000000596,"ta":223.886} +{"ev":"start","t":224784.10000002384,"sid":172,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":223.887} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":225190.90000000596,"ta":224.293} +{"ev":"vibrate","pattern":"[10]","t":225550.5,"ta":224.653} +{"ev":"start","t":225550.70000001788,"sid":173,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":224.653} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":225957.10000002384,"ta":225.06} +{"ev":"vibrate","pattern":"[20]","t":226320,"ta":225.423} +{"ev":"start","t":226320.10000002384,"sid":174,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":225.423} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":226425.70000001788,"ta":225.528} +{"ev":"vibrate","pattern":"[10]","t":226783.5,"ta":225.886} +{"ev":"start","t":226783.60000002384,"sid":175,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":225.886} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":227190.90000000596,"ta":226.293} +{"ev":"vibrate","pattern":"[10]","t":227550.5,"ta":226.653} +{"ev":"start","t":227550.60000002384,"sid":176,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":226.653} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":227957,"ta":227.06} +{"ev":"vibrate","pattern":"[10]","t":228316.80000001192,"ta":227.419} +{"ev":"start","t":228317,"sid":177,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":227.42} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":228723.40000000596,"ta":227.826} +{"ev":"vibrate","pattern":"[10]","t":229083.5,"ta":228.186} +{"ev":"start","t":229083.60000002384,"sid":178,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":228.186} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":229490.40000000596,"ta":228.593} +{"ev":"vibrate","pattern":"[10]","t":229850.30000001192,"ta":228.953} +{"ev":"start","t":229850.5,"sid":179,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":228.953} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":230256.80000001192,"ta":229.359} +{"ev":"vibrate","pattern":"[10]","t":230617.10000002384,"ta":229.72} +{"ev":"vibrate","pattern":"[100]","t":230617.10000002384,"ta":229.72} +{"ev":"start","t":230617.20000001788,"sid":180,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":229.72} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":230617.30000001192,"dur":0.6370975056689342,"ta":229.72} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":231384.40000000596,"reason":"kill","ta":230.487} +{"ev":"fetch","url":"audio/voice/female/round_12.ogg","status":200,"ok":true,"ms":3,"t":231687.5,"ta":230.79} +{"ev":"vstart","url":"audio/voice/female/round_12.ogg","t":231691.10000002384,"dur":1.68,"ta":230.794} +{"ev":"vend","url":"audio/voice/female/round_12.ogg","t":233567,"reason":"kill","ta":232.67} +{"ev":"vibrate","pattern":"[8]","t":233567,"ta":232.67} +{"ev":"start","t":233567.10000002384,"sid":181,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":232.67} +{"ev":"vibrate","pattern":"[8]","t":233987.20000001788,"ta":233.09} +{"ev":"start","t":233987.30000001192,"sid":182,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":233.09} +{"ev":"vibrate","pattern":"[8]","t":234407.40000000596,"ta":233.51} +{"ev":"start","t":234407.5,"sid":183,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":233.51} +{"ev":"vibrate","pattern":"[8]","t":234827.60000002384,"ta":233.93} +{"ev":"start","t":234827.60000002384,"sid":184,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":233.93} +{"ev":"vibrate","pattern":"[8]","t":235247.70000001788,"ta":234.35} +{"ev":"start","t":235247.80000001192,"sid":185,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":234.35} +{"ev":"vibrate","pattern":"[8]","t":235667.90000000596,"ta":234.77} +{"ev":"start","t":235668,"sid":186,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":234.771} +{"ev":"vibrate","pattern":"[8]","t":236088.10000002384,"ta":235.191} +{"ev":"start","t":236088.20000001788,"sid":187,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":235.191} +{"ev":"vibrate","pattern":"[8]","t":236508.30000001192,"ta":235.611} +{"ev":"start","t":236508.40000000596,"sid":188,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":235.611} +{"ev":"vibrate","pattern":"[8]","t":236928.5,"ta":236.031} +{"ev":"start","t":236928.60000002384,"sid":189,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":236.031} +{"ev":"vibrate","pattern":"[8]","t":237348.60000002384,"ta":236.451} +{"ev":"start","t":237348.70000001788,"sid":190,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":236.451} +{"ev":"vibrate","pattern":"[8]","t":237768.80000001192,"ta":236.871} +{"ev":"start","t":237769,"sid":191,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":236.872} +{"ev":"vibrate","pattern":"[8]","t":238189,"ta":237.292} +{"ev":"start","t":238189.10000002384,"sid":192,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":237.292} +{"ev":"vibrate","pattern":"[8]","t":238609.10000002384,"ta":237.712} +{"ev":"start","t":238609.20000001788,"sid":193,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":237.712} +{"ev":"vibrate","pattern":"[20]","t":239429.40000000596,"ta":238.532} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":239821.5,"ta":238.924} +{"ev":"vibrate","pattern":"[10]","t":240183.30000001192,"ta":239.286} +{"ev":"start","t":240183.40000000596,"sid":194,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":239.286} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":240588.40000000596,"ta":239.691} +{"ev":"vibrate","pattern":"[10]","t":240949.5,"ta":240.052} +{"ev":"start","t":240949.60000002384,"sid":195,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":240.052} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":241356.20000001788,"ta":240.459} +{"ev":"vibrate","pattern":"[20]","t":241603.10000002384,"ta":240.706} +{"ev":"start","t":241603.20000001788,"sid":196,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":240.706} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":242009.40000000596,"ta":241.112} +{"ev":"vibrate","pattern":"[10]","t":242366.10000002384,"ta":241.469} +{"ev":"start","t":242366.20000001788,"sid":197,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":241.469} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":242772.5,"ta":241.875} +{"ev":"vibrate","pattern":"[10]","t":243132.70000001788,"ta":242.235} +{"ev":"start","t":243132.80000001192,"sid":198,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":242.235} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":243539.30000001192,"ta":242.642} +{"ev":"vibrate","pattern":"[20]","t":243902.80000001192,"ta":243.005} +{"ev":"start","t":243902.90000000596,"sid":199,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":243.005} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":244008.90000000596,"ta":243.111} +{"ev":"vibrate","pattern":"[10]","t":244366,"ta":243.469} +{"ev":"start","t":244366,"sid":200,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":243.469} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":244770.80000001192,"ta":243.873} +{"ev":"vibrate","pattern":"[10]","t":245133,"ta":244.236} +{"ev":"start","t":245133.10000002384,"sid":201,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":244.236} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":245540.70000001788,"ta":244.643} +{"ev":"vibrate","pattern":"[10]","t":245899.40000000596,"ta":245.002} +{"ev":"start","t":245899.5,"sid":202,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":245.002} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":246305.70000001788,"ta":245.408} +{"ev":"vibrate","pattern":"[10]","t":246666,"ta":245.769} +{"ev":"start","t":246666.10000002384,"sid":203,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":245.769} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":247072.70000001788,"ta":246.175} +{"ev":"vibrate","pattern":"[10]","t":247432.5,"ta":246.535} +{"ev":"start","t":247432.60000002384,"sid":204,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":246.535} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":247838.90000000596,"ta":246.941} +{"ev":"vibrate","pattern":"[10]","t":248198.40000000596,"ta":247.301} +{"ev":"start","t":248198.60000002384,"sid":205,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":247.301} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":248602.90000000596,"ta":247.705} +{"ev":"vibrate","pattern":"[10]","t":248966.10000002384,"ta":248.069} +{"ev":"vibrate","pattern":"[100]","t":248966.10000002384,"ta":248.069} +{"ev":"start","t":248966.20000001788,"sid":206,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":248.069} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":248966.30000001192,"dur":1.84,"ta":248.069} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":250841.10000002384,"reason":"kill","ta":249.944} +{"ev":"fetch","url":"audio/voice/female/round_13.ogg","status":200,"ok":true,"ms":3,"t":251143.90000000596,"ta":250.246} +{"ev":"vstart","url":"audio/voice/female/round_13.ogg","t":251148,"dur":2.48,"ta":250.251} +{"ev":"vibrate","pattern":"[8]","t":253641.70000001788,"ta":252.744} +{"ev":"start","t":253641.90000000596,"sid":207,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":252.744} +{"ev":"vend","url":"audio/voice/female/round_13.ogg","t":253859.70000001788,"reason":"kill","ta":252.962} +{"ev":"vibrate","pattern":"[8]","t":254061.90000000596,"ta":253.164} +{"ev":"start","t":254062.10000002384,"sid":208,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":253.165} +{"ev":"vibrate","pattern":"[8]","t":254482.10000002384,"ta":253.585} +{"ev":"start","t":254482.20000001788,"sid":209,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":253.585} +{"ev":"vibrate","pattern":"[8]","t":254902.40000000596,"ta":254.005} +{"ev":"start","t":254902.5,"sid":210,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":254.005} +{"ev":"vibrate","pattern":"[8]","t":255322.5,"ta":254.425} +{"ev":"start","t":255322.70000001788,"sid":211,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":254.425} +{"ev":"vibrate","pattern":"[8]","t":255742.80000001192,"ta":254.845} +{"ev":"start","t":255742.80000001192,"sid":212,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":254.845} +{"ev":"vibrate","pattern":"[8]","t":256162.90000000596,"ta":255.265} +{"ev":"start","t":256163,"sid":213,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":255.266} +{"ev":"vibrate","pattern":"[8]","t":256583.10000002384,"ta":255.686} +{"ev":"start","t":256583.20000001788,"sid":214,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":255.686} +{"ev":"vibrate","pattern":"[8]","t":257003.20000001788,"ta":256.106} +{"ev":"start","t":257003.40000000596,"sid":215,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":256.106} +{"ev":"vibrate","pattern":"[8]","t":257423.40000000596,"ta":256.526} +{"ev":"start","t":257423.5,"sid":216,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":256.526} +{"ev":"vibrate","pattern":"[8]","t":257843.60000002384,"ta":256.946} +{"ev":"start","t":257843.70000001788,"sid":217,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":256.946} +{"ev":"vibrate","pattern":"[8]","t":258263.80000001192,"ta":257.366} +{"ev":"start","t":258263.90000000596,"sid":218,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":257.366} +{"ev":"vibrate","pattern":"[8]","t":258683.90000000596,"ta":257.786} +{"ev":"start","t":258684,"sid":219,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":257.787} +{"ev":"vibrate","pattern":"[8]","t":259104.10000002384,"ta":258.207} +{"ev":"start","t":259104.20000001788,"sid":220,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":258.207} +{"ev":"vibrate","pattern":"[20]","t":259924.40000000596,"ta":259.027} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":260254.90000000596,"ta":259.357} +{"ev":"vibrate","pattern":"[10]","t":260615.5,"ta":259.718} +{"ev":"vibrate","pattern":"[60,40,60]","t":260615.70000001788,"ta":259.718} +{"ev":"start","t":260616,"sid":221,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":259.719} +{"ev":"fetch","url":"audio/voice/female/retry_use.ogg","status":200,"ok":true,"ms":2,"t":260618,"ta":259.721} +{"ev":"vstart","url":"audio/voice/female/retry_use.ogg","t":260622.30000001192,"dur":2.64,"ta":259.725} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":260915.90000000596,"ta":260.018} +{"ev":"vend","url":"audio/voice/female/retry_use.ogg","t":263332.40000000596,"reason":"kill","ta":262.435} +{"ev":"vstart","url":"audio/voice/female/gd_occ_both.ogg","t":263332.5,"dur":2.72,"ta":262.435} +{"ev":"vend","url":"audio/voice/female/gd_occ_both.ogg","t":266049.10000002384,"reason":"kill","ta":265.152} +{"ev":"vibrate","pattern":"[8]","t":266049.3000000119,"ta":265.152} +{"ev":"start","t":266049.40000000596,"sid":222,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":265.152} +{"ev":"vibrate","pattern":"[8]","t":266469.5,"ta":265.572} +{"ev":"start","t":266469.60000002384,"sid":223,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":265.572} +{"ev":"vibrate","pattern":"[8]","t":266889.7000000179,"ta":265.992} +{"ev":"start","t":266889.8000000119,"sid":224,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":265.992} +{"ev":"vibrate","pattern":"[8]","t":267309.8000000119,"ta":266.412} +{"ev":"start","t":267310,"sid":225,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":266.413} +{"ev":"vibrate","pattern":"[8]","t":267730,"ta":266.833} +{"ev":"start","t":267730.2000000179,"sid":226,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":266.833} +{"ev":"vibrate","pattern":"[8]","t":268150.2000000179,"ta":267.253} +{"ev":"start","t":268150.3000000119,"sid":227,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":267.253} +{"ev":"vibrate","pattern":"[8]","t":268570.40000000596,"ta":267.673} +{"ev":"start","t":268570.60000002384,"sid":228,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":267.673} +{"ev":"vibrate","pattern":"[8]","t":268990.60000002384,"ta":268.093} +{"ev":"start","t":268990.8000000119,"sid":229,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":268.093} +{"ev":"vibrate","pattern":"[8]","t":269410.8000000119,"ta":268.513} +{"ev":"start","t":269410.90000000596,"sid":230,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":268.513} +{"ev":"vibrate","pattern":"[8]","t":269831,"ta":268.934} +{"ev":"start","t":269831.10000002384,"sid":231,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":268.934} +{"ev":"vibrate","pattern":"[8]","t":270251.2000000179,"ta":269.354} +{"ev":"start","t":270251.2000000179,"sid":232,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":269.354} +{"ev":"vibrate","pattern":"[8]","t":270671.3000000119,"ta":269.774} +{"ev":"start","t":270671.40000000596,"sid":233,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":269.774} +{"ev":"vibrate","pattern":"[8]","t":271091.40000000596,"ta":270.194} +{"ev":"start","t":271091.60000002384,"sid":234,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":270.194} +{"ev":"vibrate","pattern":"[8]","t":271511.7000000179,"ta":270.614} +{"ev":"start","t":271511.8000000119,"sid":235,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":270.614} +{"ev":"vibrate","pattern":"[20]","t":272332,"ta":271.435} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":272639.5,"ta":271.742} +{"ev":"vibrate","pattern":"[10]","t":272998.40000000596,"ta":272.101} +{"ev":"vibrate","pattern":"[60,40,60]","t":272998.40000000596,"ta":272.101} +{"ev":"start","t":272998.60000002384,"sid":236,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":272.101} +{"ev":"vstart","url":"audio/voice/female/retry_use.ogg","t":272998.60000002384,"dur":2.64,"ta":272.101} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":273298.7000000179,"ta":272.401} +{"ev":"vend","url":"audio/voice/female/retry_use.ogg","t":275707.7000000179,"reason":"kill","ta":274.81} +{"ev":"fetch","url":"audio/voice/female/chances_out.ogg","status":200,"ok":true,"ms":3,"t":275710.5,"ta":274.813} +{"ev":"vstart","url":"audio/voice/female/chances_out.ogg","t":275714.3000000119,"dur":1.76,"ta":274.817} +{"ev":"vend","url":"audio/voice/female/chances_out.ogg","t":277588.3000000119,"reason":"kill","ta":276.691} +{"ev":"vstart","url":"audio/voice/female/gd_occ_both.ogg","t":277588.3000000119,"dur":2.72,"ta":276.691} +{"ev":"vend","url":"audio/voice/female/gd_occ_both.ogg","t":280304.8000000119,"reason":"kill","ta":279.407} +{"ev":"vibrate","pattern":"[8]","t":280304.90000000596,"ta":279.407} +{"ev":"start","t":280305,"sid":237,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":279.408} +{"ev":"vibrate","pattern":"[8]","t":280725.10000002384,"ta":279.828} +{"ev":"start","t":280725.2000000179,"sid":238,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":279.828} +{"ev":"vibrate","pattern":"[8]","t":281145.3000000119,"ta":280.248} +{"ev":"start","t":281145.3000000119,"sid":239,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":280.248} +{"ev":"vibrate","pattern":"[8]","t":281565.5,"ta":280.668} +{"ev":"start","t":281565.5,"sid":240,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":280.668} +{"ev":"vibrate","pattern":"[8]","t":281985.60000002384,"ta":281.088} +{"ev":"start","t":281985.7000000179,"sid":241,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":281.088} +{"ev":"vibrate","pattern":"[8]","t":282405.7000000179,"ta":281.508} +{"ev":"start","t":282405.90000000596,"sid":242,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":281.508} +{"ev":"vibrate","pattern":"[8]","t":282825.90000000596,"ta":281.928} +{"ev":"start","t":282826.10000002384,"sid":243,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":281.929} +{"ev":"vibrate","pattern":"[8]","t":283246.10000002384,"ta":282.349} +{"ev":"start","t":283246.2000000179,"sid":244,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":282.349} +{"ev":"vibrate","pattern":"[8]","t":283666.3000000119,"ta":282.769} +{"ev":"start","t":283666.40000000596,"sid":245,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":282.769} +{"ev":"vibrate","pattern":"[8]","t":284086.40000000596,"ta":283.189} +{"ev":"start","t":284086.5,"sid":246,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":283.189} +{"ev":"vibrate","pattern":"[8]","t":284506.60000002384,"ta":283.609} +{"ev":"start","t":284506.7000000179,"sid":247,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":283.609} +{"ev":"vibrate","pattern":"[8]","t":284926.8000000119,"ta":284.029} +{"ev":"start","t":284926.90000000596,"sid":248,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":284.029} +{"ev":"vibrate","pattern":"[8]","t":285346.90000000596,"ta":284.449} +{"ev":"start","t":285347,"sid":249,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":284.45} +{"ev":"vibrate","pattern":"[8]","t":285767.2000000179,"ta":284.87} +{"ev":"start","t":285767.2000000179,"sid":250,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":284.87} +{"ev":"vibrate","pattern":"[20]","t":286587.40000000596,"ta":285.69} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":286994.10000002384,"ta":286.097} +{"ev":"vibrate","pattern":"[10]","t":287348.10000002384,"ta":286.451} +{"ev":"vibrate","pattern":"[60,40,60]","t":287348.5,"ta":286.451} +{"ev":"start","t":287348.60000002384,"sid":251,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":286.451} +{"ev":"vibrate","pattern":"[80]","t":287648.7000000179,"ta":286.751} +{"ev":"start","t":288048.7000000179,"sid":252,"url":"audio/sfx/gameover.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":287.151} +{"ev":"fetch","url":"audio/voice/female/gameover.ogg","status":200,"ok":true,"ms":3,"t":288751.3000000119,"ta":287.854} +{"ev":"vstart","url":"audio/voice/female/gameover.ogg","t":288754.60000002384,"dur":0.9570975056689343,"ta":287.857} +{"ev":"vend","url":"audio/voice/female/gameover.ogg","t":289893.90000000596,"reason":"kill","ta":288.996} +{"ev":"fetch","url":"audio/voice/female/score_band5.ogg","status":200,"ok":true,"ms":3,"t":289896.7000000179,"ta":288.999} +{"ev":"vstart","url":"audio/voice/female/score_band5.ogg","t":289900.3000000119,"dur":2.32,"ta":289.003} +{"ev":"fetch","url":"audio/bgm/menu.ogg","status":200,"ok":true,"ms":3,"t":290001.90000000596,"ta":289.104} +{"ev":"start","t":290139.60000002384,"sid":253,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":289.242} +{"ev":"vend","url":"audio/voice/female/score_band5.ogg","t":292238.7000000179,"reason":"kill","ta":291.341} +{"ev":"fetch","url":"audio/voice/female/new_record.ogg","status":200,"ok":true,"ms":3,"t":292241.5,"ta":291.344} +{"ev":"vstart","url":"audio/voice/female/new_record.ogg","t":292244.90000000596,"dur":1.28,"ta":291.347} +{"ev":"vend","url":"audio/voice/female/new_record.ogg","t":293840.90000000596,"reason":"kill","ta":292.943} +{"ev":"fetch","url":"audio/voice/female/replay.ogg","status":200,"ok":true,"ms":2,"t":293843.3000000119,"ta":292.946} +{"ev":"vstart","url":"audio/voice/female/replay.ogg","t":293847.7000000179,"dur":2.24,"ta":292.95} +{"ev":"vend","url":"audio/voice/female/replay.ogg","t":296185.90000000596,"reason":"kill","ta":295.288} +{"ev":"fetch","url":"audio/voice/female/rules_prompt.ogg","status":200,"ok":true,"ms":3,"t":296188.8000000119,"ta":295.291} +{"ev":"vstart","url":"audio/voice/female/rules_prompt.ogg","t":296194.90000000596,"dur":5.36,"ta":295.297} +{"ev":"vend","url":"audio/voice/female/rules_prompt.ogg","t":301874.40000000596,"reason":"kill","ta":300.977} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":302480.2000000179,"ta":301.583} +{"ev":"vibrate","pattern":"[20]","t":302845.10000002384,"ta":301.948} +{"ev":"start","t":302845.5,"sid":254,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":301.948} +{"ev":"vstart","url":"audio/voice/female/round_01.ogg","t":302845.7000000179,"dur":1.52,"ta":301.948} +{"ev":"stop","t":303205.60000002384,"sid":253,"when":0,"ta":302.308} +{"ev":"vend","url":"audio/voice/female/round_01.ogg","t":304451.7000000179,"reason":"kill","ta":303.554} +{"ev":"vibrate","pattern":"[8]","t":304451.8000000119,"ta":303.554} +{"ev":"start","t":304451.90000000596,"sid":255,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":303.554} +{"ev":"vibrate","pattern":"[8]","t":305152,"ta":304.255} +{"ev":"start","t":305152.10000002384,"sid":256,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":304.255} +{"ev":"vibrate","pattern":"[20]","t":306252.2000000179,"ta":305.355} +{"ev":"vstart","url":"audio/voice/female/gd_occ_dt.ogg","t":306252.5,"dur":1.68,"ta":305.355} +{"ev":"vend","url":"audio/voice/female/gd_occ_dt.ogg","t":308120,"reason":"kill","ta":307.223} +{"ev":"vstart","url":"audio/voice/female/your_turn.ogg","t":308120.10000002384,"dur":0.7970975056689342,"ta":307.223} +{"ev":"vend","url":"audio/voice/female/your_turn.ogg","t":308886.2000000179,"reason":"kill","ta":307.989} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":309331.5,"ta":308.434} +{"ev":"vibrate","pattern":"[20]","t":309694.5,"ta":308.797} +{"ev":"start","t":309694.7000000179,"sid":257,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":308.797} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":309800,"ta":308.903} +{"ev":"vibrate","pattern":"[20]","t":310046.5,"ta":309.149} +{"ev":"vibrate","pattern":"[100]","t":310046.60000002384,"ta":309.149} +{"ev":"start","t":310046.60000002384,"sid":258,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":309.149} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":310046.7000000179,"dur":0.6370975056689342,"ta":309.149} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":310813.3000000119,"reason":"kill","ta":309.916} +{"ev":"vstart","url":"audio/voice/female/round_02.ogg","t":311113.60000002384,"dur":1.44,"ta":310.216} +{"ev":"vend","url":"audio/voice/female/round_02.ogg","t":312717.2000000179,"reason":"kill","ta":311.82} +{"ev":"vibrate","pattern":"[8]","t":312717.2000000179,"ta":311.82} +{"ev":"start","t":312717.3000000119,"sid":259,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":311.82} +{"ev":"vibrate","pattern":"[8]","t":313391.40000000596,"ta":312.494} +{"ev":"start","t":313391.60000002384,"sid":260,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":312.494} +{"ev":"vibrate","pattern":"[8]","t":314065.60000002384,"ta":313.168} +{"ev":"start","t":314065.7000000179,"sid":261,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":313.168} +{"ev":"vibrate","pattern":"[20]","t":315139.90000000596,"ta":314.242} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":315551.3000000119,"ta":314.654} +{"ev":"vibrate","pattern":"[20]","t":315915,"ta":315.018} +{"ev":"start","t":315915.10000002384,"sid":262,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":315.018} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":316021,"ta":315.124} +{"ev":"vibrate","pattern":"[20]","t":316267.5,"ta":315.37} +{"ev":"start","t":316267.7000000179,"sid":263,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":315.37} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":316672.5,"ta":315.775} +{"ev":"vibrate","pattern":"[20]","t":316919.10000002384,"ta":316.022} +{"ev":"vibrate","pattern":"[100]","t":316919.10000002384,"ta":316.022} +{"ev":"start","t":316919.3000000119,"sid":264,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":316.022} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":316919.3000000119,"dur":1.84,"ta":316.022} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":318800.2000000179,"reason":"kill","ta":317.903} +{"ev":"vstart","url":"audio/voice/female/round_03.ogg","t":319100.5,"dur":1.68,"ta":318.203} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":319173.5,"ta":318.276} +{"ev":"vibrate","pattern":"[10]","t":319529.60000002384,"ta":318.632} +{"ev":"vend","url":"audio/voice/female/round_03.ogg","t":320982.7000000179,"reason":"kill","ta":320.085} +{"ev":"vibrate","pattern":"[8]","t":320982.8000000119,"ta":320.085} +{"ev":"start","t":320982.8000000119,"sid":265,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":320.085} +{"ev":"vibrate","pattern":"[8]","t":321631,"ta":320.734} +{"ev":"start","t":321631.10000002384,"sid":266,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":320.734} +{"ev":"vibrate","pattern":"[8]","t":322279.10000002384,"ta":321.382} +{"ev":"start","t":322279.2000000179,"sid":267,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":321.382} +{"ev":"vibrate","pattern":"[8]","t":322927.3000000119,"ta":322.03} +{"ev":"start","t":322927.3000000119,"sid":268,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":322.03} +{"ev":"vibrate","pattern":"[20]","t":323975.5,"ta":323.078} +{"ev":"recstop","t":328049.10000002384,"ta":327.152} diff --git a/research/simon-polish/round1/live-A-transcript.md b/research/simon-polish/round1/live-A-transcript.md new file mode 100644 index 00000000..6b37605a --- /dev/null +++ b/research/simon-polish/round1/live-A-transcript.md @@ -0,0 +1,841 @@ +# simon 实时会话 transcript + +- `[ -0.07s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.50s]` VOICE ▶ t0_welcome (dur 4.24s) +- `[ 5.06s]` VOICE ■ t0_welcome (kill) +- `[ 5.06s]` VOICE ▶ skip_hint (dur 1.6s) +- `[ 6.67s]` VOICE ■ skip_hint (kill) +- `[ 6.67s]` VOICE ▶ t0_goal (dur 6.08s) +- `[ 13.10s]` VOICE ■ t0_goal (kill) +- `[ 13.11s]` VOICE ▶ t1_up (dur 4.64s) +- `[ 18.04s]` VOICE ■ t1_up (kill) +- `[ 18.04s]` SFX ♪ tone_up +- `[ 18.94s]` VOICE ▶ t_try (dur 0.7970975056689342s) +- `[ 19.71s]` VOICE ■ t_try (kill) +- `[ 19.98s]` **GESTURE** swipeup @(195,422) +- `[ 20.34s]` VIBRATE [10] +- `[ 20.34s]` SFX ♪ tone_up +- `[ 20.35s]` VOICE ▶ t_ok (dur 0.4770975056689342s) +- `[ 20.83s]` VOICE ■ t_ok (kill) +- `[ 20.83s]` VOICE ▶ t2_down (dur 2.24s) +- `[ 23.17s]` VOICE ■ t2_down (kill) +- `[ 23.17s]` SFX ♪ tone_down +- `[ 24.07s]` VOICE ▶ t_try (dur 0.7970975056689342s) +- `[ 24.84s]` VOICE ■ t_try (kill) +- `[ 25.05s]` **GESTURE** swipedown @(195,422) +- `[ 25.41s]` VIBRATE [10] +- `[ 25.41s]` SFX ♪ tone_down +- `[ 25.41s]` VOICE ▶ t_ok (dur 0.4770975056689342s) +- `[ 25.89s]` VOICE ■ t_ok (kill) +- `[ 25.90s]` VOICE ▶ t3_left (dur 2.64s) +- `[ 28.61s]` VOICE ■ t3_left (kill) +- `[ 28.61s]` SFX ♪ tone_left +- `[ 29.51s]` VOICE ▶ t_try (dur 0.7970975056689342s) +- `[ 30.28s]` VOICE ■ t_try (kill) +- `[ 30.48s]` **GESTURE** swiperight @(195,422) +- `[ 30.84s]` VIBRATE [10] +- `[ 30.84s]` VIBRATE [60,40,60] +- `[ 30.85s]` VOICE ▶ t_wrong_left (dur 2.48s) +- `[ 33.55s]` VOICE ■ t_wrong_left (kill) +- `[ 33.91s]` **GESTURE** swipeleft @(195,422) +- `[ 34.26s]` VIBRATE [10] +- `[ 34.26s]` SFX ♪ tone_left +- `[ 34.26s]` VOICE ▶ t_ok (dur 0.4770975056689342s) +- `[ 34.74s]` VOICE ■ t_ok (kill) +- `[ 34.74s]` VOICE ▶ t4_right (dur 1.44s) +- `[ 36.34s]` VOICE ■ t4_right (kill) +- `[ 36.34s]` SFX ♪ tone_right +- `[ 37.24s]` VOICE ▶ t_try (dur 0.7970975056689342s) +- `[ 38.01s]` VOICE ■ t_try (kill) +- `[ 38.23s]` **GESTURE** swiperight @(195,422) +- `[ 38.58s]` VIBRATE [10] +- `[ 38.58s]` SFX ♪ tone_right +- `[ 38.58s]` VOICE ▶ t_ok (dur 0.4770975056689342s) +- `[ 39.05s]` VOICE ■ t_ok (kill) +- `[ 39.06s]` VOICE ▶ t5_tap (dur 1.6s) +- `[ 40.66s]` VOICE ■ t5_tap (kill) +- `[ 40.66s]` SFX ♪ tone_tap +- `[ 41.56s]` VOICE ▶ t_try (dur 0.7970975056689342s) +- `[ 42.33s]` VOICE ■ t_try (kill) +- `[ 42.54s]` **GESTURE** tap @(195,422) +- `[ 42.90s]` VIBRATE [20] +- `[ 42.90s]` SFX ♪ tone_tap +- `[ 42.90s]` VOICE ▶ t_ok (dur 0.4770975056689342s) +- `[ 43.40s]` VOICE ■ t_ok (kill) +- `[ 43.40s]` VOICE ▶ t6_double (dur 2.16s) +- `[ 45.74s]` VOICE ■ t6_double (kill) +- `[ 45.74s]` SFX ♪ tone_doubletap +- `[ 46.64s]` VOICE ▶ t_try (dur 0.7970975056689342s) +- `[ 47.41s]` VOICE ■ t_try (kill) +- `[ 47.68s]` **GESTURE** doubletap @(195,422) +- `[ 47.93s]` VIBRATE [20] +- `[ 47.93s]` SFX ♪ tone_doubletap +- `[ 47.93s]` VOICE ▶ t_ok (dur 0.4770975056689342s) +- `[ 48.41s]` VOICE ■ t_ok (kill) +- `[ 48.42s]` VOICE ▶ t7_ready (dur 3.44s) +- `[ 51.87s]` VOICE ■ t7_ready (kill) +- `[ 51.88s]` VOICE ▶ t7_retry (dur 5.76s) +- `[ 57.84s]` VOICE ■ t7_retry (kill) +- `[ 57.85s]` VOICE ▶ gd_economy (dur 6.72s) +- `[ 64.64s]` VOICE ■ gd_economy (kill) +- `[ 64.64s]` VOICE ▶ round_01 (dur 1.52s) +- `[ 66.24s]` VOICE ■ round_01 (kill) +- `[ 66.24s]` VIBRATE [8] +- `[ 66.24s]` SFX ♪ tone_right +- `[ 66.94s]` VIBRATE [8] +- `[ 66.94s]` SFX ♪ tone_down +- `[ 68.04s]` VIBRATE [20] +- `[ 68.05s]` VOICE ▶ your_turn (dur 0.7970975056689342s) +- `[ 68.82s]` VOICE ■ your_turn (kill) +- `[ 69.24s]` **GESTURE** swiperight @(195,422) +- `[ 69.59s]` VIBRATE [10] +- `[ 69.59s]` SFX ♪ tone_right +- `[ 70.00s]` **GESTURE** swipedown @(195,422) +- `[ 70.36s]` VIBRATE [10] +- `[ 70.36s]` VIBRATE [100] +- `[ 70.36s]` SFX ♪ tone_down +- `[ 70.36s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 71.12s]` VOICE ■ correct (kill) +- `[ 71.42s]` VOICE ▶ round_02 (dur 1.44s) +- `[ 73.02s]` VOICE ■ round_02 (kill) +- `[ 73.02s]` VIBRATE [8] +- `[ 73.02s]` SFX ♪ tone_right +- `[ 73.70s]` VIBRATE [8] +- `[ 73.70s]` SFX ♪ tone_down +- `[ 74.37s]` VIBRATE [8] +- `[ 74.37s]` SFX ♪ tone_doubletap +- `[ 75.44s]` VIBRATE [20] +- `[ 75.45s]` VOICE ▶ gd_occ_dt (dur 1.68s) +- `[ 75.75s]` **GESTURE** swiperight @(195,422) +- `[ 76.11s]` VIBRATE [10] +- `[ 77.32s]` VOICE ■ gd_occ_dt (kill) +- `[ 78.12s]` **GESTURE** swiperight @(195,422) +- `[ 78.47s]` VIBRATE [10] +- `[ 78.47s]` SFX ♪ tone_right +- `[ 78.88s]` **GESTURE** swipedown @(195,422) +- `[ 79.24s]` VIBRATE [10] +- `[ 79.24s]` SFX ♪ tone_down +- `[ 79.65s]` **GESTURE** doubletap @(195,422) +- `[ 79.89s]` VIBRATE [20] +- `[ 79.89s]` VIBRATE [100] +- `[ 79.90s]` SFX ♪ tone_doubletap +- `[ 79.90s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 81.78s]` VOICE ■ gd_clear (kill) +- `[ 82.08s]` VOICE ▶ round_03 (dur 1.68s) +- `[ 83.96s]` VOICE ■ round_03 (kill) +- `[ 83.96s]` VIBRATE [8] +- `[ 83.96s]` SFX ♪ tone_right +- `[ 84.61s]` VIBRATE [8] +- `[ 84.61s]` SFX ♪ tone_down +- `[ 85.25s]` VIBRATE [8] +- `[ 85.25s]` SFX ♪ tone_doubletap +- `[ 85.90s]` VIBRATE [8] +- `[ 85.90s]` SFX ♪ tone_down +- `[ 86.95s]` VIBRATE [20] +- `[ 87.38s]` **GESTURE** swiperight @(195,422) +- `[ 87.74s]` VIBRATE [10] +- `[ 87.74s]` SFX ♪ tone_right +- `[ 88.15s]` **GESTURE** swipedown @(195,422) +- `[ 88.51s]` VIBRATE [10] +- `[ 88.51s]` SFX ♪ tone_down +- `[ 88.92s]` **GESTURE** doubletap @(195,422) +- `[ 89.16s]` VIBRATE [20] +- `[ 89.16s]` SFX ♪ tone_doubletap +- `[ 89.57s]` **GESTURE** swipedown @(195,422) +- `[ 89.92s]` VIBRATE [10] +- `[ 89.92s]` VIBRATE [100] +- `[ 89.92s]` SFX ♪ tone_down +- `[ 89.92s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 90.69s]` VOICE ■ correct (kill) +- `[ 91.00s]` VOICE ▶ round_04 (dur 1.84s) +- `[ 92.87s]` VOICE ■ round_04 (kill) +- `[ 92.87s]` VIBRATE [8] +- `[ 92.87s]` SFX ♪ tone_right +- `[ 93.50s]` VIBRATE [8] +- `[ 93.50s]` SFX ♪ tone_down +- `[ 94.12s]` VIBRATE [8] +- `[ 94.12s]` SFX ♪ tone_doubletap +- `[ 94.74s]` VIBRATE [8] +- `[ 94.74s]` SFX ♪ tone_down +- `[ 95.36s]` VIBRATE [8] +- `[ 95.36s]` SFX ♪ tone_up +- `[ 96.39s]` VIBRATE [20] +- `[ 96.39s]` VOICE ▶ gd_occ_both (dur 2.72s) +- `[ 99.10s]` VOICE ■ gd_occ_both (kill) +- `[ 99.55s]` **GESTURE** swiperight @(195,422) +- `[ 99.91s]` VIBRATE [10] +- `[ 99.91s]` SFX ♪ tone_right +- `[ 100.31s]` **GESTURE** swipedown @(195,422) +- `[ 100.67s]` VIBRATE [10] +- `[ 100.67s]` SFX ♪ tone_down +- `[ 101.08s]` **GESTURE** doubletap @(195,422) +- `[ 101.33s]` VIBRATE [20] +- `[ 101.33s]` SFX ♪ tone_doubletap +- `[ 101.73s]` **GESTURE** swipedown @(195,422) +- `[ 102.09s]` VIBRATE [10] +- `[ 102.09s]` SFX ♪ tone_down +- `[ 102.50s]` **GESTURE** swipeup @(195,422) +- `[ 102.86s]` VIBRATE [10] +- `[ 102.86s]` VIBRATE [100] +- `[ 102.86s]` VIBRATE [15] +- `[ 102.86s]` SFX ♪ tone_up +- `[ 102.86s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 104.74s]` VOICE ■ gd_clear (kill) +- `[ 104.74s]` VOICE ▶ chance_plus (dur 1.44s) +- `[ 106.34s]` VOICE ■ chance_plus (kill) +- `[ 106.65s]` VOICE ▶ round_05 (dur 2.96s) +- `[ 109.14s]` VIBRATE [8] +- `[ 109.14s]` SFX ♪ tone_right +- `[ 109.64s]` VOICE ■ round_05 (kill) +- `[ 109.74s]` VIBRATE [8] +- `[ 109.74s]` SFX ♪ tone_down +- `[ 110.33s]` VIBRATE [8] +- `[ 110.33s]` SFX ♪ tone_doubletap +- `[ 110.93s]` VIBRATE [8] +- `[ 110.93s]` SFX ♪ tone_down +- `[ 111.53s]` VIBRATE [8] +- `[ 111.53s]` SFX ♪ tone_up +- `[ 112.12s]` VIBRATE [8] +- `[ 112.12s]` SFX ♪ tone_tap +- `[ 113.12s]` VIBRATE [20] +- `[ 113.24s]` **GESTURE** swipeup @(195,422) +- `[ 113.61s]` VIBRATE [10] +- `[ 113.61s]` VIBRATE [15] +- `[ 113.61s]` VOICE ▶ relisten (dur 0.7996371882086167s) +- `[ 114.37s]` VOICE ■ relisten (kill) +- `[ 114.38s]` VOICE ▶ gd_chances_left1 (dur 1.52s) +- `[ 115.98s]` VOICE ■ gd_chances_left1 (kill) +- `[ 115.98s]` VIBRATE [8] +- `[ 115.98s]` SFX ♪ tone_right +- `[ 116.57s]` VIBRATE [8] +- `[ 116.57s]` SFX ♪ tone_down +- `[ 117.17s]` VIBRATE [8] +- `[ 117.17s]` SFX ♪ tone_doubletap +- `[ 117.77s]` VIBRATE [8] +- `[ 117.77s]` SFX ♪ tone_down +- `[ 118.36s]` VIBRATE [8] +- `[ 118.36s]` SFX ♪ tone_up +- `[ 118.96s]` VIBRATE [8] +- `[ 118.96s]` SFX ♪ tone_tap +- `[ 119.95s]` VIBRATE [20] +- `[ 120.35s]` **GESTURE** swiperight @(195,422) +- `[ 120.71s]` VIBRATE [10] +- `[ 120.71s]` SFX ♪ tone_right +- `[ 121.11s]` **GESTURE** swipedown @(195,422) +- `[ 121.47s]` VIBRATE [10] +- `[ 121.47s]` SFX ♪ tone_down +- `[ 121.88s]` **GESTURE** doubletap @(195,422) +- `[ 122.13s]` VIBRATE [20] +- `[ 122.13s]` SFX ♪ tone_doubletap +- `[ 122.53s]` **GESTURE** swipedown @(195,422) +- `[ 122.89s]` VIBRATE [10] +- `[ 122.89s]` SFX ♪ tone_down +- `[ 123.30s]` **GESTURE** swipeup @(195,422) +- `[ 123.66s]` VIBRATE [10] +- `[ 123.66s]` SFX ♪ tone_up +- `[ 124.06s]` **GESTURE** tap @(195,422) +- `[ 124.43s]` VIBRATE [20] +- `[ 124.43s]` VIBRATE [100] +- `[ 124.43s]` SFX ♪ tone_tap +- `[ 124.43s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 125.19s]` VOICE ■ correct (kill) +- `[ 125.50s]` VOICE ▶ round_06 (dur 1.68s) +- `[ 127.38s]` VOICE ■ round_06 (kill) +- `[ 127.38s]` VIBRATE [8] +- `[ 127.38s]` SFX ♪ tone_right +- `[ 127.95s]` VIBRATE [8] +- `[ 127.95s]` SFX ♪ tone_down +- `[ 128.52s]` VIBRATE [8] +- `[ 128.52s]` SFX ♪ tone_doubletap +- `[ 129.09s]` VIBRATE [8] +- `[ 129.09s]` SFX ♪ tone_down +- `[ 129.66s]` VIBRATE [8] +- `[ 129.66s]` SFX ♪ tone_up +- `[ 130.23s]` VIBRATE [8] +- `[ 130.23s]` SFX ♪ tone_tap +- `[ 130.80s]` VIBRATE [8] +- `[ 130.80s]` SFX ♪ tone_right +- `[ 131.77s]` VIBRATE [20] +- `[ 132.10s]` **GESTURE** swiperight @(195,422) +- `[ 132.46s]` VIBRATE [10] +- `[ 132.46s]` SFX ♪ tone_right +- `[ 132.86s]` **GESTURE** swipedown @(195,422) +- `[ 133.22s]` VIBRATE [10] +- `[ 133.22s]` SFX ♪ tone_down +- `[ 133.63s]` **GESTURE** doubletap @(195,422) +- `[ 133.88s]` VIBRATE [20] +- `[ 133.88s]` SFX ♪ tone_doubletap +- `[ 134.28s]` **GESTURE** swipedown @(195,422) +- `[ 134.64s]` VIBRATE [10] +- `[ 134.64s]` SFX ♪ tone_down +- `[ 135.05s]` **GESTURE** swipeup @(195,422) +- `[ 135.41s]` VIBRATE [10] +- `[ 135.41s]` SFX ♪ tone_up +- `[ 135.81s]` **GESTURE** tap @(195,422) +- `[ 136.18s]` VIBRATE [20] +- `[ 136.18s]` SFX ♪ tone_tap +- `[ 136.28s]` **GESTURE** swiperight @(195,422) +- `[ 136.64s]` VIBRATE [10] +- `[ 136.64s]` VIBRATE [100] +- `[ 136.64s]` SFX ♪ tone_right +- `[ 136.64s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 138.52s]` VOICE ■ gd_clear (kill) +- `[ 138.83s]` VOICE ▶ round_07 (dur 2.96s) +- `[ 141.32s]` VIBRATE [8] +- `[ 141.32s]` SFX ♪ tone_right +- `[ 141.82s]` VOICE ■ round_07 (kill) +- `[ 141.87s]` VIBRATE [8] +- `[ 141.87s]` SFX ♪ tone_down +- `[ 142.41s]` VIBRATE [8] +- `[ 142.41s]` SFX ♪ tone_doubletap +- `[ 142.95s]` VIBRATE [8] +- `[ 142.95s]` SFX ♪ tone_down +- `[ 143.50s]` VIBRATE [8] +- `[ 143.50s]` SFX ♪ tone_up +- `[ 144.04s]` VIBRATE [8] +- `[ 144.04s]` SFX ♪ tone_tap +- `[ 144.59s]` VIBRATE [8] +- `[ 144.59s]` SFX ♪ tone_right +- `[ 145.13s]` VIBRATE [8] +- `[ 145.13s]` SFX ♪ tone_up +- `[ 146.07s]` VIBRATE [20] +- `[ 146.16s]` **GESTURE** swipeup @(195,422) +- `[ 146.52s]` VIBRATE [10] +- `[ 146.52s]` VIBRATE [15] +- `[ 146.52s]` VOICE ▶ relisten (dur 0.7996371882086167s) +- `[ 147.27s]` VOICE ■ relisten (kill) +- `[ 147.28s]` VOICE ▶ gd_chances_left0 (dur 5.44s) +- `[ 152.96s]` VOICE ■ gd_chances_left0 (kill) +- `[ 152.96s]` VIBRATE [8] +- `[ 152.96s]` SFX ♪ tone_right +- `[ 153.51s]` VIBRATE [8] +- `[ 153.51s]` SFX ♪ tone_down +- `[ 154.05s]` VIBRATE [8] +- `[ 154.05s]` SFX ♪ tone_doubletap +- `[ 154.59s]` VIBRATE [8] +- `[ 154.59s]` SFX ♪ tone_down +- `[ 155.14s]` VIBRATE [8] +- `[ 155.14s]` SFX ♪ tone_up +- `[ 155.68s]` VIBRATE [8] +- `[ 155.68s]` SFX ♪ tone_tap +- `[ 156.23s]` VIBRATE [8] +- `[ 156.23s]` SFX ♪ tone_right +- `[ 156.77s]` VIBRATE [8] +- `[ 156.77s]` SFX ♪ tone_up +- `[ 157.72s]` VIBRATE [20] +- `[ 158.06s]` **GESTURE** swiperight @(195,422) +- `[ 158.42s]` VIBRATE [10] +- `[ 158.42s]` SFX ♪ tone_right +- `[ 158.83s]` **GESTURE** swipedown @(195,422) +- `[ 159.19s]` VIBRATE [10] +- `[ 159.19s]` SFX ♪ tone_down +- `[ 159.59s]` **GESTURE** doubletap @(195,422) +- `[ 159.84s]` VIBRATE [20] +- `[ 159.84s]` SFX ♪ tone_doubletap +- `[ 160.25s]` **GESTURE** swipedown @(195,422) +- `[ 160.61s]` VIBRATE [10] +- `[ 160.61s]` SFX ♪ tone_down +- `[ 161.01s]` **GESTURE** swipeup @(195,422) +- `[ 161.37s]` VIBRATE [10] +- `[ 161.37s]` SFX ♪ tone_up +- `[ 161.78s]` **GESTURE** tap @(195,422) +- `[ 162.14s]` VIBRATE [20] +- `[ 162.14s]` SFX ♪ tone_tap +- `[ 162.25s]` **GESTURE** swiperight @(195,422) +- `[ 162.61s]` VIBRATE [10] +- `[ 162.61s]` SFX ♪ tone_right +- `[ 163.01s]` **GESTURE** swipeup @(195,422) +- `[ 163.37s]` VIBRATE [10] +- `[ 163.37s]` VIBRATE [100] +- `[ 163.37s]` SFX ♪ tone_up +- `[ 163.37s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 164.13s]` VOICE ■ correct (kill) +- `[ 164.44s]` VOICE ▶ round_08 (dur 2.08s) +- `[ 166.78s]` VOICE ■ round_08 (kill) +- `[ 166.78s]` VIBRATE [8] +- `[ 166.78s]` SFX ♪ tone_right +- `[ 167.29s]` VIBRATE [8] +- `[ 167.29s]` SFX ♪ tone_down +- `[ 167.81s]` VIBRATE [8] +- `[ 167.81s]` SFX ♪ tone_doubletap +- `[ 168.33s]` VIBRATE [8] +- `[ 168.33s]` SFX ♪ tone_down +- `[ 168.85s]` VIBRATE [8] +- `[ 168.85s]` SFX ♪ tone_up +- `[ 169.37s]` VIBRATE [8] +- `[ 169.37s]` SFX ♪ tone_tap +- `[ 169.89s]` VIBRATE [8] +- `[ 169.89s]` SFX ♪ tone_right +- `[ 170.40s]` VIBRATE [8] +- `[ 170.40s]` SFX ♪ tone_up +- `[ 170.92s]` VIBRATE [8] +- `[ 170.92s]` SFX ♪ tone_down +- `[ 171.84s]` VIBRATE [20] +- `[ 172.22s]` **GESTURE** swiperight @(195,422) +- `[ 172.57s]` VIBRATE [10] +- `[ 172.57s]` SFX ♪ tone_right +- `[ 172.98s]` **GESTURE** swipedown @(195,422) +- `[ 173.34s]` VIBRATE [10] +- `[ 173.34s]` SFX ♪ tone_down +- `[ 173.75s]` **GESTURE** doubletap @(195,422) +- `[ 173.99s]` VIBRATE [20] +- `[ 173.99s]` SFX ♪ tone_doubletap +- `[ 174.40s]` **GESTURE** swipedown @(195,422) +- `[ 174.75s]` VIBRATE [10] +- `[ 174.75s]` SFX ♪ tone_down +- `[ 175.16s]` **GESTURE** swipeup @(195,422) +- `[ 175.52s]` VIBRATE [10] +- `[ 175.52s]` SFX ♪ tone_up +- `[ 175.93s]` **GESTURE** tap @(195,422) +- `[ 176.29s]` VIBRATE [20] +- `[ 176.29s]` SFX ♪ tone_tap +- `[ 176.40s]` **GESTURE** swiperight @(195,422) +- `[ 176.75s]` VIBRATE [10] +- `[ 176.75s]` SFX ♪ tone_right +- `[ 177.16s]` **GESTURE** swipeup @(195,422) +- `[ 177.52s]` VIBRATE [10] +- `[ 177.52s]` SFX ♪ tone_up +- `[ 177.93s]` **GESTURE** swipedown @(195,422) +- `[ 178.29s]` VIBRATE [10] +- `[ 178.29s]` VIBRATE [100] +- `[ 178.29s]` SFX ♪ tone_down +- `[ 178.29s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 180.17s]` VOICE ■ gd_clear (kill) +- `[ 180.48s]` VOICE ▶ round_09 (dur 2.08s) +- `[ 182.82s]` VOICE ■ round_09 (kill) +- `[ 182.82s]` VIBRATE [8] +- `[ 182.82s]` SFX ♪ tone_right +- `[ 183.31s]` VIBRATE [8] +- `[ 183.31s]` SFX ♪ tone_down +- `[ 183.81s]` VIBRATE [8] +- `[ 183.81s]` SFX ♪ tone_doubletap +- `[ 184.30s]` VIBRATE [8] +- `[ 184.30s]` SFX ♪ tone_down +- `[ 184.79s]` VIBRATE [8] +- `[ 184.79s]` SFX ♪ tone_up +- `[ 185.28s]` VIBRATE [8] +- `[ 185.28s]` SFX ♪ tone_tap +- `[ 185.77s]` VIBRATE [8] +- `[ 185.77s]` SFX ♪ tone_right +- `[ 186.27s]` VIBRATE [8] +- `[ 186.27s]` SFX ♪ tone_up +- `[ 186.76s]` VIBRATE [8] +- `[ 186.76s]` SFX ♪ tone_down +- `[ 187.25s]` VIBRATE [8] +- `[ 187.25s]` SFX ♪ tone_down +- `[ 188.14s]` VIBRATE [20] +- `[ 188.48s]` **GESTURE** swiperight @(195,422) +- `[ 188.84s]` VIBRATE [10] +- `[ 188.84s]` SFX ♪ tone_right +- `[ 189.24s]` **GESTURE** swipedown @(195,422) +- `[ 189.60s]` VIBRATE [10] +- `[ 189.60s]` SFX ♪ tone_down +- `[ 190.01s]` **GESTURE** doubletap @(195,422) +- `[ 190.26s]` VIBRATE [20] +- `[ 190.26s]` SFX ♪ tone_doubletap +- `[ 190.66s]` **GESTURE** swipedown @(195,422) +- `[ 191.02s]` VIBRATE [10] +- `[ 191.02s]` SFX ♪ tone_down +- `[ 191.43s]` **GESTURE** swipeup @(195,422) +- `[ 191.79s]` VIBRATE [10] +- `[ 191.79s]` SFX ♪ tone_up +- `[ 192.19s]` **GESTURE** tap @(195,422) +- `[ 192.56s]` VIBRATE [20] +- `[ 192.56s]` SFX ♪ tone_tap +- `[ 192.66s]` **GESTURE** swiperight @(195,422) +- `[ 193.02s]` VIBRATE [10] +- `[ 193.02s]` SFX ♪ tone_right +- `[ 193.43s]` **GESTURE** swipeup @(195,422) +- `[ 193.79s]` VIBRATE [10] +- `[ 193.79s]` SFX ♪ tone_up +- `[ 194.19s]` **GESTURE** swipedown @(195,422) +- `[ 194.55s]` VIBRATE [10] +- `[ 194.55s]` SFX ♪ tone_down +- `[ 194.96s]` **GESTURE** swipedown @(195,422) +- `[ 195.32s]` VIBRATE [10] +- `[ 195.32s]` VIBRATE [100] +- `[ 195.32s]` SFX ♪ tone_down +- `[ 195.32s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 196.08s]` VOICE ■ correct (kill) +- `[ 196.38s]` VOICE ▶ round_10 (dur 1.6s) +- `[ 197.98s]` VOICE ■ round_10 (kill) +- `[ 197.98s]` VIBRATE [8] +- `[ 197.98s]` SFX ♪ tone_right +- `[ 198.45s]` VIBRATE [8] +- `[ 198.45s]` SFX ♪ tone_down +- `[ 198.91s]` VIBRATE [8] +- `[ 198.91s]` SFX ♪ tone_doubletap +- `[ 199.38s]` VIBRATE [8] +- `[ 199.38s]` SFX ♪ tone_down +- `[ 199.85s]` VIBRATE [8] +- `[ 199.85s]` SFX ♪ tone_up +- `[ 200.31s]` VIBRATE [8] +- `[ 200.31s]` SFX ♪ tone_tap +- `[ 200.78s]` VIBRATE [8] +- `[ 200.78s]` SFX ♪ tone_right +- `[ 201.25s]` VIBRATE [8] +- `[ 201.25s]` SFX ♪ tone_up +- `[ 201.71s]` VIBRATE [8] +- `[ 201.71s]` SFX ♪ tone_down +- `[ 202.18s]` VIBRATE [8] +- `[ 202.18s]` SFX ♪ tone_down +- `[ 202.64s]` VIBRATE [8] +- `[ 202.64s]` SFX ♪ tone_right +- `[ 203.51s]` VIBRATE [20] +- `[ 203.91s]` **GESTURE** swiperight @(195,422) +- `[ 204.27s]` VIBRATE [10] +- `[ 204.27s]` SFX ♪ tone_right +- `[ 204.68s]` **GESTURE** swipedown @(195,422) +- `[ 205.04s]` VIBRATE [10] +- `[ 205.04s]` SFX ♪ tone_down +- `[ 205.44s]` **GESTURE** doubletap @(195,422) +- `[ 205.69s]` VIBRATE [20] +- `[ 205.69s]` SFX ♪ tone_doubletap +- `[ 206.10s]` **GESTURE** swipedown @(195,422) +- `[ 206.45s]` VIBRATE [10] +- `[ 206.45s]` SFX ♪ tone_down +- `[ 206.86s]` **GESTURE** swipeup @(195,422) +- `[ 207.22s]` VIBRATE [10] +- `[ 207.22s]` SFX ♪ tone_up +- `[ 207.63s]` **GESTURE** tap @(195,422) +- `[ 207.99s]` VIBRATE [20] +- `[ 207.99s]` SFX ♪ tone_tap +- `[ 208.10s]` **GESTURE** swiperight @(195,422) +- `[ 208.45s]` VIBRATE [10] +- `[ 208.45s]` SFX ♪ tone_right +- `[ 208.86s]` **GESTURE** swipeup @(195,422) +- `[ 209.22s]` VIBRATE [10] +- `[ 209.22s]` SFX ♪ tone_up +- `[ 209.63s]` **GESTURE** swipedown @(195,422) +- `[ 209.99s]` VIBRATE [10] +- `[ 209.99s]` SFX ♪ tone_down +- `[ 210.39s]` **GESTURE** swipedown @(195,422) +- `[ 210.75s]` VIBRATE [10] +- `[ 210.75s]` SFX ♪ tone_down +- `[ 211.16s]` **GESTURE** swiperight @(195,422) +- `[ 211.52s]` VIBRATE [10] +- `[ 211.52s]` VIBRATE [100] +- `[ 211.52s]` SFX ♪ tone_right +- `[ 211.52s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 213.40s]` VOICE ■ gd_clear (kill) +- `[ 213.71s]` VOICE ▶ round_11 (dur 1.44s) +- `[ 215.30s]` VOICE ■ round_11 (kill) +- `[ 215.30s]` VIBRATE [8] +- `[ 215.30s]` SFX ♪ tone_right +- `[ 215.74s]` VIBRATE [8] +- `[ 215.74s]` SFX ♪ tone_down +- `[ 216.18s]` VIBRATE [8] +- `[ 216.18s]` SFX ♪ tone_doubletap +- `[ 216.62s]` VIBRATE [8] +- `[ 216.62s]` SFX ♪ tone_down +- `[ 217.06s]` VIBRATE [8] +- `[ 217.06s]` SFX ♪ tone_up +- `[ 217.50s]` VIBRATE [8] +- `[ 217.50s]` SFX ♪ tone_tap +- `[ 217.94s]` VIBRATE [8] +- `[ 217.94s]` SFX ♪ tone_right +- `[ 218.38s]` VIBRATE [8] +- `[ 218.38s]` SFX ♪ tone_up +- `[ 218.82s]` VIBRATE [8] +- `[ 218.82s]` SFX ♪ tone_down +- `[ 219.26s]` VIBRATE [8] +- `[ 219.26s]` SFX ♪ tone_down +- `[ 219.70s]` VIBRATE [8] +- `[ 219.70s]` SFX ♪ tone_right +- `[ 220.14s]` VIBRATE [8] +- `[ 220.15s]` SFX ♪ tone_left +- `[ 220.99s]` VIBRATE [20] +- `[ 221.34s]` **GESTURE** swiperight @(195,422) +- `[ 221.70s]` VIBRATE [10] +- `[ 221.70s]` SFX ♪ tone_right +- `[ 222.11s]` **GESTURE** swipedown @(195,422) +- `[ 222.47s]` VIBRATE [10] +- `[ 222.47s]` SFX ♪ tone_down +- `[ 222.88s]` **GESTURE** doubletap @(195,422) +- `[ 223.12s]` VIBRATE [20] +- `[ 223.12s]` SFX ♪ tone_doubletap +- `[ 223.53s]` **GESTURE** swipedown @(195,422) +- `[ 223.89s]` VIBRATE [10] +- `[ 223.89s]` SFX ♪ tone_down +- `[ 224.29s]` **GESTURE** swipeup @(195,422) +- `[ 224.65s]` VIBRATE [10] +- `[ 224.65s]` SFX ♪ tone_up +- `[ 225.06s]` **GESTURE** tap @(195,422) +- `[ 225.42s]` VIBRATE [20] +- `[ 225.42s]` SFX ♪ tone_tap +- `[ 225.53s]` **GESTURE** swiperight @(195,422) +- `[ 225.89s]` VIBRATE [10] +- `[ 225.89s]` SFX ♪ tone_right +- `[ 226.29s]` **GESTURE** swipeup @(195,422) +- `[ 226.65s]` VIBRATE [10] +- `[ 226.65s]` SFX ♪ tone_up +- `[ 227.06s]` **GESTURE** swipedown @(195,422) +- `[ 227.42s]` VIBRATE [10] +- `[ 227.42s]` SFX ♪ tone_down +- `[ 227.83s]` **GESTURE** swipedown @(195,422) +- `[ 228.19s]` VIBRATE [10] +- `[ 228.19s]` SFX ♪ tone_down +- `[ 228.59s]` **GESTURE** swiperight @(195,422) +- `[ 228.95s]` VIBRATE [10] +- `[ 228.95s]` SFX ♪ tone_right +- `[ 229.36s]` **GESTURE** swipeleft @(195,422) +- `[ 229.72s]` VIBRATE [10] +- `[ 229.72s]` VIBRATE [100] +- `[ 229.72s]` SFX ♪ tone_left +- `[ 229.72s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 230.49s]` VOICE ■ correct (kill) +- `[ 230.79s]` VOICE ▶ round_12 (dur 1.68s) +- `[ 232.67s]` VOICE ■ round_12 (kill) +- `[ 232.67s]` VIBRATE [8] +- `[ 232.67s]` SFX ♪ tone_right +- `[ 233.09s]` VIBRATE [8] +- `[ 233.09s]` SFX ♪ tone_down +- `[ 233.51s]` VIBRATE [8] +- `[ 233.51s]` SFX ♪ tone_doubletap +- `[ 233.93s]` VIBRATE [8] +- `[ 233.93s]` SFX ♪ tone_down +- `[ 234.35s]` VIBRATE [8] +- `[ 234.35s]` SFX ♪ tone_up +- `[ 234.77s]` VIBRATE [8] +- `[ 234.77s]` SFX ♪ tone_tap +- `[ 235.19s]` VIBRATE [8] +- `[ 235.19s]` SFX ♪ tone_right +- `[ 235.61s]` VIBRATE [8] +- `[ 235.61s]` SFX ♪ tone_up +- `[ 236.03s]` VIBRATE [8] +- `[ 236.03s]` SFX ♪ tone_down +- `[ 236.45s]` VIBRATE [8] +- `[ 236.45s]` SFX ♪ tone_down +- `[ 236.87s]` VIBRATE [8] +- `[ 236.87s]` SFX ♪ tone_right +- `[ 237.29s]` VIBRATE [8] +- `[ 237.29s]` SFX ♪ tone_left +- `[ 237.71s]` VIBRATE [8] +- `[ 237.71s]` SFX ♪ tone_up +- `[ 238.53s]` VIBRATE [20] +- `[ 238.92s]` **GESTURE** swiperight @(195,422) +- `[ 239.29s]` VIBRATE [10] +- `[ 239.29s]` SFX ♪ tone_right +- `[ 239.69s]` **GESTURE** swipedown @(195,422) +- `[ 240.05s]` VIBRATE [10] +- `[ 240.05s]` SFX ♪ tone_down +- `[ 240.46s]` **GESTURE** doubletap @(195,422) +- `[ 240.71s]` VIBRATE [20] +- `[ 240.71s]` SFX ♪ tone_doubletap +- `[ 241.11s]` **GESTURE** swipedown @(195,422) +- `[ 241.47s]` VIBRATE [10] +- `[ 241.47s]` SFX ♪ tone_down +- `[ 241.88s]` **GESTURE** swipeup @(195,422) +- `[ 242.24s]` VIBRATE [10] +- `[ 242.24s]` SFX ♪ tone_up +- `[ 242.64s]` **GESTURE** tap @(195,422) +- `[ 243.00s]` VIBRATE [20] +- `[ 243.00s]` SFX ♪ tone_tap +- `[ 243.11s]` **GESTURE** swiperight @(195,422) +- `[ 243.47s]` VIBRATE [10] +- `[ 243.47s]` SFX ♪ tone_right +- `[ 243.87s]` **GESTURE** swipeup @(195,422) +- `[ 244.24s]` VIBRATE [10] +- `[ 244.24s]` SFX ♪ tone_up +- `[ 244.64s]` **GESTURE** swipedown @(195,422) +- `[ 245.00s]` VIBRATE [10] +- `[ 245.00s]` SFX ♪ tone_down +- `[ 245.41s]` **GESTURE** swipedown @(195,422) +- `[ 245.77s]` VIBRATE [10] +- `[ 245.77s]` SFX ♪ tone_down +- `[ 246.18s]` **GESTURE** swiperight @(195,422) +- `[ 246.53s]` VIBRATE [10] +- `[ 246.53s]` SFX ♪ tone_right +- `[ 246.94s]` **GESTURE** swipeleft @(195,422) +- `[ 247.30s]` VIBRATE [10] +- `[ 247.30s]` SFX ♪ tone_left +- `[ 247.71s]` **GESTURE** swipeup @(195,422) +- `[ 248.07s]` VIBRATE [10] +- `[ 248.07s]` VIBRATE [100] +- `[ 248.07s]` SFX ♪ tone_up +- `[ 248.07s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 249.94s]` VOICE ■ gd_clear (kill) +- `[ 250.25s]` VOICE ▶ round_13 (dur 2.48s) +- `[ 252.74s]` VIBRATE [8] +- `[ 252.74s]` SFX ♪ tone_right +- `[ 252.96s]` VOICE ■ round_13 (kill) +- `[ 253.16s]` VIBRATE [8] +- `[ 253.16s]` SFX ♪ tone_down +- `[ 253.59s]` VIBRATE [8] +- `[ 253.59s]` SFX ♪ tone_doubletap +- `[ 254.00s]` VIBRATE [8] +- `[ 254.00s]` SFX ♪ tone_down +- `[ 254.43s]` VIBRATE [8] +- `[ 254.43s]` SFX ♪ tone_up +- `[ 254.84s]` VIBRATE [8] +- `[ 254.84s]` SFX ♪ tone_tap +- `[ 255.26s]` VIBRATE [8] +- `[ 255.27s]` SFX ♪ tone_right +- `[ 255.69s]` VIBRATE [8] +- `[ 255.69s]` SFX ♪ tone_up +- `[ 256.11s]` VIBRATE [8] +- `[ 256.11s]` SFX ♪ tone_down +- `[ 256.53s]` VIBRATE [8] +- `[ 256.53s]` SFX ♪ tone_down +- `[ 256.95s]` VIBRATE [8] +- `[ 256.95s]` SFX ♪ tone_right +- `[ 257.37s]` VIBRATE [8] +- `[ 257.37s]` SFX ♪ tone_left +- `[ 257.79s]` VIBRATE [8] +- `[ 257.79s]` SFX ♪ tone_up +- `[ 258.21s]` VIBRATE [8] +- `[ 258.21s]` SFX ♪ tone_tap +- `[ 259.03s]` VIBRATE [20] +- `[ 259.36s]` **GESTURE** swipedown @(195,422) +- `[ 259.72s]` VIBRATE [10] +- `[ 259.72s]` VIBRATE [60,40,60] +- `[ 259.72s]` SFX ♪ tone_down +- `[ 259.73s]` VOICE ▶ retry_use (dur 2.64s) +- `[ 260.02s]` VIBRATE [30,50,30,50,30] +- `[ 262.44s]` VOICE ■ retry_use (kill) +- `[ 262.44s]` VOICE ▶ gd_occ_both (dur 2.72s) +- `[ 265.15s]` VOICE ■ gd_occ_both (kill) +- `[ 265.15s]` VIBRATE [8] +- `[ 265.15s]` SFX ♪ tone_right +- `[ 265.57s]` VIBRATE [8] +- `[ 265.57s]` SFX ♪ tone_down +- `[ 265.99s]` VIBRATE [8] +- `[ 265.99s]` SFX ♪ tone_doubletap +- `[ 266.41s]` VIBRATE [8] +- `[ 266.41s]` SFX ♪ tone_down +- `[ 266.83s]` VIBRATE [8] +- `[ 266.83s]` SFX ♪ tone_up +- `[ 267.25s]` VIBRATE [8] +- `[ 267.25s]` SFX ♪ tone_tap +- `[ 267.67s]` VIBRATE [8] +- `[ 267.67s]` SFX ♪ tone_right +- `[ 268.09s]` VIBRATE [8] +- `[ 268.09s]` SFX ♪ tone_up +- `[ 268.51s]` VIBRATE [8] +- `[ 268.51s]` SFX ♪ tone_down +- `[ 268.93s]` VIBRATE [8] +- `[ 268.93s]` SFX ♪ tone_down +- `[ 269.35s]` VIBRATE [8] +- `[ 269.35s]` SFX ♪ tone_right +- `[ 269.77s]` VIBRATE [8] +- `[ 269.77s]` SFX ♪ tone_left +- `[ 270.19s]` VIBRATE [8] +- `[ 270.19s]` SFX ♪ tone_up +- `[ 270.61s]` VIBRATE [8] +- `[ 270.61s]` SFX ♪ tone_tap +- `[ 271.44s]` VIBRATE [20] +- `[ 271.74s]` **GESTURE** swipedown @(195,422) +- `[ 272.10s]` VIBRATE [10] +- `[ 272.10s]` VIBRATE [60,40,60] +- `[ 272.10s]` SFX ♪ tone_down +- `[ 272.10s]` VOICE ▶ retry_use (dur 2.64s) +- `[ 272.40s]` VIBRATE [30,50,30,50,30] +- `[ 274.81s]` VOICE ■ retry_use (kill) +- `[ 274.82s]` VOICE ▶ chances_out (dur 1.76s) +- `[ 276.69s]` VOICE ■ chances_out (kill) +- `[ 276.69s]` VOICE ▶ gd_occ_both (dur 2.72s) +- `[ 279.41s]` VOICE ■ gd_occ_both (kill) +- `[ 279.41s]` VIBRATE [8] +- `[ 279.41s]` SFX ♪ tone_right +- `[ 279.83s]` VIBRATE [8] +- `[ 279.83s]` SFX ♪ tone_down +- `[ 280.25s]` VIBRATE [8] +- `[ 280.25s]` SFX ♪ tone_doubletap +- `[ 280.67s]` VIBRATE [8] +- `[ 280.67s]` SFX ♪ tone_down +- `[ 281.09s]` VIBRATE [8] +- `[ 281.09s]` SFX ♪ tone_up +- `[ 281.51s]` VIBRATE [8] +- `[ 281.51s]` SFX ♪ tone_tap +- `[ 281.93s]` VIBRATE [8] +- `[ 281.93s]` SFX ♪ tone_right +- `[ 282.35s]` VIBRATE [8] +- `[ 282.35s]` SFX ♪ tone_up +- `[ 282.77s]` VIBRATE [8] +- `[ 282.77s]` SFX ♪ tone_down +- `[ 283.19s]` VIBRATE [8] +- `[ 283.19s]` SFX ♪ tone_down +- `[ 283.61s]` VIBRATE [8] +- `[ 283.61s]` SFX ♪ tone_right +- `[ 284.03s]` VIBRATE [8] +- `[ 284.03s]` SFX ♪ tone_left +- `[ 284.45s]` VIBRATE [8] +- `[ 284.45s]` SFX ♪ tone_up +- `[ 284.87s]` VIBRATE [8] +- `[ 284.87s]` SFX ♪ tone_tap +- `[ 285.69s]` VIBRATE [20] +- `[ 286.10s]` **GESTURE** swipedown @(195,422) +- `[ 286.45s]` VIBRATE [10] +- `[ 286.45s]` VIBRATE [60,40,60] +- `[ 286.45s]` SFX ♪ tone_down +- `[ 286.75s]` VIBRATE [80] +- `[ 287.15s]` SFX ♪ gameover +- `[ 287.86s]` VOICE ▶ gameover (dur 0.9570975056689343s) +- `[ 289.00s]` VOICE ■ gameover (kill) +- `[ 289.00s]` VOICE ▶ score_band5 (dur 2.32s) +- `[ 289.24s]` BGM ♪ menu (loop) +- `[ 291.34s]` VOICE ■ score_band5 (kill) +- `[ 291.35s]` VOICE ▶ new_record (dur 1.28s) +- `[ 292.94s]` VOICE ■ new_record (kill) +- `[ 292.95s]` VOICE ▶ replay (dur 2.24s) +- `[ 295.29s]` VOICE ■ replay (kill) +- `[ 295.30s]` VOICE ▶ rules_prompt (dur 5.36s) +- `[ 300.98s]` VOICE ■ rules_prompt (kill) +- `[ 301.58s]` **GESTURE** tap @(195,422) +- `[ 301.95s]` VIBRATE [20] +- `[ 301.95s]` SFX ♪ tone_tap +- `[ 301.95s]` VOICE ▶ round_01 (dur 1.52s) +- `[ 303.55s]` VOICE ■ round_01 (kill) +- `[ 303.55s]` VIBRATE [8] +- `[ 303.55s]` SFX ♪ tone_tap +- `[ 304.25s]` VIBRATE [8] +- `[ 304.25s]` SFX ♪ tone_doubletap +- `[ 305.36s]` VIBRATE [20] +- `[ 305.36s]` VOICE ▶ gd_occ_dt (dur 1.68s) +- `[ 307.22s]` VOICE ■ gd_occ_dt (kill) +- `[ 307.22s]` VOICE ▶ your_turn (dur 0.7970975056689342s) +- `[ 307.99s]` VOICE ■ your_turn (kill) +- `[ 308.43s]` **GESTURE** tap @(195,422) +- `[ 308.80s]` VIBRATE [20] +- `[ 308.80s]` SFX ♪ tone_tap +- `[ 308.90s]` **GESTURE** doubletap @(195,422) +- `[ 309.15s]` VIBRATE [20] +- `[ 309.15s]` VIBRATE [100] +- `[ 309.15s]` SFX ♪ tone_doubletap +- `[ 309.15s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 309.92s]` VOICE ■ correct (kill) +- `[ 310.22s]` VOICE ▶ round_02 (dur 1.44s) +- `[ 311.82s]` VOICE ■ round_02 (kill) +- `[ 311.82s]` VIBRATE [8] +- `[ 311.82s]` SFX ♪ tone_tap +- `[ 312.49s]` VIBRATE [8] +- `[ 312.49s]` SFX ♪ tone_doubletap +- `[ 313.17s]` VIBRATE [8] +- `[ 313.17s]` SFX ♪ tone_doubletap +- `[ 314.24s]` VIBRATE [20] +- `[ 314.65s]` **GESTURE** tap @(195,422) +- `[ 315.02s]` VIBRATE [20] +- `[ 315.02s]` SFX ♪ tone_tap +- `[ 315.12s]` **GESTURE** doubletap @(195,422) +- `[ 315.37s]` VIBRATE [20] +- `[ 315.37s]` SFX ♪ tone_doubletap +- `[ 315.77s]` **GESTURE** doubletap @(195,422) +- `[ 316.02s]` VIBRATE [20] +- `[ 316.02s]` VIBRATE [100] +- `[ 316.02s]` SFX ♪ tone_doubletap +- `[ 316.02s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 317.90s]` VOICE ■ gd_clear (kill) +- `[ 318.20s]` VOICE ▶ round_03 (dur 1.68s) +- `[ 318.28s]` **GESTURE** swipedown @(195,422) +- `[ 318.63s]` VIBRATE [10] +- `[ 320.08s]` VOICE ■ round_03 (kill) +- `[ 320.08s]` VIBRATE [8] +- `[ 320.08s]` SFX ♪ tone_tap +- `[ 320.73s]` VIBRATE [8] +- `[ 320.73s]` SFX ♪ tone_doubletap +- `[ 321.38s]` VIBRATE [8] +- `[ 321.38s]` SFX ♪ tone_doubletap +- `[ 322.03s]` VIBRATE [8] +- `[ 322.03s]` SFX ♪ tone_left +- `[ 323.08s]` VIBRATE [20] diff --git a/research/simon-polish/round1/live-A-verdicts.json b/research/simon-polish/round1/live-A-verdicts.json new file mode 100644 index 00000000..7a085165 --- /dev/null +++ b/research/simon-polish/round1/live-A-verdicts.json @@ -0,0 +1,988 @@ +{ + "game": "simon", + "settings": { + "voice": "female", + "guide": "full", + "speed": 1, + "bgm": 1 + }, + "outdir": "/home/xsl/AutoVideo/SoundGame/web/harness/live/out/simon-20260914104429", + "segs": [ + { + "idx": 0, + "voiceId": "t0_welcome", + "t0": 0.502, + "t1": 5.064, + "dur": 4.24, + "expEnd": 4.742, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 1, + "voiceId": "skip_hint", + "t0": 5.064, + "t1": 6.666, + "dur": 1.6, + "expEnd": 6.664, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 2, + "voiceId": "t0_goal", + "t0": 6.666, + "t1": 13.097, + "dur": 6.08, + "expEnd": 12.746, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 3, + "voiceId": "t1_up", + "t0": 13.106, + "t1": 18.042, + "dur": 4.64, + "expEnd": 17.746, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 4, + "voiceId": "t_try", + "t0": 18.943, + "t1": 19.714, + "dur": 0.7970975056689342, + "expEnd": 19.74, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 5, + "voiceId": "t_ok", + "t0": 20.35, + "t1": 20.829, + "dur": 0.4770975056689342, + "expEnd": 20.827, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 6, + "voiceId": "t2_down", + "t0": 20.834, + "t1": 23.173, + "dur": 2.24, + "expEnd": 23.074, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 7, + "voiceId": "t_try", + "t0": 24.074, + "t1": 24.845, + "dur": 0.7970975056689342, + "expEnd": 24.871, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 8, + "voiceId": "t_ok", + "t0": 25.411, + "t1": 25.89, + "dur": 0.4770975056689342, + "expEnd": 25.888, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 9, + "voiceId": "t3_left", + "t0": 25.896, + "t1": 28.607, + "dur": 2.64, + "expEnd": 28.536, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 10, + "voiceId": "t_try", + "t0": 29.507, + "t1": 30.278, + "dur": 0.7970975056689342, + "expEnd": 30.304, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 11, + "voiceId": "t_wrong_left", + "t0": 30.851, + "t1": 33.552, + "dur": 2.48, + "expEnd": 33.331, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 12, + "voiceId": "t_ok", + "t0": 34.261, + "t1": 34.736, + "dur": 0.4770975056689342, + "expEnd": 34.738, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 13, + "voiceId": "t4_right", + "t0": 34.741, + "t1": 36.338, + "dur": 1.44, + "expEnd": 36.181, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 14, + "voiceId": "t_try", + "t0": 37.238, + "t1": 38.01, + "dur": 0.7970975056689342, + "expEnd": 38.035, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 15, + "voiceId": "t_ok", + "t0": 38.577, + "t1": 39.055, + "dur": 0.4770975056689342, + "expEnd": 39.054, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 16, + "voiceId": "t5_tap", + "t0": 39.06, + "t1": 40.657, + "dur": 1.6, + "expEnd": 40.66, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 17, + "voiceId": "t_try", + "t0": 41.557, + "t1": 42.328, + "dur": 0.7970975056689342, + "expEnd": 42.354, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 18, + "voiceId": "t_ok", + "t0": 42.904, + "t1": 43.396, + "dur": 0.4770975056689342, + "expEnd": 43.381, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 19, + "voiceId": "t6_double", + "t0": 43.402, + "t1": 45.742, + "dur": 2.16, + "expEnd": 45.562, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 20, + "voiceId": "t_try", + "t0": 46.642, + "t1": 47.413, + "dur": 0.7970975056689342, + "expEnd": 47.439, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 21, + "voiceId": "t_ok", + "t0": 47.93, + "t1": 48.411, + "dur": 0.4770975056689342, + "expEnd": 48.407, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 22, + "voiceId": "t7_ready", + "t0": 48.419, + "t1": 51.871, + "dur": 3.44, + "expEnd": 51.859, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 23, + "voiceId": "t7_retry", + "t0": 51.881, + "t1": 57.838, + "dur": 5.76, + "expEnd": 57.641, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 24, + "voiceId": "gd_economy", + "t0": 57.847, + "t1": 64.641, + "dur": 6.72, + "expEnd": 64.567, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 25, + "voiceId": "round_01", + "t0": 64.641, + "t1": 66.243, + "dur": 1.52, + "expEnd": 66.161, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 26, + "voiceId": "your_turn", + "t0": 68.05, + "t1": 68.82, + "dur": 0.7970975056689342, + "expEnd": 68.847, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 27, + "voiceId": "correct", + "t0": 70.364, + "t1": 71.119, + "dur": 0.6370975056689342, + "expEnd": 71.001, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 28, + "voiceId": "round_02", + "t0": 71.425, + "t1": 73.023, + "dur": 1.44, + "expEnd": 72.865, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 29, + "voiceId": "gd_occ_dt", + "t0": 75.452, + "t1": 77.318, + "dur": 1.68, + "expEnd": 77.132, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 30, + "voiceId": "gd_clear", + "t0": 79.901, + "t1": 81.776, + "dur": 1.84, + "expEnd": 81.741, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 31, + "voiceId": "round_03", + "t0": 82.082, + "t1": 83.958, + "dur": 1.68, + "expEnd": 83.762, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 32, + "voiceId": "correct", + "t0": 89.925, + "t1": 90.692, + "dur": 0.6370975056689342, + "expEnd": 90.562, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 33, + "voiceId": "round_04", + "t0": 90.998, + "t1": 92.874, + "dur": 1.84, + "expEnd": 92.838, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 34, + "voiceId": "gd_occ_both", + "t0": 96.392, + "t1": 99.096, + "dur": 2.72, + "expEnd": 99.112, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 35, + "voiceId": "gd_clear", + "t0": 102.858, + "t1": 104.738, + "dur": 1.84, + "expEnd": 104.698, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 36, + "voiceId": "chance_plus", + "t0": 104.744, + "t1": 106.34, + "dur": 1.44, + "expEnd": 106.184, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 37, + "voiceId": "round_05", + "t0": 106.648, + "t1": 109.637, + "dur": 2.96, + "expEnd": 109.608, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 38, + "voiceId": "relisten", + "t0": 113.613, + "t1": 114.374, + "dur": 0.7996371882086167, + "expEnd": 114.413, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 39, + "voiceId": "gd_chances_left1", + "t0": 114.38, + "t1": 115.976, + "dur": 1.52, + "expEnd": 115.9, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 40, + "voiceId": "correct", + "t0": 124.427, + "t1": 125.193, + "dur": 0.6370975056689342, + "expEnd": 125.064, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 41, + "voiceId": "round_06", + "t0": 125.5, + "t1": 127.376, + "dur": 1.68, + "expEnd": 127.18, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 42, + "voiceId": "gd_clear", + "t0": 136.64, + "t1": 138.52, + "dur": 1.84, + "expEnd": 138.48, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 43, + "voiceId": "round_07", + "t0": 138.828, + "t1": 141.817, + "dur": 2.96, + "expEnd": 141.788, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 44, + "voiceId": "relisten", + "t0": 146.523, + "t1": 147.274, + "dur": 0.7996371882086167, + "expEnd": 147.323, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 45, + "voiceId": "gd_chances_left0", + "t0": 147.283, + "t1": 152.962, + "dur": 5.44, + "expEnd": 152.723, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 46, + "voiceId": "correct", + "t0": 163.372, + "t1": 164.13, + "dur": 0.6370975056689342, + "expEnd": 164.009, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 47, + "voiceId": "round_08", + "t0": 164.437, + "t1": 166.777, + "dur": 2.08, + "expEnd": 166.517, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 48, + "voiceId": "gd_clear", + "t0": 178.288, + "t1": 180.173, + "dur": 1.84, + "expEnd": 180.128, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 49, + "voiceId": "round_09", + "t0": 180.481, + "t1": 182.82, + "dur": 2.08, + "expEnd": 182.561, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 50, + "voiceId": "correct", + "t0": 195.321, + "t1": 196.078, + "dur": 0.6370975056689342, + "expEnd": 195.958, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 51, + "voiceId": "round_10", + "t0": 196.385, + "t1": 197.982, + "dur": 1.6, + "expEnd": 197.985, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 52, + "voiceId": "gd_clear", + "t0": 211.52, + "t1": 213.399, + "dur": 1.84, + "expEnd": 213.36, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 53, + "voiceId": "round_11", + "t0": 213.705, + "t1": 215.303, + "dur": 1.44, + "expEnd": 215.145, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 54, + "voiceId": "correct", + "t0": 229.72, + "t1": 230.487, + "dur": 0.6370975056689342, + "expEnd": 230.357, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 55, + "voiceId": "round_12", + "t0": 230.794, + "t1": 232.67, + "dur": 1.68, + "expEnd": 232.474, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 56, + "voiceId": "gd_clear", + "t0": 248.069, + "t1": 249.944, + "dur": 1.84, + "expEnd": 249.909, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 57, + "voiceId": "round_13", + "t0": 250.251, + "t1": 252.962, + "dur": 2.48, + "expEnd": 252.731, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 58, + "voiceId": "retry_use", + "t0": 259.725, + "t1": 262.435, + "dur": 2.64, + "expEnd": 262.365, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 59, + "voiceId": "gd_occ_both", + "t0": 262.435, + "t1": 265.152, + "dur": 2.72, + "expEnd": 265.155, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 60, + "voiceId": "retry_use", + "t0": 272.101, + "t1": 274.81, + "dur": 2.64, + "expEnd": 274.741, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 61, + "voiceId": "chances_out", + "t0": 274.817, + "t1": 276.691, + "dur": 1.76, + "expEnd": 276.577, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 62, + "voiceId": "gd_occ_both", + "t0": 276.691, + "t1": 279.407, + "dur": 2.72, + "expEnd": 279.411, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 63, + "voiceId": "gameover", + "t0": 287.857, + "t1": 288.996, + "dur": 0.9570975056689343, + "expEnd": 288.814, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 64, + "voiceId": "score_band5", + "t0": 289.003, + "t1": 291.341, + "dur": 2.32, + "expEnd": 291.323, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 65, + "voiceId": "new_record", + "t0": 291.347, + "t1": 292.943, + "dur": 1.28, + "expEnd": 292.627, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 66, + "voiceId": "replay", + "t0": 292.95, + "t1": 295.288, + "dur": 2.24, + "expEnd": 295.19, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 67, + "voiceId": "rules_prompt", + "t0": 295.297, + "t1": 300.977, + "dur": 5.36, + "expEnd": 300.657, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 68, + "voiceId": "round_01", + "t0": 301.948, + "t1": 303.554, + "dur": 1.52, + "expEnd": 303.468, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 69, + "voiceId": "gd_occ_dt", + "t0": 305.355, + "t1": 307.223, + "dur": 1.68, + "expEnd": 307.035, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 70, + "voiceId": "your_turn", + "t0": 307.223, + "t1": 307.989, + "dur": 0.7970975056689342, + "expEnd": 308.02, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 71, + "voiceId": "correct", + "t0": 309.149, + "t1": 309.916, + "dur": 0.6370975056689342, + "expEnd": 309.786, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 72, + "voiceId": "round_02", + "t0": 310.216, + "t1": 311.82, + "dur": 1.44, + "expEnd": 311.656, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 73, + "voiceId": "gd_clear", + "t0": 316.022, + "t1": 317.903, + "dur": 1.84, + "expEnd": 317.862, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + }, + { + "idx": 74, + "voiceId": "round_03", + "t0": 318.203, + "t1": 320.085, + "dur": 1.68, + "expEnd": 319.883, + "truncated": false, + "reason": "kill", + "verdict": null, + "heard": null, + "similarity": null + } + ], + "rows": [] +} \ No newline at end of file diff --git a/research/simon-polish/round1/live-B-driver.log b/research/simon-polish/round1/live-B-driver.log new file mode 100644 index 00000000..d93a0125 --- /dev/null +++ b/research/simon-polish/round1/live-B-driver.log @@ -0,0 +1,56 @@ +== 局 B(急性子乱按,male/1.7/guide full) + [我] 解锁 → tap + [我] 连点跳开场旁白 → tap + [我] 连点跳开场旁白 → tap + [我] 连点跳开场旁白 → tap + [我] 教学里乱滑 → swipeleft + [我] 教学里连点 → tap + [我] 下滑,跳教学 → swipedown + [听] 进第 1 轮(教学被跳) + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → tap + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → tap + [我] 凭感觉乱答 → swipedown + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → tap + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → tap + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → swipedown + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → swipedown + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → tap + [我] 凭感觉乱答 → swipedown + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swipedown + [听] gameover + [我] 结算后上滑听规则 → swipeup + [我] 结算里连点 → tap + [我] 再点 → tap + [我] 长按试试 → longpress + [我] 下滑开菜单 → swipedown + [我] 菜单乱点 → tap + [我] 菜单乱滑 → swipeleft + [我] 菜单双击 → doubletap +== 局 B 结束 +落盘: /home/xsl/AutoVideo/SoundGame/web/harness/live/out/simon-20260914105055 4 件, 25 语音段, 0 判定行 diff --git a/research/simon-polish/round1/live-B-events.jsonl b/research/simon-polish/round1/live-B-events.jsonl new file mode 100644 index 00000000..93757e44 --- /dev/null +++ b/research/simon-polish/round1/live-B-events.jsonl @@ -0,0 +1,211 @@ +{"ev":"probe_ready","t":8.400000005960464,"ta":null} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":820.8000000119209,"ta":-0.073} +{"ev":"recstart","mime":"audio/webm;codecs=opus","t":893.8000000119209,"ta":0} +{"ev":"fetch","url":"audio/sfx/tone_up.ogg","status":200,"ok":true,"ms":15,"t":908.5,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_down.ogg","status":200,"ok":true,"ms":14,"t":908.6999999880791,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_left.ogg","status":200,"ok":true,"ms":14,"t":908.8000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_right.ogg","status":200,"ok":true,"ms":14,"t":908.8000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_tap.ogg","status":200,"ok":true,"ms":15,"t":908.9000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_doubletap.ogg","status":200,"ok":true,"ms":15,"t":908.9000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/gameover.ogg","status":200,"ok":true,"ms":14,"t":909,"ta":0.015} +{"ev":"fetch","url":"audio/voice/male/t0_welcome.ogg","status":200,"ok":true,"ms":15,"t":909.0999999940395,"ta":0.015} +{"ev":"fetch","url":"audio/voice/male/skip_hint.ogg","status":200,"ok":true,"ms":14,"t":909.0999999940395,"ta":0.015} +{"ev":"fetch","url":"audio/voice/male/t_try.ogg","status":200,"ok":true,"ms":14,"t":909.1999999880791,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/t0_goal.ogg","status":200,"ok":true,"ms":15,"t":909.1999999880791,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/round_01.ogg","status":200,"ok":true,"ms":14,"t":909.1999999880791,"ta":0.016} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":1300.800000011921,"ta":0.407} +{"ev":"vstart","url":"audio/voice/male/t0_welcome.ogg","t":1395.800000011921,"dur":5.04,"ta":0.502} +{"ev":"vibrate","pattern":"[20]","t":1664.699999988079,"ta":0.771} +{"ev":"vend","url":"audio/voice/male/t0_welcome.ogg","t":1664.9000000059605,"reason":"kill","ta":0.771} +{"ev":"vstart","url":"audio/voice/male/skip_hint.ogg","t":1665.0999999940395,"dur":2.32,"ta":0.771} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":1769.9000000059605,"ta":0.876} +{"ev":"vibrate","pattern":"[20]","t":2133.0999999940395,"ta":1.239} +{"ev":"vend","url":"audio/voice/male/skip_hint.ogg","t":2133.0999999940395,"reason":"kill","ta":1.239} +{"ev":"vstart","url":"audio/voice/male/t0_goal.ogg","t":2133.300000011921,"dur":5.84,"ta":1.24} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":2237.5999999940395,"ta":1.344} +{"ev":"vibrate","pattern":"[20]","t":2600.800000011921,"ta":1.707} +{"ev":"vend","url":"audio/voice/male/t0_goal.ogg","t":2600.800000011921,"reason":"kill","ta":1.707} +{"ev":"fetch","url":"audio/voice/male/t1_up.ogg","status":200,"ok":true,"ms":3,"t":2603.5999999940395,"ta":1.71} +{"ev":"vstart","url":"audio/voice/male/t1_up.ogg","t":2607.800000011921,"dur":3.12,"ta":1.714} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":2704.9000000059605,"ta":1.811} +{"ev":"vibrate","pattern":"[10]","t":3055.699999988079,"ta":2.162} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":3460.699999988079,"ta":2.567} +{"ev":"vibrate","pattern":"[20]","t":3823.5999999940395,"ta":2.93} +{"ev":"vend","url":"audio/voice/male/t1_up.ogg","t":3823.5999999940395,"reason":"kill","ta":2.93} +{"ev":"start","t":3823.9000000059605,"sid":1,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":2.93} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":3928.800000011921,"ta":3.035} +{"ev":"vibrate","pattern":"[10]","t":4289.0999999940395,"ta":3.395} +{"ev":"fetch","url":"audio/voice/male/t_skip.ogg","status":200,"ok":true,"ms":2,"t":4291.5,"ta":3.398} +{"ev":"vstart","url":"audio/voice/male/t_skip.ogg","t":4295.300000011921,"dur":2.48,"ta":3.402} +{"ev":"vend","url":"audio/voice/male/t_skip.ogg","t":7000.0999999940395,"reason":"kill","ta":6.106} +{"ev":"vstart","url":"audio/voice/male/round_01.ogg","t":7000.4000000059605,"dur":2.64,"ta":6.107} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":7038.699999988079,"ta":6.145} +{"ev":"vibrate","pattern":"[10]","t":7388.800000011921,"ta":6.495} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":7996,"ta":7.102} +{"ev":"vibrate","pattern":"[20]","t":8244.5,"ta":7.351} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":8852.699999988079,"ta":7.959} +{"ev":"vibrate","pattern":"[10]","t":9205.300000011921,"ta":8.312} +{"ev":"vibrate","pattern":"[8]","t":9500.59999999404,"ta":8.607} +{"ev":"start","t":9500.699999988079,"sid":2,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":8.607} +{"ev":"vend","url":"audio/voice/male/round_01.ogg","t":9716,"reason":"kill","ta":8.822} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":9813.09999999404,"ta":8.919} +{"ev":"vibrate","pattern":"[20]","t":10059.59999999404,"ta":9.166} +{"ev":"vibrate","pattern":"[8]","t":10200.699999988079,"ta":9.307} +{"ev":"start","t":10200.90000000596,"sid":3,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":9.307} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":10667.40000000596,"ta":9.774} +{"ev":"vibrate","pattern":"[20]","t":11030.90000000596,"ta":10.137} +{"ev":"vibrate","pattern":"[20]","t":11301.199999988079,"ta":10.408} +{"ev":"fetch","url":"audio/voice/male/gd_occ_up.ogg","status":200,"ok":true,"ms":3,"t":11305.199999988079,"ta":10.412} +{"ev":"vstart","url":"audio/voice/male/gd_occ_up.ogg","t":11310.199999988079,"dur":4,"ta":10.417} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":11338,"ta":10.444} +{"ev":"vibrate","pattern":"[10]","t":11688.800000011921,"ta":10.795} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":12296.300000011921,"ta":11.403} +{"ev":"vibrate","pattern":"[10]","t":12655.199999988079,"ta":11.762} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":13264.90000000596,"ta":12.371} +{"ev":"vibrate","pattern":"[20]","t":13628,"ta":12.734} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":13935,"ta":13.041} +{"ev":"vibrate","pattern":"[10]","t":14288.90000000596,"ta":13.395} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":14895.5,"ta":14.002} +{"ev":"vibrate","pattern":"[20]","t":15141.90000000596,"ta":14.248} +{"ev":"vend","url":"audio/voice/male/gd_occ_up.ogg","t":15404.300000011921,"reason":"kill","ta":14.511} +{"ev":"fetch","url":"audio/voice/male/your_turn.ogg","status":200,"ok":true,"ms":3,"t":15407,"ta":14.513} +{"ev":"vstart","url":"audio/voice/male/your_turn.ogg","t":15409.59999999404,"dur":1.36,"ta":14.516} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":15748.699999988079,"ta":14.855} +{"ev":"vibrate","pattern":"[10]","t":16105.5,"ta":15.212} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":16713.40000000596,"ta":15.82} +{"ev":"vend","url":"audio/voice/male/your_turn.ogg","t":17006.59999999404,"reason":"kill","ta":16.113} +{"ev":"vibrate","pattern":"[20]","t":17076.69999998808,"ta":16.183} +{"ev":"start","t":17076.80000001192,"sid":4,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":16.183} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":17386,"ta":16.492} +{"ev":"vibrate","pattern":"[10]","t":17738.59999999404,"ta":16.845} +{"ev":"vibrate","pattern":"[60,40,60]","t":17738.80000001192,"ta":16.845} +{"ev":"start","t":17739.09999999404,"sid":5,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":16.845} +{"ev":"fetch","url":"audio/voice/male/retry_use.ogg","status":200,"ok":true,"ms":2,"t":17741.09999999404,"ta":16.847} +{"ev":"vstart","url":"audio/voice/male/retry_use.ogg","t":17745.80000001192,"dur":3.52,"ta":16.852} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":18039,"ta":17.145} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":18346.80000001192,"ta":17.453} +{"ev":"vibrate","pattern":"[10]","t":18705.19999998808,"ta":17.812} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":19311.90000000596,"ta":18.418} +{"ev":"vibrate","pattern":"[10]","t":19671.5,"ta":18.778} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":20279.09999999404,"ta":19.385} +{"ev":"vibrate","pattern":"[20]","t":20525.19999998808,"ta":19.632} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":21133,"ta":20.239} +{"ev":"vibrate","pattern":"[10]","t":21488.5,"ta":20.595} +{"ev":"vend","url":"audio/voice/male/retry_use.ogg","t":21580.40000000596,"reason":"kill","ta":20.687} +{"ev":"fetch","url":"audio/voice/male/chances_out.ogg","status":200,"ok":true,"ms":3,"t":21583.19999998808,"ta":20.69} +{"ev":"vstart","url":"audio/voice/male/chances_out.ogg","t":21587.09999999404,"dur":2.24,"ta":20.693} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":22096.30000001192,"ta":21.203} +{"ev":"vibrate","pattern":"[20]","t":22459.40000000596,"ta":21.566} +{"ev":"vend","url":"audio/voice/male/chances_out.ogg","t":22459.5,"reason":"kill","ta":21.566} +{"ev":"vstart","url":"audio/voice/male/gd_occ_up.ogg","t":22459.59999999404,"dur":4,"ta":21.566} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":22766.90000000596,"ta":21.873} +{"ev":"vibrate","pattern":"[10]","t":23121.59999999404,"ta":22.228} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":23727.69999998808,"ta":22.834} +{"ev":"vibrate","pattern":"[10]","t":24087.80000001192,"ta":23.194} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":24696.80000001192,"ta":23.803} +{"ev":"vibrate","pattern":"[10]","t":25054.5,"ta":24.161} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":25663.59999999404,"ta":24.77} +{"ev":"vibrate","pattern":"[10]","t":26021.30000001192,"ta":25.128} +{"ev":"vend","url":"audio/voice/male/gd_occ_up.ogg","t":26572.30000001192,"reason":"kill","ta":25.679} +{"ev":"vibrate","pattern":"[8]","t":26572.30000001192,"ta":25.679} +{"ev":"start","t":26572.5,"sid":6,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":25.679} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":26629.90000000596,"ta":25.736} +{"ev":"vibrate","pattern":"[20]","t":26876.30000001192,"ta":25.983} +{"ev":"vibrate","pattern":"[8]","t":27272.5,"ta":26.379} +{"ev":"start","t":27272.59999999404,"sid":7,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":26.379} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":27484.09999999404,"ta":26.59} +{"ev":"vibrate","pattern":"[10]","t":27838.40000000596,"ta":26.945} +{"ev":"vibrate","pattern":"[20]","t":28372.80000001192,"ta":27.479} +{"ev":"vstart","url":"audio/voice/male/your_turn.ogg","t":28373,"dur":1.36,"ta":27.479} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":28445.69999998808,"ta":27.552} +{"ev":"vibrate","pattern":"[20]","t":28693.40000000596,"ta":27.8} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":29300.19999998808,"ta":28.407} +{"ev":"vibrate","pattern":"[10]","t":29654.5,"ta":28.761} +{"ev":"vend","url":"audio/voice/male/your_turn.ogg","t":29962.30000001192,"reason":"kill","ta":29.069} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":30261.90000000596,"ta":29.368} +{"ev":"vibrate","pattern":"[10]","t":30621.09999999404,"ta":29.727} +{"ev":"vibrate","pattern":"[15]","t":30621.19999998808,"ta":29.728} +{"ev":"fetch","url":"audio/voice/male/relisten.ogg","status":200,"ok":true,"ms":3,"t":30623.90000000596,"ta":29.73} +{"ev":"vstart","url":"audio/voice/male/relisten.ogg","t":30626.80000001192,"dur":1.2,"ta":29.733} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":31228.30000001192,"ta":30.335} +{"ev":"vibrate","pattern":"[10]","t":31587.59999999404,"ta":30.694} +{"ev":"vend","url":"audio/voice/male/relisten.ogg","t":31750.09999999404,"reason":"kill","ta":30.856} +{"ev":"fetch","url":"audio/voice/male/gd_chances_left1.ogg","status":200,"ok":true,"ms":2,"t":31752.5,"ta":30.859} +{"ev":"vstart","url":"audio/voice/male/gd_chances_left1.ogg","t":31755.80000001192,"dur":2.56,"ta":30.862} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":32196,"ta":31.302} +{"ev":"vibrate","pattern":"[10]","t":32554.30000001192,"ta":31.661} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":33162,"ta":32.268} +{"ev":"vibrate","pattern":"[20]","t":33408.30000001192,"ta":32.515} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":34016.09999999404,"ta":33.122} +{"ev":"vibrate","pattern":"[20]","t":34379.90000000596,"ta":33.486} +{"ev":"vend","url":"audio/voice/male/gd_chances_left1.ogg","t":34379.90000000596,"reason":"kill","ta":33.486} +{"ev":"vibrate","pattern":"[8]","t":34380.09999999404,"ta":33.486} +{"ev":"start","t":34380.19999998808,"sid":8,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":33.487} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":34687.80000001192,"ta":33.794} +{"ev":"vibrate","pattern":"[10]","t":35037.59999999404,"ta":34.144} +{"ev":"vibrate","pattern":"[8]","t":35080.19999998808,"ta":34.187} +{"ev":"start","t":35080.30000001192,"sid":9,"url":"audio/sfx/tone_up.ogg","layer":"sfx","dur":0.7198185941043084,"rate":1,"loop":false,"when":0,"ta":34.187} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":35645.30000001192,"ta":34.752} +{"ev":"vibrate","pattern":"[10]","t":36004.59999999404,"ta":35.111} +{"ev":"vibrate","pattern":"[20]","t":36180.59999999404,"ta":35.287} +{"ev":"vstart","url":"audio/voice/male/your_turn.ogg","t":36180.80000001192,"dur":1.36,"ta":35.287} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":36612.09999999404,"ta":35.718} +{"ev":"vibrate","pattern":"[10]","t":36971,"ta":36.077} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":37576.69999998808,"ta":36.683} +{"ev":"vend","url":"audio/voice/male/your_turn.ogg","t":37786.69999998808,"reason":"kill","ta":36.893} +{"ev":"vibrate","pattern":"[10]","t":37937.69999998808,"ta":37.044} +{"ev":"vibrate","pattern":"[60,40,60]","t":37938.09999999404,"ta":37.044} +{"ev":"start","t":37938.19999998808,"sid":10,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":37.045} +{"ev":"vibrate","pattern":"[80]","t":38238.30000001192,"ta":37.345} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":38545.09999999404,"ta":37.651} +{"ev":"start","t":38638.40000000596,"sid":11,"url":"audio/sfx/gameover.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":37.745} +{"ev":"vibrate","pattern":"[10]","t":38903.80000001192,"ta":38.01} +{"ev":"fetch","url":"audio/bgm/menu.ogg","status":200,"ok":true,"ms":3,"t":38907.09999999404,"ta":38.013} +{"ev":"fetch","url":"audio/voice/male/menu_open.ogg","status":200,"ok":true,"ms":4,"t":38907.80000001192,"ta":38.014} +{"ev":"vstart","url":"audio/voice/male/menu_open.ogg","t":38912.19999998808,"dur":0.7970975056689342,"ta":38.019} +{"ev":"start","t":39056.59999999404,"sid":12,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":38.163} +{"ev":"vend","url":"audio/voice/male/menu_open.ogg","t":39338.30000001192,"reason":"kill","ta":38.445} +{"ev":"fetch","url":"audio/voice/male/gameover.ogg","status":200,"ok":true,"ms":2,"t":39340.69999998808,"ta":38.447} +{"ev":"vstart","url":"audio/voice/male/gameover.ogg","t":39343.90000000596,"dur":1.12,"ta":38.45} +{"ev":"vend","url":"audio/voice/male/gameover.ogg","t":40480,"reason":"kill","ta":39.586} +{"ev":"fetch","url":"audio/voice/male/score_band1.ogg","status":200,"ok":true,"ms":3,"t":40483,"ta":39.589} +{"ev":"vstart","url":"audio/voice/male/score_band1.ogg","t":40487.30000001192,"dur":3.12,"ta":39.594} +{"ev":"vend","url":"audio/voice/male/score_band1.ogg","t":43939.5,"reason":"kill","ta":43.046} +{"ev":"fetch","url":"audio/voice/male/replay.ogg","status":200,"ok":true,"ms":3,"t":43942.19999998808,"ta":43.049} +{"ev":"vstart","url":"audio/voice/male/replay.ogg","t":43947.09999999404,"dur":4.24,"ta":43.053} +{"ev":"vend","url":"audio/voice/male/replay.ogg","t":48513.19999998808,"reason":"kill","ta":47.62} +{"ev":"fetch","url":"audio/voice/male/rules_prompt.ogg","status":200,"ok":true,"ms":2,"t":48515.69999998808,"ta":47.622} +{"ev":"vstart","url":"audio/voice/male/rules_prompt.ogg","t":48521.80000001192,"dur":5.12,"ta":47.628} +{"ev":"vend","url":"audio/voice/male/rules_prompt.ogg","t":53737.30000001192,"reason":"kill","ta":52.844} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":54157.69999998808,"ta":53.264} +{"ev":"vibrate","pattern":"[10]","t":54520.40000000596,"ta":53.627} +{"ev":"fetch","url":"audio/voice/male/rules.ogg","status":200,"ok":true,"ms":3,"t":54523.59999999404,"ta":53.63} +{"ev":"vstart","url":"audio/voice/male/rules.ogg","t":54537.30000001192,"dur":15.8,"ta":53.644} +{"ev":"vend","url":"audio/voice/male/rules.ogg","t":70617,"reason":"kill","ta":69.723} +{"ev":"vstart","url":"audio/voice/male/rules_prompt.ogg","t":70617.19999998808,"dur":5.12,"ta":69.724} +{"ev":"vend","url":"audio/voice/male/rules_prompt.ogg","t":75840.90000000596,"reason":"kill","ta":74.947} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":76117.5,"ta":75.224} +{"ev":"vibrate","pattern":"[20]","t":76482.40000000596,"ta":75.589} +{"ev":"fetch","url":"audio/voice/male/menu_home.ogg","status":200,"ok":true,"ms":3,"t":76485.69999998808,"ta":75.592} +{"ev":"vstart","url":"audio/voice/male/menu_home.ogg","t":76489.19999998808,"dur":0.9570975056689343,"ta":75.596} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":76586,"ta":75.692} +{"ev":"vibrate","pattern":"[20]","t":76949,"ta":76.055} +{"ev":"vend","url":"audio/voice/male/menu_home.ogg","t":76949.09999999404,"reason":"kill","ta":76.055} +{"ev":"fetch","url":"audio/voice/male/menu_back.ogg","status":200,"ok":true,"ms":2,"t":76951.40000000596,"ta":76.058} +{"ev":"vstart","url":"audio/voice/male/menu_back.ogg","t":76954.30000001192,"dur":1.12,"ta":76.061} +{"ev":"gesture","type":"longpress","x":195,"y":422,"t":77052.40000000596,"ta":76.159} +{"ev":"boost","on":true,"t":77504.09999999404,"ta":76.61} +{"ev":"boost","on":false,"t":77655.19999998808,"ta":76.762} +{"ev":"vend","url":"audio/voice/male/menu_back.ogg","t":78000.30000001192,"reason":"kill","ta":77.107} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":78059.80000001192,"ta":77.166} +{"ev":"vibrate","pattern":"[10]","t":78419.59999999404,"ta":77.526} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":86827.5,"ta":85.934} +{"ev":"vibrate","pattern":"[20]","t":87191.59999999404,"ta":86.298} +{"ev":"start","t":87191.69999998808,"sid":13,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":86.298} +{"ev":"vstart","url":"audio/voice/male/round_01.ogg","t":87191.80000001192,"dur":2.64,"ta":86.298} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":87297,"ta":86.403} +{"ev":"stop","t":87551.80000001192,"sid":12,"when":0,"ta":86.658} +{"ev":"vibrate","pattern":"[10]","t":87652.30000001192,"ta":86.759} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":88056.90000000596,"ta":87.163} +{"ev":"vibrate","pattern":"[20]","t":88303.59999999404,"ta":87.41} +{"ev":"recstop","t":89308.80000001192,"ta":88.415} diff --git a/research/simon-polish/round1/live-B-transcript.md b/research/simon-polish/round1/live-B-transcript.md new file mode 100644 index 00000000..c73117d5 --- /dev/null +++ b/research/simon-polish/round1/live-B-transcript.md @@ -0,0 +1,179 @@ +# simon 实时会话 transcript + +- `[ -0.07s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.41s]` **GESTURE** tap @(195,422) +- `[ 0.50s]` VOICE ▶ t0_welcome (dur 5.04s) +- `[ 0.77s]` VIBRATE [20] +- `[ 0.77s]` VOICE ■ t0_welcome (kill) +- `[ 0.77s]` VOICE ▶ skip_hint (dur 2.32s) +- `[ 0.88s]` **GESTURE** tap @(195,422) +- `[ 1.24s]` VIBRATE [20] +- `[ 1.24s]` VOICE ■ skip_hint (kill) +- `[ 1.24s]` VOICE ▶ t0_goal (dur 5.84s) +- `[ 1.34s]` **GESTURE** tap @(195,422) +- `[ 1.71s]` VIBRATE [20] +- `[ 1.71s]` VOICE ■ t0_goal (kill) +- `[ 1.71s]` VOICE ▶ t1_up (dur 3.12s) +- `[ 1.81s]` **GESTURE** swipeleft @(195,422) +- `[ 2.16s]` VIBRATE [10] +- `[ 2.57s]` **GESTURE** tap @(195,422) +- `[ 2.93s]` VIBRATE [20] +- `[ 2.93s]` VOICE ■ t1_up (kill) +- `[ 2.93s]` SFX ♪ tone_up +- `[ 3.04s]` **GESTURE** swipedown @(195,422) +- `[ 3.40s]` VIBRATE [10] +- `[ 3.40s]` VOICE ▶ t_skip (dur 2.48s) +- `[ 6.11s]` VOICE ■ t_skip (kill) +- `[ 6.11s]` VOICE ▶ round_01 (dur 2.64s) +- `[ 6.14s]` **GESTURE** swiperight @(195,422) +- `[ 6.50s]` VIBRATE [10] +- `[ 7.10s]` **GESTURE** doubletap @(195,422) +- `[ 7.35s]` VIBRATE [20] +- `[ 7.96s]` **GESTURE** swipeleft @(195,422) +- `[ 8.31s]` VIBRATE [10] +- `[ 8.61s]` VIBRATE [8] +- `[ 8.61s]` SFX ♪ tone_tap +- `[ 8.82s]` VOICE ■ round_01 (kill) +- `[ 8.92s]` **GESTURE** doubletap @(195,422) +- `[ 9.17s]` VIBRATE [20] +- `[ 9.31s]` VIBRATE [8] +- `[ 9.31s]` SFX ♪ tone_up +- `[ 9.77s]` **GESTURE** tap @(195,422) +- `[ 10.14s]` VIBRATE [20] +- `[ 10.41s]` VIBRATE [20] +- `[ 10.42s]` VOICE ▶ gd_occ_up (dur 4s) +- `[ 10.44s]` **GESTURE** swipeleft @(195,422) +- `[ 10.79s]` VIBRATE [10] +- `[ 11.40s]` **GESTURE** swipeup @(195,422) +- `[ 11.76s]` VIBRATE [10] +- `[ 12.37s]` **GESTURE** tap @(195,422) +- `[ 12.73s]` VIBRATE [20] +- `[ 13.04s]` **GESTURE** swipedown @(195,422) +- `[ 13.39s]` VIBRATE [10] +- `[ 14.00s]` **GESTURE** doubletap @(195,422) +- `[ 14.25s]` VIBRATE [20] +- `[ 14.51s]` VOICE ■ gd_occ_up (kill) +- `[ 14.52s]` VOICE ▶ your_turn (dur 1.36s) +- `[ 14.86s]` **GESTURE** swipeleft @(195,422) +- `[ 15.21s]` VIBRATE [10] +- `[ 15.82s]` **GESTURE** tap @(195,422) +- `[ 16.11s]` VOICE ■ your_turn (kill) +- `[ 16.18s]` VIBRATE [20] +- `[ 16.18s]` SFX ♪ tone_tap +- `[ 16.49s]` **GESTURE** swipeleft @(195,422) +- `[ 16.84s]` VIBRATE [10] +- `[ 16.84s]` VIBRATE [60,40,60] +- `[ 16.84s]` SFX ♪ tone_left +- `[ 16.85s]` VOICE ▶ retry_use (dur 3.52s) +- `[ 17.14s]` VIBRATE [30,50,30,50,30] +- `[ 17.45s]` **GESTURE** swiperight @(195,422) +- `[ 17.81s]` VIBRATE [10] +- `[ 18.42s]` **GESTURE** swipeleft @(195,422) +- `[ 18.78s]` VIBRATE [10] +- `[ 19.39s]` **GESTURE** doubletap @(195,422) +- `[ 19.63s]` VIBRATE [20] +- `[ 20.24s]` **GESTURE** swipeup @(195,422) +- `[ 20.59s]` VIBRATE [10] +- `[ 20.69s]` VOICE ■ retry_use (kill) +- `[ 20.69s]` VOICE ▶ chances_out (dur 2.24s) +- `[ 21.20s]` **GESTURE** tap @(195,422) +- `[ 21.57s]` VIBRATE [20] +- `[ 21.57s]` VOICE ■ chances_out (kill) +- `[ 21.57s]` VOICE ▶ gd_occ_up (dur 4s) +- `[ 21.87s]` **GESTURE** swiperight @(195,422) +- `[ 22.23s]` VIBRATE [10] +- `[ 22.83s]` **GESTURE** swipedown @(195,422) +- `[ 23.19s]` VIBRATE [10] +- `[ 23.80s]` **GESTURE** swipeleft @(195,422) +- `[ 24.16s]` VIBRATE [10] +- `[ 24.77s]` **GESTURE** swipeup @(195,422) +- `[ 25.13s]` VIBRATE [10] +- `[ 25.68s]` VOICE ■ gd_occ_up (kill) +- `[ 25.68s]` VIBRATE [8] +- `[ 25.68s]` SFX ♪ tone_tap +- `[ 25.74s]` **GESTURE** doubletap @(195,422) +- `[ 25.98s]` VIBRATE [20] +- `[ 26.38s]` VIBRATE [8] +- `[ 26.38s]` SFX ♪ tone_up +- `[ 26.59s]` **GESTURE** swiperight @(195,422) +- `[ 26.95s]` VIBRATE [10] +- `[ 27.48s]` VIBRATE [20] +- `[ 27.48s]` VOICE ▶ your_turn (dur 1.36s) +- `[ 27.55s]` **GESTURE** doubletap @(195,422) +- `[ 27.80s]` VIBRATE [20] +- `[ 28.41s]` **GESTURE** swipeup @(195,422) +- `[ 28.76s]` VIBRATE [10] +- `[ 29.07s]` VOICE ■ your_turn (kill) +- `[ 29.37s]` **GESTURE** swipeup @(195,422) +- `[ 29.73s]` VIBRATE [10] +- `[ 29.73s]` VIBRATE [15] +- `[ 29.73s]` VOICE ▶ relisten (dur 1.2s) +- `[ 30.34s]` **GESTURE** swiperight @(195,422) +- `[ 30.69s]` VIBRATE [10] +- `[ 30.86s]` VOICE ■ relisten (kill) +- `[ 30.86s]` VOICE ▶ gd_chances_left1 (dur 2.56s) +- `[ 31.30s]` **GESTURE** swipedown @(195,422) +- `[ 31.66s]` VIBRATE [10] +- `[ 32.27s]` **GESTURE** doubletap @(195,422) +- `[ 32.52s]` VIBRATE [20] +- `[ 33.12s]` **GESTURE** tap @(195,422) +- `[ 33.49s]` VIBRATE [20] +- `[ 33.49s]` VOICE ■ gd_chances_left1 (kill) +- `[ 33.49s]` VIBRATE [8] +- `[ 33.49s]` SFX ♪ tone_tap +- `[ 33.79s]` **GESTURE** swipedown @(195,422) +- `[ 34.14s]` VIBRATE [10] +- `[ 34.19s]` VIBRATE [8] +- `[ 34.19s]` SFX ♪ tone_up +- `[ 34.75s]` **GESTURE** swiperight @(195,422) +- `[ 35.11s]` VIBRATE [10] +- `[ 35.29s]` VIBRATE [20] +- `[ 35.29s]` VOICE ▶ your_turn (dur 1.36s) +- `[ 35.72s]` **GESTURE** swipeleft @(195,422) +- `[ 36.08s]` VIBRATE [10] +- `[ 36.68s]` **GESTURE** swipeleft @(195,422) +- `[ 36.89s]` VOICE ■ your_turn (kill) +- `[ 37.04s]` VIBRATE [10] +- `[ 37.04s]` VIBRATE [60,40,60] +- `[ 37.05s]` SFX ♪ tone_left +- `[ 37.34s]` VIBRATE [80] +- `[ 37.65s]` **GESTURE** swipedown @(195,422) +- `[ 37.74s]` SFX ♪ gameover +- `[ 38.01s]` VIBRATE [10] +- `[ 38.02s]` VOICE ▶ menu_open (dur 0.7970975056689342s) +- `[ 38.16s]` BGM ♪ menu (loop) +- `[ 38.45s]` VOICE ■ menu_open (kill) +- `[ 38.45s]` VOICE ▶ gameover (dur 1.12s) +- `[ 39.59s]` VOICE ■ gameover (kill) +- `[ 39.59s]` VOICE ▶ score_band1 (dur 3.12s) +- `[ 43.05s]` VOICE ■ score_band1 (kill) +- `[ 43.05s]` VOICE ▶ replay (dur 4.24s) +- `[ 47.62s]` VOICE ■ replay (kill) +- `[ 47.63s]` VOICE ▶ rules_prompt (dur 5.12s) +- `[ 52.84s]` VOICE ■ rules_prompt (kill) +- `[ 53.26s]` **GESTURE** swipeup @(195,422) +- `[ 53.63s]` VIBRATE [10] +- `[ 53.64s]` VOICE ▶ rules (dur 15.8s) +- `[ 69.72s]` VOICE ■ rules (kill) +- `[ 69.72s]` VOICE ▶ rules_prompt (dur 5.12s) +- `[ 74.95s]` VOICE ■ rules_prompt (kill) +- `[ 75.22s]` **GESTURE** tap @(195,422) +- `[ 75.59s]` VIBRATE [20] +- `[ 75.60s]` VOICE ▶ menu_home (dur 0.9570975056689343s) +- `[ 75.69s]` **GESTURE** tap @(195,422) +- `[ 76.06s]` VIBRATE [20] +- `[ 76.06s]` VOICE ■ menu_home (kill) +- `[ 76.06s]` VOICE ▶ menu_back (dur 1.12s) +- `[ 76.16s]` **GESTURE** longpress @(195,422) +- `[ 77.11s]` VOICE ■ menu_back (kill) +- `[ 77.17s]` **GESTURE** swipedown @(195,422) +- `[ 77.53s]` VIBRATE [10] +- `[ 85.93s]` **GESTURE** tap @(195,422) +- `[ 86.30s]` VIBRATE [20] +- `[ 86.30s]` SFX ♪ tone_tap +- `[ 86.30s]` VOICE ▶ round_01 (dur 2.64s) +- `[ 86.40s]` **GESTURE** swipeleft @(195,422) +- `[ 86.76s]` VIBRATE [10] +- `[ 87.16s]` **GESTURE** doubletap @(195,422) +- `[ 87.41s]` VIBRATE [20] diff --git a/research/simon-polish/round1/p1-blind.md b/research/simon-polish/round1/p1-blind.md new file mode 100644 index 00000000..071f61ef --- /dev/null +++ b/research/simon-polish/round1/p1-blind.md @@ -0,0 +1,50 @@ +# P1 视障资深玩家评审:《音序回响》(simon polish 取证轮 R1) + +> 评审依据:research/simon-polish/round1/transcript.md(剧本转写)+ live-A-transcript.md +> (认真新手局,female/normal/guide full,第 13 轮走完结算)+ live-B-transcript.md +> (急性子乱按局,male/1.7)。我按"如果我在真机听到这些"代入;行号引用见各条。 + +### 音序回响 +- 状态感知:2/5 —— 两段我完全失聪。**①输入开放窗口**(A 行 108-115):confirm 震 + 之后 gd_occ_dt 还在播,我这时作答(75.75 swiperight)只有 10ms 识别震、没有回声, + 音被吞了——我分不清是"没识别""没轮到我"还是"卡死",只能靠"再来一遍听有没有回声" + 试错。对全听觉玩家,回声缺失就是唯一线索,而它 ambiguous。**②账目**:免费重听和 + 机会只在消耗瞬间报(A 行 205-208、306-309、732-736),中途想查余额没有任何 + status key——六手势全是答题输入,连查一下"还剩几次"的锚都没有(A 局第 8-13 轮 + 我全靠驱动日志记账,真机玩家记不住的)。**③轮次**:跳过快报后(B 行 28-37)我 + 连第几轮、这轮几个音都不知道。 +- 下一步明确性:3/5 —— 教学教一个练一个干净(A 行 6-50),看门狗 5 秒提醒及时 + (转写行 153-156);但 roundend 播报期我下滑想开菜单**零反馈**(A 行 824-830), + 按了像没按,我只能再滑。 +- 愿意继续玩:是 —— 记忆挑战本身是我要的纯听觉玩法,但我要求"查状态"和"作答被 + 确认"这两件基本的事有听觉落点。 +- P0 问题:**结算承诺在菜单内是假的**(B 行 140-174):我在死亡瞬间(37.4s)的 + 下滑被吃进菜单,结算链 38.45-52.84s 在菜单里播完了——「单击屏幕,再来一局」 + (B 行 151-154)承诺期间我的单击真实语义是切菜单项(B 行 161-168 menu_home/ + menu_back);等我 77.17s 关掉菜单回到结算页,链已播完,**8.4 秒死寂** + (B 行 170-174)。死→听懂成绩→再来一局的循环对全听觉玩家是命脉,这条链断了 + 就是流失。 +- 建议(按对"我愿意玩下去"的影响排序): + 1. P0 结算链阶段看守:结算链只在结算屏播;在菜单则挂起、回结算屏再交付。 + 2. input 开放给一个非向导层的听觉标记(语音链结束后),作答回声带"被收进答案" + 的确认含义要可分辨(现在吞手势与未识别不可区分)。 + 3. 给一个 status key(长按查询):轮次长度分档 + 已答进度分档 + 重听两账余额 + ——全部走整句预生成,不要运行时拼数字。 + +#### 听觉惯例符合度(逐条核对我的特别检查项) +- 语音可打断/重听:过。单击跳句干净(B 行 4-18 连点即时截断);规则句可重听 + (B 行 155-160 菜单上滑 rules)。 +- 等待有无声:半过。input 看门狗 5s 有 nudge/语音(转写行 66-67、154-155);但 + 结算屏关菜单后 8.4s 死寂(B 行 170-174)是"被遗忘的等待"。 +- 失败可归因:半过。答错有 retry_use「错了。用一次机会,再听一遍。」(A 行 694) + 归因清楚;但**被吞手势无归因**(A 行 108-115),我以为自己没做对,其实是系统 + 没开输入。 +- 菜单列表导航规整:半过。三项循环+逐项播报规整(B 行 161-168);但结算链在 + 菜单内播导致"我在哪一层"混乱(B 行 144-154)。 +- 提示永不逐字重复:不过。round 1 每次重播都重念 your_turn(B 行 67、96-98, + 一局三遍)。 +- 账目真实:半过。消耗/获得时播报与真实账目一致(A 行 732-736 复核通过);但 + 余额不可查询,中途是糊涂账。 +- 语速上限/长按快进:过(1.7 档男声整句完整,B 行 53-74 rules 15.8s 长句不断气)。 +- status key:**缺席**(本作我最需要的锚没有)。 +- 双击确认(菜单约定):过。菜单内双击确认实测(B 行末尾菜单双击)。 diff --git a/research/simon-polish/round1/p2-student.md b/research/simon-polish/round1/p2-student.md new file mode 100644 index 00000000..6ec9fe6b --- /dev/null +++ b/research/simon-polish/round1/p2-student.md @@ -0,0 +1,37 @@ +# P2 时间充裕的大学生评审:《音序回响》(simon polish 取证轮 R1) + +> 评审依据:transcript.md(剧本转写)+ live-A-transcript.md(认真新手局)+ +> live-B-transcript.md(急性子乱按局)。我按宿舍躺床代入:节奏感、上头曲线、 +> "再玩一局"冲动是硬指标。 + +### 音序回响 +- 状态感知:2/5 —— 我这种连点跳旁白的人(B 行 4-18、28-37 就是我)**跳完直接 + 失明**:第几轮、这轮几个音、播没播完、能不能答,全靠猜。最离谱的一局(B 局)我 + 在第 1 轮卡了 37 秒(B 行 28-140):听了一堆 retry_use/chances_out/占用预告循环 + 播,但我根本不知道自己在第 1 轮、序列只有 2 个音——但凡有一句"这轮 2 个音"我 + 早出去了。认真局(A)里第 12-13 轮 13-14 个音复现到一半断片,"我答到第几个了" + 无答案,只能推倒重来(A 行 659-690 一带),挫败感直接拉满。 +- 下一步明确性:3/5 —— 听播报时不连点的话节奏是顺的(A 行 659-662);可一旦 + 想抢跑,announce/roundend 期间手势全被静默吞(A 行 824-830、B 行 29-35), + 抢跑没有任何信号告诉我"还没开"。 +- 愿意继续玩:**否(当前版本)** —— 认真打的那局其实挺上头(13 轮的长度爬升 + 曲线对,A 行 82-108 的逐轮加音有成长感),但"死的一瞬间手还在屏幕上"这个 + 场景把我卖了:我死在 37.4s,习惯性下滑在 37.65s 进了菜单,结算语音在菜单里 + 播完(B 行 140-154),「单击再来一局」期间我单击其实在切菜单项(B 行 161-168), + 关了菜单面对 8.4 秒沉默(B 行 170-174)——设计感?零。这一刻我觉得游戏不认我 + 这个玩家。 +- P0 问题:结算承诺与阶段脱节(B 行 140-174,同 P1 评审):死亡瞬间的误操作 + 把我送进一个"承诺说谎"的菜单,回结算页后死寂。这是"单局结束想不想开下一局" + 的直接杀手。 +- 建议(按对"我愿意玩下去"的影响排序): + 1. P0 修结算链阶段看守(死亡瞬间误触不该被罚 8 秒死寂)。 + 2. 给个 status key:跳播报是我的合法玩法,但跳完至少让我长按查一下"第几轮 + 几个音、答到哪儿、还能重听几次"——分档整句即可,别念经。 + 3. 第 1 轮别每次重播都念"轮到你了"(B 行 67、96-98),本来复活就烦,还复读。 + +#### 我的特别检查项核对 +- 开头多少秒能动手:过。教学教一个练一个,11 秒左右首次出手(A 行 13-15)。 +- 保送首胜:半过。第 1 轮只有 2 音 + 1 次免费复活,算保送;但连点跳教学的人 + 不知道有复活(B 局 16.85s 第一次 retry_use 才听说"机会")。 +- 结算是否想让人再来一局:不过(见 P0,死寂 8.4 秒把冲动磨没了)。 +- 单局长度/节奏:过。700→420ms 爬升合理(A 局 12 轮仍可控)。 diff --git a/research/simon-polish/round1/p3-office.md b/research/simon-polish/round1/p3-office.md new file mode 100644 index 00000000..e62af853 --- /dev/null +++ b/research/simon-polish/round1/p3-office.md @@ -0,0 +1,35 @@ +# P3 时间紧张的白领评审:《音序回响》(simon polish 取证轮 R1) + +> 评审依据:transcript.md + live-A-transcript.md + live-B-transcript.md。我按地铁 +> 单手持机代入:嘈杂、随时被打断、被打断后要一句话接上。 + +### 音序回响 +- 状态感知:2/5 —— 这游戏被中断一次就完蛋:地铁进站我停手 20 秒,回来后**没人 + 告诉我刚才进行到哪**——第几轮不知道(播报早播完了)、序列忘了、答到第几个不 + 知道(A 局第 12 轮一带,13 个音复现中断即全损,A 行 659-690)、还剩几次重听也 + 不知道(账目在消耗瞬间报,A 行 205-208)。 Noise 环境下我连"现在是不是轮到我" + 都判断不了:confirm 震那么轻,占用预告句(gd_occ_*)和 your_turn 还在能答之前 + 挡路(A 行 108-115),我提前按的音被无声吞掉。 +- 下一步明确性:3/5 —— 安静听完播报+序列再答是清晰的;但"听不清怎么办"没有 + 出口:重听键(上滑)在含上滑音的轮次被占用(gd_occ_up 只说"是作答",不告诉我 + 这轮**怎么**重听,A 行 109),我被占用轮卡住时连补救手势都没有。 +- 愿意继续玩:否 —— 25 分钟地铁里它给不了我"3 分钟一次完整乐趣":一局要么 + 短到刚热身(B 局 37 秒死在第 1 轮还全程迷茫),要么长到装不下我的通勤碎片 + (A 局 13 轮 5 分钟+),而且中断不可恢复。 +- P0 问题:结算脱节(B 行 140-174)在通勤场景是双杀:死的时候手机单手握不稳, + 误触下滑进菜单 → 结算在菜单里播完 → 关菜单死寂 8.4 秒(B 行 170-174)——我 + 到站了,游戏还没告诉我成绩。 +- 建议(按对"我愿意玩下去"的影响排序): + 1. P0 结算链阶段看守 + 回结算屏补播。 + 2. status key 是我这种碎片玩家的刚需:回来长按一下,"这轮 N 个音、答到一半、 + 免费重听还有两次",一句话接上。 + 3. 被吞手势给一点点触觉反馈(error 震即可),别让我在全息无声里连按。 + +#### 我的特别检查项核对 +- 关键信息听不清怎么办:半过。免费重听机制在(A 行 205-208),但占用轮重听键 + 被占后没有替代;余额不可查。 +- 中断恢复:**不过**(见状态感知,无任何"从哪接上"的锚)。 +- 单局长度:半过。轮次自定节奏好;但结算混乱拉长了"死到下一局"的间隔。 +- 有无沉默尴尬期:不过。关菜单后 8.4 秒死寂(B 行 170-174);挂机时 guide=off + 永久静默(设计自选,可接受)。 +- 单手盲操:过。六手势单手覆盖;菜单单击循环可盲(B 行 161-168)。 diff --git a/research/simon-polish/round1/p4-worker.md b/research/simon-polish/round1/p4-worker.md new file mode 100644 index 00000000..3e7727ca --- /dev/null +++ b/research/simon-polish/round1/p4-worker.md @@ -0,0 +1,35 @@ +# P4 疲惫的工人评审:《音序回响》(simon polish 取证轮 R1) + +> 评审依据:transcript.md + live-A-transcript.md + live-B-transcript.md。我按下班 +> 后外放小音量、反应慢代入:规则要一遍懂,错了别骂我,反馈要即时温暖。 + +### 音序回响 +- 状态感知:2/5 —— 我不懂那些花哨的,就说最实在的:**我按了没声音的时候,我 + 不知道是我手笨还是机器没理我**。B 局那 37 秒里我按了十几下(B 行 28-46),大多 + 数时候就手指头麻一下([10]/[20] 轻震),没声。后来好不容易听到"错了。用一次 + 机会,再听一遍。"(B 行 69)我才知道刚才算数了。还有"我还能重听几次"——开局 + 讲过一次"免费机会有两次"(A 行 58 教学收尾),可我打到后面早忘了,也没人再 + 告诉我(A 行 205-208 只在用掉那一刻说)。 +- 下一步明确性:3/5 —— 教学一句一句带着做,我跟得上(A 行 6-50,做错还有 + "不是这个,向左滑试试",A 行 27-29,不骂我);但播报的时候我不小心滑了一下, + 什么都没发生(B 行 29-35),我以为游戏坏了。 +- 愿意继续玩:是 —— 规则我一遍听懂了(记住声音顺序照做,跟工地上记号子一样), + 答对每轮都有夸奖(A 行 78"答对了!"),挺暖心。但死的时候那个菜单把我弄糊涂了 + (见 P0),差点以为游戏没了。 +- P0 问题:死的那一下我手还在屏幕上,习惯性一滑就进了什么"菜单"(B 行 140-144), + 然后里面有人说话说什么"单击再来一局",我单击了,它却念"回大厅""返回游戏" + (B 行 161-168)——**它让我单击,我单击了,可它不是那个意思**。后来我又滑一下 + 退出来,啥声音也没有,呆了八九秒(B 行 170-174),以为死机了,再点一下才开新局。 +- 建议(按对"我愿意玩下去"的影响排序): + 1. P0 它让我单击我就该能重开——要么菜单里别播"单击再来一局",要么回结算页 + 重新告诉我该怎么办。 + 2. 我要个"问一句"的办法:按住屏幕它告诉我"这轮还有几个音要答、还能重听几次", + 话别长,一两句。 + 3. 我按了没反应的时候,震我一下告诉我"现在不用按"(B 行 29-35、A 行 824-830)。 + +#### 我的特别检查项核对 +- 教学语速与句长:过。教一个练一个,每句都短(A 行 6-50)。 +- 容错:半过。免费重听+机会制对新手友好;但余额忘光后就不知深浅了(S4)。 +- 反馈即时温暖:半过。答对夸我(A 行 78/94);但"被吞"零反馈让我自我怀疑。 +- 有无 pressure:过。没有倒计时,看门狗 5 秒才轻轻提醒一次(转写行 153-156), + 不催我。 diff --git a/research/simon-polish/round1/state-dimensions.md b/research/simon-polish/round1/state-dimensions.md new file mode 100644 index 00000000..a7889a02 --- /dev/null +++ b/research/simon-polish/round1/state-dimensions.md @@ -0,0 +1,101 @@ +# 音序回响 round1 取证 · 状态维度候选清单(通读 game.js + 02 号文档) + +> 阶段一第 1 步产物:把"玩家可能不知道自己在哪"拆成状态维度,逐维度对照 game.js +> 现有信号(语音/earcon/震动/静默)找盲区。最终 S 编号清单见 findings.md(带 live 证据)。 + +## 维度 1:当前轮次 / 本序列长度 +- 现有信号:announce 阶段播 `round_NN`/`round_more` 整句(game.js `_nextRound`)。 +- 盲区: + - 轮次播报**可单击跳过**(`_tapSkipsVoice` announce=true,12 号文档)——急性子玩家 + 从此失去轮次信息;序列长度 = round+1,**长度信息也随之丢失**(playback 期间不知 + 该听几个音)。 + - 播报被跳/缺失兜底路径(2.5s 看门狗)同样没有轮次信息落点。 + - 第 20 轮后只有"新的一轮"兜底,长度仍在涨,玩家对"还要记多少"完全无感。 +- 风险级候选:P1(不致命但全程迷失)。 + +## 维度 2:播放阶段 vs 答题阶段边界 +- 现有信号:序列播完 400ms 后 `CONFIRM` 震(game.js:348)+ 向导层 `turn` earcon + (guide=full/standard 才有);第 1 轮另有 `your_turn` 语音。 +- 盲区: + - **guide=off 时 turn earcon 静默**(Guide no-op),非第 1 轮只剩一次 confirm 震; + - **iOS 无震动**(00 §2.5 静默降级)→ 第 2 轮起边界**零信号**; + - 占用预告句(gd_occ_*)插在 confirm 之后、input 之前:语音播完才 `_toInput`, + 玩家听到"这一轮,向上滑是作答"时**还不能答**(phase 仍是 playback,手势被吞), + 句尾与可输入时刻之间无任何标记。 +- 风险级候选:P1(边界误答被吞 → 维度 6)。 + +## 维度 3:自己刚输入的音符是否被收进答案(逐音进度) +- 现有信号:input 阶段每手势即时回声放对应音色(game.js:421)+ 引擎内置识别震 + (swipe/confirm)。 +- 盲区: + - 回声 = "系统收到了",但**"对了几个 / 还剩几个"无任何信号**(无 X-of-N 进度 + earcon/震动分档)。长序列(第 10 轮起 ≥11 音)复现中途断片时,玩家不知道自己 + 答到第几个音,只能从头再来或赌。 + - 回声音色与答错音色的关系:答错的瞬间即触发 retry/gameover(有反馈),但 + "当前已确认正确的进度"在复活重听后重置,玩家必须记住自己之前答到哪—— + 实际上重听要求**整轮重输**(inputIdx=0),"我上次答对了几个"成为无效信息但 + 玩家并不知道规则是"清零重输"还是"接着答"(教学未讲)。 +- 风险级候选:P1。 + +## 维度 4:答对 / 答错即时反馈 +- 现有信号:整轮对 → success 震 + 表扬句(每轮);错 → error+warning 震 + + retry_use(有机会)或 gameover 链(无机会)。 +- 盲区: + - 对错反馈**以整轮为单位**,中途无逐音对错确认(设计使然,simon 经典规则); + 可接受,但与维度 3 叠加放大迷失。 + - iOS 无震:答错后 retry_use 语音前有最长 300ms 静默+无震,"刚才那下算数吗" + 要靠语音第一句"错了。"兜底——可过。 +- 风险级候选:P2。 + +## 维度 5:复活机会 / 免费重听余额(两本账) +- 现有信号:消耗时如实报(gd_chances_left1/left0/chances_out/chance_plus/retry_use)。 +- 盲区: + - **余额不可主动查询**:input 阶段六手势全是答题输入,**没有 status key** + (space-polish P1 同款诉求)。账目只在"用掉那一刻"播报;记忆游戏脑负荷高, + 隔几轮后"我还有几次免费/几条命"必然遗忘,而遗忘的代价是猝死或不敢重听。 + - 答错自动消耗路径(retry_use)与主动重听路径分账,两账合计余额(免费+真机会) + 从未作为整体报过。 +- 风险级候选:P1。 + +## 维度 6:手势被吞(非输入阶段做手势) +- 现有信号:无。playback/announce/roundend 阶段手势**静默忽略**(game.js:154 + default 分支;02 §4.1 裁定"播放期误触静默忽略,不给 ERROR 震")。 +- 盲区:00 宪法 §5.4"做了手势 3 秒内必须有反馈"在此被设计豁免;急性子玩家在 + 播报/重听语音链期间作答**零反馈**(连吞数下都无声无震),既不知"被吞"也不知 + "现在能答了没有"。round1 live 已有 P1 前科(答题阶段长按 9 秒零反馈→已修为 + error 震兜底),但**播放期/播报期**仍是零反馈区。 +- 风险级候选:P1(压力线必现)。 + +## 维度 7:连击 / 最佳纪录 +- 现有信号:破纪录时 `gd_record`(局中,每局限 1 次)+ 结算 `new_record`;best + 存 localStorage/服务器,局内不报具体数值。 +- 盲区:第 2 局起玩家不知道自己 best 是几轮;"离纪录还差几轮"无信号。 + (simon 无连击概念,维度弱。) +- 风险级候选:P2。 + +## 维度 8:菜单 / 教学 / 结算阶段边界 +- 现有信号:菜单逐项播报(menu_open/restart/home/back);教学逐音教-练; + 结算五句链(gameover/score_band/new_record/replay/rules_prompt)。 +- 盲区: + - 教学→对局过渡:t7 链播完**静默**直进 round_01,中间无标记("教学结束"信号 + 靠 round_01 本身承担,可过)。 + - 菜单"返回游戏"回结算页后,rules 语音链可能仍在播(_speak 无守卫),此时 + 单击=重开(言行一致 P0 已修);但**菜单内上滑听规则**后双击确认项,选中项 + 与规则语音同时播,语义叠话(P2 瑕疵)。 +- 风险级候选:P2。 + +## 维度 9:input 阶段静默(不知"系统在等") +- 现有信号:5s 看门狗 nudge + gd_relisten(占用轮只 nudge);25s turn+confirm。 +- 盲区:guide=off 无看门狗(不挂定时器),挂机=永久静默(设计承认:"挂机永久 + 静默")。该维度在 guide 档内已覆盖,off 档是玩家自选,不另列。 +- 风险级候选:不修(既定裁定)。 + +## 交叉观察(转写 transcript.md 预读) +- 行 64-75 / 90-95 / 105-113:复现全程只有回声 tone + 结尾 success 震;"已对上 + k/N"只存在于 harness describe()(行 64「已对上 0/2」是**剧本旁白,玩家听不到**)—— + 维度 3 的直接证据形态。 +- 行 65-71:R1 静默 5s 只有 nudge earcon(占用轮无建议语音);非占用轮行 153-156 + 5s 即有 gd_relisten 语音——看门狗覆盖尚可。 +- 行 136 / 162 / 190-191 / 251:机会/免费重听账目只在消耗/获得时播报(维度 5)。 +- transcript 未覆盖 gameover/菜单/复活耗尽(剧本收工于第 7 轮边界)——由 live + 局 A(打到高轮次+结算+菜单)与局 B(乱按压力线)补证。 diff --git a/research/simon-polish/round1/transcript.md b/research/simon-polish/round1/transcript.md new file mode 100644 index 00000000..d0f62f76 --- /dev/null +++ b/research/simon-polish/round1/transcript.md @@ -0,0 +1,280 @@ +# 试玩转写:《simon》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.5s ▶ 语音:「欢迎来到音序回响。先认识六种声音。」 +t+ 2.6s ▶ 语音:「单击可跳过旁白。」 +t+ 4.7s ▶ 语音:「我会演奏一串声音,请你记住顺序,原样复现。」 +t+ 6.9s ▶ 语音:「向上滑,是这个声音。」 +t+ 9.0s ♪ 音效 sfx/tone_up +t+ 9.9s ▶ 语音:「你试试。」 +t+ 11.4s 【状态】教学第 1/6 个音色 教学:该做「上滑」了(语音播放中,语速1) +t+ 11.4s ♪ 音效 sfx/tone_up +t+ 11.4s ▶ 语音:「对了。」 +t+ 13.5s ▶ 语音:「向下滑,是这个声音。」 +t+ 15.6s ♪ 音效 sfx/tone_down +t+ 16.5s ▶ 语音:「你试试。」 +t+ 18.6s 【状态】教学第 2/6 个音色 教学:该做「下滑」了(无 BGM,语速1) +t+ 18.6s ♪ 音效 sfx/tone_down +t+ 18.6s ▶ 语音:「对了。」 +t+ 20.8s ▶ 语音:「向左滑,是这个声音。」 +t+ 22.9s ♪ 音效 sfx/tone_left +t+ 23.8s ▶ 语音:「你试试。」 +t+ 25.9s 【状态】教学第 3/6 个音色 教学:该做「左滑」了(无 BGM,语速1) + +#### 【玩家动作】把「左滑」记混了,先来了个右滑 + +t+ 25.9s ▶ 语音:「不是这个,向左滑试试。」 +t+ 25.9s 〰 震动:error(做错了:两连短震) +t+ 25.9s ♪ 音效 sfx/tone_left +t+ 25.9s ▶ 语音:「对了。」 +t+ 28.0s ▶ 语音:「向右滑,是这个声音。」 +t+ 30.1s ♪ 音效 sfx/tone_right +t+ 31.0s ▶ 语音:「你试试。」 +t+ 33.2s 【状态】教学第 4/6 个音色 教学:该做「右滑」了(无 BGM,语速1) +t+ 33.2s ♪ 音效 sfx/tone_right +t+ 33.2s ▶ 语音:「对了。」 +t+ 35.3s ▶ 语音:「单击,是这个声音。」 +t+ 37.4s ♪ 音效 sfx/tone_tap +t+ 38.3s ▶ 语音:「你试试。」 +t+ 40.4s 【状态】教学第 5/6 个音色 教学:该做「单击」了(无 BGM,语速1) +t+ 40.4s ♪ 音效 sfx/tone_tap +t+ 40.4s ▶ 语音:「对了。」 +t+ 42.5s ▶ 语音:「双击,是这个声音。」 +t+ 44.7s ♪ 音效 sfx/tone_doubletap +t+ 45.6s ▶ 语音:「你试试。」 +t+ 47.7s 【状态】教学第 6/6 个音色 教学:该做「双击」了(无 BGM,语速1) +t+ 47.7s ♪ 音效 sfx/tone_doubletap +t+ 47.7s ▶ 语音:「对了。」 +t+ 49.8s ▶ 语音:「六种声音都记住了。后面的序列,会越来越长。」 +t+ 51.9s ▶ 语音:「答错可以消耗机会重听。向上滑,可以随时重听。」 +t+ 54.0s ▶ 向导语音:「记不住就向上滑,重新听一遍。免费机会有两次,用完要扣一次机会。」 +t+ 56.2s ▶ 语音:「第一轮,听好了。」 +t+ 56.2s 【状态】教学讲完了:免费重听两次、用完扣机会,想重听就向上滑 第 1 轮报数呢,听好了(语音播放中,语速1) +t+ 58.3s ♪ 音效 sfx/tone_up +t+ 58.3s 〰 震动:beat(节拍点) +t+ 59.0s ♪ 音效 sfx/tone_tap +t+ 59.0s 〰 震动:beat(节拍点) +t+ 60.1s ♪ 向导音:turn(轮到你) +t+ 60.1s ▶ 向导语音:「这一轮,向上滑是作答。」 +t+ 60.1s 〰 震动:confirm(轻点确认) +t+ 62.2s ▶ 语音:「轮到你了。」 +t+ 64.3s 【状态】序列一播完就听到「这一轮,向上滑是作答」——重听键这轮被占了 第 1 轮轮到你了:已对上 0/2,照原顺序做手势(这轮上滑是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 64.3s ……… 静默 5s(第一轮先不动手,看看它催不催) ……… +t+ 69.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 69.3s ♪ 向导音:watchdog(看门狗升级) +t+ 89.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 89.3s ♪ 向导音:watchdog(看门狗升级) +t+ 89.3s ♪ 向导音:turn(轮到你) +t+ 89.3s 〰 震动:confirm(轻点确认) + +#### 【玩家动作】5 秒一声轻提醒、25 秒又一声加确认震——两级提醒都没建议「向上滑重听」,它知道这轮上滑是作答 + +t+ 89.3s 【状态】先来一发上滑——期望恰为 up 时上滑就是作答 第 1 轮轮到你了:已对上 0/2,照原顺序做手势(这轮上滑是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 89.3s ♪ 音效 sfx/tone_up +t+ 89.3s ♪ 音效 sfx/tone_tap +t+ 89.3s ▶ 语音:「答对了!」 +t+ 89.3s 〰 震动:success(成功长震) +t+ 91.7s ▶ 语音:「第二轮,听好了。」 +t+ 93.9s ♪ 音效 sfx/tone_down +t+ 93.9s 〰 震动:beat(节拍点) +t+ 94.5s ♪ 音效 sfx/tone_doubletap +t+ 94.5s 〰 震动:beat(节拍点) +t+ 95.2s ♪ 音效 sfx/tone_left +t+ 95.2s 〰 震动:beat(节拍点) +t+ 96.3s ♪ 向导音:turn(轮到你) +t+ 96.3s ▶ 向导语音:「这一轮,双击是作答。」 +t+ 96.3s 〰 震动:confirm(轻点确认) +t+ 98.4s 【状态】这轮预告的是「双击是作答」 第 2 轮轮到你了:已对上 0/3,照原顺序做手势(这轮双击是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 98.4s ♪ 音效 sfx/tone_down +t+ 98.4s ♪ 音效 sfx/tone_doubletap +t+ 98.4s ♪ 音效 sfx/tone_left +t+ 98.4s ▶ 向导语音:「漂亮,过了。」 +t+ 98.4s 〰 震动:success(成功长震) +t+ 100.8s ▶ 语音:「第三轮,听好了。」 +t+ 102.9s ♪ 音效 sfx/tone_down +t+ 102.9s 〰 震动:beat(节拍点) +t+ 103.6s ♪ 音效 sfx/tone_right +t+ 103.6s 〰 震动:beat(节拍点) +t+ 104.2s ♪ 音效 sfx/tone_tap +t+ 104.9s ♪ 音效 sfx/tone_left +t+ 104.2s 〰 震动:beat(节拍点) +t+ 104.9s 〰 震动:beat(节拍点) +t+ 105.9s ♪ 向导音:turn(轮到你) +t+ 105.9s 〰 震动:confirm(轻点确认) +t+ 105.9s 【状态】这轮开场没有占用预告——上滑还能当重听键用 第 3 轮轮到你了:已对上 0/4,照原顺序做手势(要重听就向上滑)(无 BGM,语速1) +t+ 105.9s ♪ 音效 sfx/tone_down +t+ 105.9s ♪ 音效 sfx/tone_right +t+ 105.9s ♪ 音效 sfx/tone_tap +t+ 105.9s ♪ 音效 sfx/tone_left +t+ 105.9s ▶ 语音:「答对了!」 +t+ 105.9s 〰 震动:success(成功长震) +t+ 108.4s ▶ 语音:「第四轮,听好了。」 +t+ 110.5s ♪ 音效 sfx/tone_down +t+ 110.5s 〰 震动:beat(节拍点) +t+ 111.1s ♪ 音效 sfx/tone_right +t+ 111.7s ♪ 音效 sfx/tone_tap +t+ 111.1s 〰 震动:beat(节拍点) +t+ 111.7s 〰 震动:beat(节拍点) +t+ 112.3s ♪ 音效 sfx/tone_left +t+ 112.3s 〰 震动:beat(节拍点) +t+ 113.0s ♪ 音效 sfx/tone_down +t+ 113.0s 〰 震动:beat(节拍点) +t+ 114.0s ♪ 向导音:turn(轮到你) +t+ 114.0s 〰 震动:confirm(轻点确认) +t+ 114.0s 【状态】机会加一之后,免费重听真的有两次了 第 4 轮轮到你了:已对上 0/5,照原顺序做手势(要重听就向上滑)(无 BGM,语速1) +t+ 114.0s ♪ 音效 sfx/tone_down +t+ 114.0s ♪ 音效 sfx/tone_right +t+ 114.0s ♪ 音效 sfx/tone_tap +t+ 114.0s ♪ 音效 sfx/tone_left +t+ 114.0s ♪ 音效 sfx/tone_down +t+ 114.0s ▶ 向导语音:「漂亮,过了。」 +t+ 114.0s 〰 震动:success(成功长震) +t+ 114.0s 〰 震动:pickup(获得) +t+ 116.1s ▶ 语音:「机会加一。」 +t+ 118.5s ▶ 语音:「第五轮,听好了。」 +t+ 120.6s ♪ 音效 sfx/tone_down +t+ 120.6s 〰 震动:beat(节拍点) +t+ 121.2s ♪ 音效 sfx/tone_right +t+ 121.8s ♪ 音效 sfx/tone_tap +t+ 121.2s 〰 震动:beat(节拍点) +t+ 121.8s 〰 震动:beat(节拍点) +t+ 122.4s ♪ 音效 sfx/tone_left +t+ 122.4s 〰 震动:beat(节拍点) +t+ 123.0s ♪ 音效 sfx/tone_down +t+ 123.6s ♪ 音效 sfx/tone_right +t+ 123.0s 〰 震动:beat(节拍点) +t+ 123.6s 〰 震动:beat(节拍点) +t+ 124.6s ♪ 向导音:turn(轮到你) +t+ 124.6s 〰 震动:confirm(轻点确认) +t+ 124.6s 【状态】第 5 轮序列有点长,先不动手 第 5 轮轮到你了:已对上 0/6,照原顺序做手势(要重听就向上滑)(无 BGM,语速1) +t+ 124.6s ……… 静默 5s(想不起来序列了) ……… +t+ 129.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 129.6s ▶ 向导语音:「需要的话,向上滑可以重新听一遍序列。」 +t+ 129.6s 【状态】5 秒就来了提示:需要的话,向上滑可以重新听一遍序列 第 5 轮轮到你了:已对上 0/6,照原顺序做手势(要重听就向上滑)(语音播放中,语速1) + +#### 【玩家动作】照提示向上滑——第 1 次免费重听用掉,跟着听到「免费重听还剩一次」 + +t+ 129.6s ▶ 语音:「再听一遍。」 +t+ 129.6s 〰 震动:pickup(获得) +t+ 131.7s ▶ 向导语音:「免费重听还剩一次。」 +t+ 133.9s ♪ 音效 sfx/tone_down +t+ 133.9s 〰 震动:beat(节拍点) +t+ 134.5s ♪ 音效 sfx/tone_right +t+ 134.5s 〰 震动:beat(节拍点) +t+ 135.1s ♪ 音效 sfx/tone_tap +t+ 135.6s ♪ 音效 sfx/tone_left +t+ 135.1s 〰 震动:beat(节拍点) +t+ 135.6s 〰 震动:beat(节拍点) +t+ 136.2s ♪ 音效 sfx/tone_down +t+ 136.8s ♪ 音效 sfx/tone_right +t+ 136.2s 〰 震动:beat(节拍点) +t+ 136.8s 〰 震动:beat(节拍点) +t+ 137.8s ♪ 向导音:turn(轮到你) +t+ 137.8s 〰 震动:confirm(轻点确认) +t+ 137.8s ♪ 音效 sfx/tone_down +t+ 137.8s ♪ 音效 sfx/tone_right +t+ 137.8s ♪ 音效 sfx/tone_tap +t+ 137.8s ♪ 音效 sfx/tone_left +t+ 137.8s ♪ 音效 sfx/tone_down +t+ 137.8s ♪ 音效 sfx/tone_right +t+ 137.8s ▶ 语音:「答对了!」 +t+ 137.8s 〰 震动:success(成功长震) +t+ 140.3s ▶ 语音:「第六轮,听好了。」 +t+ 142.4s ♪ 音效 sfx/tone_up +t+ 142.9s ♪ 音效 sfx/tone_doubletap +t+ 142.4s 〰 震动:beat(节拍点) +t+ 142.9s 〰 震动:beat(节拍点) +t+ 143.5s ♪ 音效 sfx/tone_tap +t+ 143.5s 〰 震动:beat(节拍点) +t+ 144.1s ♪ 音效 sfx/tone_left +t+ 144.7s ♪ 音效 sfx/tone_down +t+ 144.1s 〰 震动:beat(节拍点) +t+ 144.7s 〰 震动:beat(节拍点) +t+ 145.2s ♪ 音效 sfx/tone_right +t+ 145.8s ♪ 音效 sfx/tone_tap +t+ 145.2s 〰 震动:beat(节拍点) +t+ 145.8s 〰 震动:beat(节拍点) +t+ 146.8s ♪ 向导音:turn(轮到你) +t+ 146.8s ▶ 向导语音:「这一轮,向上滑和双击都是作答。」 +t+ 146.8s 〰 震动:confirm(轻点确认) +t+ 148.9s 【状态】这轮说「向上滑和双击都是作答」——两个键都被占用了 第 6 轮轮到你了:已对上 0/7,照原顺序做手势(这轮上滑和双击是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 148.9s ……… 静默 5s(轮到我了,先心里过一遍序列) ……… +t+ 153.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 153.9s ♪ 向导音:watchdog(看门狗升级) +t+ 173.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 173.9s ♪ 向导音:watchdog(看门狗升级) +t+ 173.9s ♪ 向导音:turn(轮到你) +t+ 173.9s 〰 震动:confirm(轻点确认) + +#### 【玩家动作】又是两级提醒都没有重听建议——占用轮里那句建议自动闭嘴 + +t+ 173.9s ♪ 音效 sfx/tone_up +t+ 173.9s ♪ 音效 sfx/tone_doubletap +t+ 173.9s ♪ 音效 sfx/tone_tap +t+ 173.9s ♪ 音效 sfx/tone_left +t+ 173.9s ♪ 音效 sfx/tone_down +t+ 173.9s ♪ 音效 sfx/tone_right +t+ 173.9s ♪ 音效 sfx/tone_tap +t+ 173.9s ▶ 向导语音:「漂亮,过了。」 +t+ 173.9s 〰 震动:success(成功长震) +t+ 176.3s ▶ 语音:「第七轮,听好了。」 +t+ 178.4s ♪ 音效 sfx/tone_down +t+ 178.4s 〰 震动:beat(节拍点) +t+ 179.0s ♪ 音效 sfx/tone_right +t+ 179.5s ♪ 音效 sfx/tone_tap +t+ 179.0s 〰 震动:beat(节拍点) +t+ 179.5s 〰 震动:beat(节拍点) +t+ 180.1s ♪ 音效 sfx/tone_left +t+ 180.6s ♪ 音效 sfx/tone_down +t+ 180.1s 〰 震动:beat(节拍点) +t+ 180.6s 〰 震动:beat(节拍点) +t+ 181.1s ♪ 音效 sfx/tone_right +t+ 181.7s ♪ 音效 sfx/tone_tap +t+ 181.1s 〰 震动:beat(节拍点) +t+ 181.7s 〰 震动:beat(节拍点) +t+ 182.2s ♪ 音效 sfx/tone_left +t+ 182.2s 〰 震动:beat(节拍点) +t+ 183.2s ♪ 向导音:turn(轮到你) +t+ 183.2s 〰 震动:confirm(轻点确认) +t+ 183.2s ……… 静默 5s(长序列,又想不起来了) ……… +t+ 188.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 188.2s ▶ 向导语音:「需要的话,向上滑可以重新听一遍序列。」 +t+ 188.2s 【状态】又是那句提示:向上滑可以重新听一遍序列 第 7 轮轮到你了:已对上 0/8,照原顺序做手势(要重听就向上滑)(语音播放中,语速1) + +#### 【玩家动作】向上滑——第 2 次免费重听用掉,这回听到「免费重听用完了。之后重听会花一次机会」 + +t+ 188.2s ▶ 语音:「再听一遍。」 +t+ 188.2s 〰 震动:pickup(获得) +t+ 190.3s ▶ 向导语音:「免费重听用完了。之后重听会花一次机会,别怕,慢慢来。」 +t+ 192.4s ♪ 音效 sfx/tone_down +t+ 192.4s 〰 震动:beat(节拍点) +t+ 193.0s ♪ 音效 sfx/tone_right +t+ 193.5s ♪ 音效 sfx/tone_tap +t+ 193.0s 〰 震动:beat(节拍点) +t+ 193.5s 〰 震动:beat(节拍点) +t+ 194.1s ♪ 音效 sfx/tone_left +t+ 194.6s ♪ 音效 sfx/tone_down +t+ 194.1s 〰 震动:beat(节拍点) +t+ 194.6s 〰 震动:beat(节拍点) +t+ 195.1s ♪ 音效 sfx/tone_right +t+ 195.7s ♪ 音效 sfx/tone_tap +t+ 195.1s 〰 震动:beat(节拍点) +t+ 195.7s 〰 震动:beat(节拍点) +t+ 196.2s ♪ 音效 sfx/tone_left +t+ 196.2s 〰 震动:beat(节拍点) +t+ 197.2s ♪ 向导音:turn(轮到你) +t+ 197.2s 〰 震动:confirm(轻点确认) +t+ 197.2s ♪ 音效 sfx/tone_down +t+ 197.2s ♪ 音效 sfx/tone_right +t+ 197.2s ♪ 音效 sfx/tone_tap +t+ 197.2s ♪ 音效 sfx/tone_left +t+ 197.2s ♪ 音效 sfx/tone_down +t+ 197.2s ♪ 音效 sfx/tone_right +t+ 197.2s ♪ 音效 sfx/tone_tap +t+ 197.2s ♪ 音效 sfx/tone_left +t+ 197.2s ▶ 语音:「答对了!」 +t+ 197.2s 〰 震动:success(成功长震) +t+ 197.2s 【状态】收工:打完 7 轮在轮边界停手(免费重听剩 2 次,账目和播的对上了) 刚答完一轮,播报中(语音播放中,语速1) diff --git a/research/simon-polish/round2/driver2.mjs b/research/simon-polish/round2/driver2.mjs new file mode 100644 index 00000000..6300fbb9 --- /dev/null +++ b/research/simon-polish/round2/driver2.mjs @@ -0,0 +1,354 @@ +/** + * simon live 修后验证驱动(round2)。 + * node driver2.mjs V —— 核对局:S2 input_open 后才作答 / S1·S3·S4 长按查询 / + * S7 your_turn 一次 / S6 结算链阶段看守+补播 / S5 误触 error 震 + * node driver2.mjs P —— 压力局:乱按路径复跑,核对 S5/S6/S2 有落点 + * 断言全在事件流上(等价玩家听+摸得到的反馈);末尾 /listen 取 ASR 判定行。 + */ +const BASE = 'http://localhost:8143'; +const MODE = process.argv[2] || 'V'; +const fs = await import('node:fs'); + +async function post(p, body) { + const r = await fetch(BASE + p, { + method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body || {}), + }); + const j = await r.json(); + if (!r.ok || j.ok === false) throw new Error(`${p}: ${JSON.stringify(j)}`); + return j; +} +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); + +const G2E = { up: 'swipeup', down: 'swipedown', left: 'swipeleft', right: 'swiperight', tap: 'tap', doubletap: 'doubletap' }; +const TONE2G = { + tone_up: 'up', tone_down: 'down', tone_left: 'left', tone_right: 'right', + tone_tap: 'tap', tone_doubletap: 'doubletap', +}; +const vid = (url) => String(url || '').split('/').pop().replace(/\.\w+$/, ''); +const isTone = (id) => id.startsWith('tone_'); + +const w = { since: 0, all: [] }; +async function poll() { + const r = await fetch(`${BASE}/events?since=${w.since}`); + const { events: evs, next } = await r.json(); + w.since = next; + for (const e of evs) w.all.push(e); + return evs; +} +async function until(cond, { timeout = 60000, step = 120, tag = '' } = {}) { + const t0 = Date.now(); + for (;;) { + const evs = await poll(); + const hit = evs.filter(cond); + if (hit.length) return hit; + if (Date.now() - t0 > timeout) { + const tail = w.all.slice(-6).map((e) => `${e.ev}:${vid(e.url) || e.pattern || ''}`).join(' | '); + throw new Error(`until 超时(${Date.now() - t0}ms)${tag}:since=${w.since} all=${w.all.length} tail=${tail}`); + } + await sleep(step); + } +} +let PASS = 0, FAIL = 0; +function check(cond, msg) { + if (cond) { PASS++; console.log(` ✓ ${msg}`); } + else { FAIL++; console.log(` ✗ ${msg}`); } +} +async function gesture(name, note) { + if (note) console.log(` [我] ${note} → ${name}`); + await post('/gesture', { type: name }); +} + +const mark = () => w.all.length; +const since = (m) => w.all.slice(m); +const evVibrate = (m, pat) => since(m).filter((e) => e.ev === 'vibrate' && e.pattern === pat); +const evVstart = (m, id) => since(m).filter((e) => e.ev === 'vstart' && vid(e.url) === id); + +/** + * 听 playback 直到 input_open 标记(_toInput,答题窗口真开放),从该标记倒取 + * expectedLen 个 tone-start 为序列。input_open 唯一且不可与 tap 确认震混淆 + * (跳过播报的 tap 也发 [20],曾让 confirm 边界误匹配、序列倒穿进上一轮历史)。 + */ +async function collectPlayback(expectedLen) { + await until((e) => e.ev === 'start' && vid(e.url) === 'input_open', { timeout: 40000, tag: 'input_open' }); + let idx = -1; + for (let i = w.all.length - 1; i >= 0; i--) { + if (w.all[i].ev === 'start' && vid(w.all[i].url) === 'input_open') { idx = i; break; } + } + const seq = []; + for (let i = idx - 1; i >= 0 && seq.length < expectedLen; i--) { + const e = w.all[i]; + if (e.ev === 'start' && e.layer !== 'voice' && isTone(vid(e.url))) seq.push(TONE2G[vid(e.url)]); + } + seq.reverse(); + if (seq.length !== expectedLen) console.log(` [!] 序列 ${seq.length} 音 ≠ 期望 ${expectedLen}`); + console.log(` [debug-collect] input_open ta=${w.all[idx]?.ta} seq=${seq.join(' ')}`); + return seq; +} + +// input_open 游标:跨批次的"下一个未消费标记"(drain 批可能把 confirm 与 +// input_open 同窗送达,按 mark 快照等新事件会漏看——游标扫全量历史,源驱动免疫)。 +let ioCursor = 0; +async function waitInputOpen(timeout = 15000) { + const t0 = Date.now(); + for (;;) { + for (; ioCursor < w.all.length; ioCursor++) { + const e = w.all[ioCursor]; + if (e.ev === 'start' && vid(e.url) === 'input_open') { ioCursor++; return true; } + } + if (Date.now() - t0 > timeout) return false; + await poll(); + } +} + +/** 答完整序列(调用方负责先 waitInputOpen)。 */ +async function answerAll(seq) { + for (const g of seq) { + await post('/gesture', { type: G2E[g] }); + await sleep(250); + } +} + +async function listenAll() { + const rows = []; + let cur = null; + for (let i = 0; i < 40; i++) { + const r = await fetch(`${BASE}/listen`); + const j = await r.json(); + rows.push(...j.rows); + if (j.rows.length === 0) break; + cur = j; + await sleep(1500); + } + return rows; +} + +// ---------------------------------------------------------------- 局 V:核对局 +async function runV() { + console.log('== 局 V(修后核对局,female/normal/guide full)'); + await post('/session', { game: 'simon', settings: { voice: 'female', speed: 'normal', bgm: 'normal', guide: 'full' } }); + await until((e) => e.ev === 'probe_ready', { timeout: 30000 }); + await sleep(800); + await gesture('tap', '解锁'); + // 教学讲解期维持静默忽略(设计裁定:S5 只管 announce/roundend,教学不动)——锁定负例 + const m0 = mark(); + await gesture('swipeleft', '教学讲解期乱滑'); + await sleep(300); + check(evVibrate(m0, '[60,40,60]').length === 0, '教学讲解期维持静默忽略(S5 不扩面,负例锁定)'); + await gesture('swipedown', '跳教学'); + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 15000 }); + + // 第 1 轮:S7——首边界 your_turn 一遍;答错触发复活重播,验证不重念 + let seq = await collectPlayback(2); + console.log(`-- 第 1 轮:${seq.join(' ')}`); + { + check(await waitInputOpen(), 'S2:第 1 轮边界 input_open 到达'); + await sleep(700); await poll(); + const ytBase = w.all.filter((e) => e.ev === 'vstart' && vid(e.url) === 'your_turn').length; + check(ytBase === 1, 'S7:首次开放 your_turn 一遍'); + await post('/gesture', { type: G2E[seq[0]] }); // 答首音 + await sleep(300); + const wrong = ['down', 'left', 'right', 'tap'].find((x) => x !== seq[1]); + await post('/gesture', { type: G2E[wrong] }); // 答错 → 复活 + await until((e) => e.ev === 'vstart' && vid(e.url) === 'retry_use', { timeout: 8000 }); + seq = await collectPlayback(2); // 复活重播 + check(await waitInputOpen(), 'S2:复活重播回 input 有 input_open 标记'); + await sleep(700); await poll(); + const ytNow = w.all.filter((e) => e.ev === 'vstart' && vid(e.url) === 'your_turn').length; + check(ytNow === ytBase, 'S7:复活重播不重念 your_turn'); + await answerAll(seq); + } + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 20000, tag: 'round' }); + + // 第 2 轮:S2——input_open 与占用预告的次序(本轮占用多半已被第 1 轮封顶抑制,双路径都验) + const mB = mark(); + seq = await collectPlayback(3); + console.log(`-- 第 2 轮:${seq.join(' ')}`); + { + const hasOcc = since(mB).some((e) => e.ev === 'vstart' && vid(e.url).startsWith('gd_occ')); + check(await waitInputOpen(), `S2:input_open 标记到达(${hasOcc ? '占用预告链尾' : '无链轮(占用被第 1 轮封顶抑制)'})`); + if (hasOcc) { + const occVends = w.all.map((e, i) => (e.ev === 'vend' && vid(e.url).startsWith('gd_occ') ? i : -1)).filter((i) => i >= 0 && i >= mB); + const openIdx = w.all.findIndex((e, i) => i >= mB && e.ev === 'start' && vid(e.url) === 'input_open'); + check(openIdx > occVends[occVends.length - 1], 'S2:input_open 在占用预告结束之后'); + } + await answerAll(seq); + } + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 20000, tag: 'round' }); + + // 第 3 轮:S5——announce 播报期乱滑给 error 震(round_03 播报已由上行 until 消费) + { + const mA = mark(); + await gesture('swipeleft', '轮次播报期乱滑'); + await gesture('swiperight', '再滑一下'); + // 断言等对 drain 宽容:轮询至 error 震出现(或 2s 上限——drain 批延迟可达 1s+) + let s5ok = false; + for (let i = 0; i < 17; i++) { + await poll(); + if (evVibrate(mA, '[60,40,60]').length >= 1) { s5ok = true; break; } + await sleep(120); + } + check(s5ok, 'S5:announce 播报期误触有 error 震'); + await gesture('tap', '跳播报'); + seq = await collectPlayback(4); + console.log(`-- 第 3 轮:${seq.join(' ')}`); + await waitInputOpen(); + await answerAll(seq); + } + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 20000, tag: 'round' }); + + // 第 4 轮:S1/S3/S4——input 阶段长按查询 + seq = await collectPlayback(5); + console.log(`-- 第 4 轮(${seq.length} 音):${seq.join(' ')}`); + { + await waitInputOpen(); + const mQ = mark(); + await gesture('longpress', '长按问状态'); + // 等到三档 vstart 全部开播再断言(真实语音每句 1-2s,链式开播) + for (let i = 0; i < 50; i++) { + await poll(); + if (since(mQ).filter((e) => e.ev === 'vstart' && vid(e.url).startsWith('status_')).length >= 3) break; + await sleep(200); + } + const heard = since(mQ).filter((e) => e.ev === 'vstart').map((e) => vid(e.url)); + check(heard.filter((x) => x.startsWith('status_len')).length === 1 + && heard.filter((x) => x.startsWith('status_prog')).length === 1 + && heard.filter((x) => x.startsWith('status_free') || x.startsWith('status_chance') || x === 'status_out').length === 1, + `S1/S3/S4:查询三档整句(${heard.filter((x) => x.startsWith('status_')).join(', ')})`); + const lenId = seq.length <= 4 ? 'status_len_short' : seq.length <= 8 ? 'status_len_mid' : 'status_len_long'; + check(heard.includes(lenId), `S1:长度档与真实长度一致(${lenId})`); + check(heard.includes('status_prog_start'), 'S3:进度档 start(尚未作答)'); + check(heard.includes('status_free2'), 'S4:账目档 free2(免费两次未用)'); + await answerAll(seq); + } + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 20000, tag: 'round' }); + + // 第 5 轮:S6——input 开放后故意三连错(机会 = 初始 1 + 第 4 轮完成 +1 = 2)→ gameover + seq = await collectPlayback(5); + console.log(`-- 第 5 轮(${seq.length} 音):${seq.join(' ')}`); + await waitInputOpen(); + { + // 机会账:初始 1 - 第 1 轮故意答错 1 + 第 4 轮完成 +1 = 1 → 两连错耗尽 + for (let k = 0; k < 2; k++) { + const wrong = ['down', 'left', 'right', 'tap'].find((x) => x !== seq[0]); + await gesture(G2E[wrong], `故意答错(第 ${k + 1} 次)`); + if (k < 1) { + await until((e) => e.ev === 'vstart' && vid(e.url) === 'retry_use', { timeout: 8000 }); + seq = await collectPlayback(5); + await waitInputOpen(); + } + } + } + // S6:结算链 +1400ms 点火之前下滑进菜单(死亡瞬间手型,live-B 行 141) + await sleep(600); // 判死本身即时(error/hit 震 + sfx/gameover +700ms) + { + const mG = mark(); + await gesture('swipedown', '死亡瞬间下滑进菜单'); + await until((e) => e.ev === 'vstart' && vid(e.url) === 'menu_open', { timeout: 8000 }); + check(since(mG).filter((e) => e.ev === 'vstart' && /^(gameover|score_band)/.test(vid(e.url))).length === 0, + 'S6 前提:进菜单前结算链未开播'); + const mM = mark(); + await sleep(2500); // 越过原 +1400ms 点火点 + const leaked = since(mM).filter((e) => e.ev === 'vstart' && /^(gameover|score_band)/.test(vid(e.url))); + check(leaked.length === 0, 'S6:菜单内不交付结算链'); + await gesture('swipedown', '关菜单回结算页'); + let redelivered = []; + for (let i = 0; i < 42; i++) { + await poll(); + redelivered = since(mM).filter((e) => e.ev === 'vstart' && /^(gameover|score_band)/.test(vid(e.url))); + if (redelivered.length >= 2) break; + await sleep(150); + } + check(redelivered.length >= 2, `S6:回结算页补播结算链(${redelivered.map((e) => vid(e.url)).join(', ')})`); + } + console.log('== 局 V 结束'); +} + +// ---------------------------------------------------------------- 局 P:压力局 +async function runP() { + console.log('== 局 P(修后压力局,male/1.7/guide full)'); + await post('/session', { game: 'simon', settings: { voice: 'male', speed: '1.7', bgm: 'normal', guide: 'full' } }); + await until((e) => e.ev === 'probe_ready', { timeout: 30000 }); + await sleep(800); + await gesture('tap', '解锁'); + for (let i = 0; i < 3; i++) await gesture('tap', '连点跳旁白'); + await gesture('swipedown', '跳教学'); + await until((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'), { timeout: 15000 }); + const mA = mark(); + await gesture('swipeleft', '播报期乱滑'); + let s5ok = false; + for (let i = 0; i < 17; i++) { + await poll(); + if (evVibrate(mA, '[60,40,60]').length >= 1) { s5ok = true; break; } + await sleep(120); + } + check(s5ok, 'S5:跳播报路径上误触有 error 震'); + + const rnd = () => ['up', 'down', 'left', 'right', 'tap', 'doubletap'][Math.floor(Math.random() * 6)]; + let dead = false; + for (let guard = 0; guard < 140 && !dead; guard++) { + const evs = await poll(); + for (const e of evs) { + // 判死检测用 hit 震(+300ms,gameover 专属震型)——赶在结算链 +1400ms 点火前 + // 完成下滑,给 S6 留确定性的操作窗 + if (e.ev === 'vibrate' && e.pattern === '[80]') { dead = true; } + } + if (dead) break; + if (evs.some((e) => e.ev === 'vibrate' && e.pattern === '[8]') && Math.random() < 0.5) { + const mPl = mark(); + await gesture(G2E[rnd()], '播放中乱按'); + let errSeen = false; + for (let i = 0; i < 13; i++) { + await poll(); + if (evVibrate(mPl, '[60,40,60]').length > 0) { errSeen = true; break; } + await sleep(120); + } + check(!errSeen, 'S5 负例:playback 维持静默豁免'); + continue; + } + if (evs.some((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_'))) { + await gesture('tap', '跳轮次播报'); + } + await gesture(G2E[rnd()], '凭感觉乱答'); + await sleep(200); + } + check(dead, '压力局到达 gameover'); + // S6 压力路径:死亡瞬间下滑 → 菜单 → 回结算页补播 + const mG = mark(); + await gesture('swipedown', '死亡瞬间下滑进菜单'); + await until((e) => e.ev === 'vstart' && vid(e.url) === 'menu_open', { timeout: 8000 }).catch(() => []); + const mM = mark(); + await sleep(2500); + const leaked = since(mM).filter((e) => e.ev === 'vstart' && /^(gameover|score_band)/.test(vid(e.url))); + check(leaked.length === 0, 'S6:菜单内不交付结算链(压力路径)'); + await gesture('swipedown', '关菜单'); + let redelivered = []; + for (let i = 0; i < 42; i++) { + await poll(); + redelivered = since(mM).filter((e) => e.ev === 'vstart' && /^(gameover|score_band)/.test(vid(e.url))); + if (redelivered.length >= 2) break; + await sleep(150); + } + check(redelivered.length >= 2, `S6:回结算页补播(${redelivered.map((e) => vid(e.url)).join(', ')})`); + const ioCount = w.all.filter((e) => e.ev === 'start' && vid(e.url) === 'input_open').length; + const roundEnters = w.all.filter((e) => e.ev === 'vstart' && vid(e.url).startsWith('round_')).length; + check(ioCount >= 2 && ioCount >= roundEnters, `S2:input_open 每轮边界到达(${ioCount} 次 ≥ 进入轮次 ${roundEnters};压力局死在第 1 轮亦不少于初始+复活边界)`); + console.log('== 局 P 结束'); +} + +const runner = MODE === 'P' ? runP : runV; +runner() + .then(async () => { + const rows = await listenAll(); + const bad = rows.filter((r) => r.verdict !== 'OK'); + console.log(`ASR 判定行 ${rows.length},非 OK ${bad.length}`); + for (const r of bad.slice(0, 10)) console.log(` [${r.verdict}] ${r.voiceId} sim=${r.similarity} heard=${r.heard}`); + const stop = await post('/stop'); + console.log(`落盘: ${stop.outdir}(${stop.segs} 语音段 / ${stop.rows} 判定行)`); + console.log(`\n验证断言:通过 ${PASS},失败 ${FAIL}`); + process.exit(FAIL > 0 ? 1 : 0); + }) + .catch(async (e) => { + console.error('驱动出错:', e); + try { await post('/stop'); } catch (_) { /* 忽略 */ } + process.exit(1); + }); diff --git a/research/simon-polish/round2/live-P-driver.log b/research/simon-polish/round2/live-P-driver.log new file mode 100644 index 00000000..7d9a28a3 --- /dev/null +++ b/research/simon-polish/round2/live-P-driver.log @@ -0,0 +1,57 @@ +== 局 P(修后压力局,male/1.7/guide full) + [我] 解锁 → tap + [我] 连点跳旁白 → tap + [我] 连点跳旁白 → tap + [我] 连点跳旁白 → tap + [我] 跳教学 → swipedown + [我] 播报期乱滑 → swipeleft + ✓ S5:跳播报路径上误触有 error 震 + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swipedown + [我] 播放中乱按 → swipeup + ✓ S5 负例:playback 维持静默豁免 + [我] 凭感觉乱答 → swipedown + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → tap + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → swipedown + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → tap + [我] 播放中乱按 → swiperight + ✓ S5 负例:playback 维持静默豁免 + [我] 凭感觉乱答 → swipeup + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → swiperight + [我] 凭感觉乱答 → doubletap + [我] 凭感觉乱答 → doubletap + [我] 播放中乱按 → swipeleft + ✓ S5 负例:playback 维持静默豁免 + [我] 凭感觉乱答 → swipeleft + [我] 凭感觉乱答 → swiperight + ✓ 压力局到达 gameover + [我] 死亡瞬间下滑进菜单 → swipedown + ✓ S6:菜单内不交付结算链(压力路径) + [我] 关菜单 → swipedown + ✓ S6:回结算页补播(gameover, score_band1) + ✓ S2:input_open 每轮边界到达(3 次 ≥ 进入轮次 1;压力局死在第 1 轮亦不少于初始+复活边界) +== 局 P 结束 +ASR 判定行 20,非 OK 10 + [TRUNCATED] t0_welcome sim=0 heard=对。 + [TRUNCATED] skip_hint sim=0.25 heard=单。 + [TRUNCATED] t0_goal sim=0.1 heard=嗯我。 + [TRUNCATED] t1_up sim=0 heard=我想。 + [TRUNCATED] gd_occ_dt sim=0.6667 heard=这一轮是。 + [TRUNCATED] menu_open sim=0 heard=操。 + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= +落盘: /home/xsl/AutoVideo/SoundGame/web/harness/live/out/simon-20260914120934(17 语音段 / 20 判定行) + +验证断言:通过 8,失败 0 diff --git a/research/simon-polish/round2/live-P-events.jsonl b/research/simon-polish/round2/live-P-events.jsonl new file mode 100644 index 00000000..524ad35a --- /dev/null +++ b/research/simon-polish/round2/live-P-events.jsonl @@ -0,0 +1,169 @@ +{"ev":"probe_ready","t":8.100000023841858,"ta":null} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":821.2000000178814,"ta":-0.074} +{"ev":"recstart","mime":"audio/webm;codecs=opus","t":895.4000000059605,"ta":0} +{"ev":"fetch","url":"audio/sfx/tone_up.ogg","status":200,"ok":true,"ms":15,"t":910.3000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_down.ogg","status":200,"ok":true,"ms":15,"t":910.6000000238419,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_left.ogg","status":200,"ok":true,"ms":15,"t":910.6000000238419,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_right.ogg","status":200,"ok":true,"ms":15,"t":910.7000000178814,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_tap.ogg","status":200,"ok":true,"ms":15,"t":910.7000000178814,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_doubletap.ogg","status":200,"ok":true,"ms":15,"t":910.7000000178814,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/gameover.ogg","status":200,"ok":true,"ms":15,"t":910.8000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/input_open.ogg","status":200,"ok":true,"ms":15,"t":910.9000000059605,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/t0_welcome.ogg","status":200,"ok":true,"ms":15,"t":910.9000000059605,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/t0_goal.ogg","status":200,"ok":true,"ms":15,"t":911.1000000238419,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/skip_hint.ogg","status":200,"ok":true,"ms":15,"t":911.1000000238419,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/t_try.ogg","status":200,"ok":true,"ms":15,"t":911.1000000238419,"ta":0.016} +{"ev":"fetch","url":"audio/voice/male/round_01.ogg","status":200,"ok":true,"ms":15,"t":911.6000000238419,"ta":0.016} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":1302.6000000238419,"ta":0.407} +{"ev":"vstart","url":"audio/voice/male/t0_welcome.ogg","t":1397.4000000059605,"dur":5.04,"ta":0.502} +{"ev":"vibrate","pattern":"[20]","t":1666.6000000238419,"ta":0.771} +{"ev":"vend","url":"audio/voice/male/t0_welcome.ogg","t":1666.9000000059605,"reason":"kill","ta":0.772} +{"ev":"vstart","url":"audio/voice/male/skip_hint.ogg","t":1667.1000000238419,"dur":2.32,"ta":0.772} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":1770.6000000238419,"ta":0.875} +{"ev":"vibrate","pattern":"[20]","t":2133.7000000178814,"ta":1.238} +{"ev":"vend","url":"audio/voice/male/skip_hint.ogg","t":2133.7000000178814,"reason":"kill","ta":1.238} +{"ev":"vstart","url":"audio/voice/male/t0_goal.ogg","t":2133.9000000059605,"dur":5.84,"ta":1.239} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":2239,"ta":1.344} +{"ev":"vibrate","pattern":"[20]","t":2602.4000000059605,"ta":1.707} +{"ev":"vend","url":"audio/voice/male/t0_goal.ogg","t":2602.4000000059605,"reason":"kill","ta":1.707} +{"ev":"fetch","url":"audio/voice/male/t1_up.ogg","status":200,"ok":true,"ms":3,"t":2605.100000023842,"ta":1.71} +{"ev":"vstart","url":"audio/voice/male/t1_up.ogg","t":2609.600000023842,"dur":3.12,"ta":1.714} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":2706.5,"ta":1.811} +{"ev":"vibrate","pattern":"[10]","t":3057.800000011921,"ta":2.162} +{"ev":"vend","url":"audio/voice/male/t1_up.ogg","t":3058,"reason":"kill","ta":2.163} +{"ev":"fetch","url":"audio/voice/male/t_skip.ogg","status":200,"ok":true,"ms":2,"t":3060.4000000059605,"ta":2.165} +{"ev":"vstart","url":"audio/voice/male/t_skip.ogg","t":3063.7000000178814,"dur":2.48,"ta":2.168} +{"ev":"vend","url":"audio/voice/male/t_skip.ogg","t":5771.200000017881,"reason":"kill","ta":4.876} +{"ev":"vstart","url":"audio/voice/male/round_01.ogg","t":5771.5,"dur":2.64,"ta":4.876} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":5809.9000000059605,"ta":4.915} +{"ev":"vibrate","pattern":"[10]","t":6174.200000017881,"ta":5.279} +{"ev":"vibrate","pattern":"[60,40,60]","t":6174.200000017881,"ta":5.279} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":6582.100000023842,"ta":5.687} +{"ev":"vibrate","pattern":"[20]","t":6829,"ta":5.934} +{"ev":"vibrate","pattern":"[60,40,60]","t":6829,"ta":5.934} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":7438.100000023842,"ta":6.543} +{"ev":"vibrate","pattern":"[10]","t":7790.800000011921,"ta":6.895} +{"ev":"vibrate","pattern":"[60,40,60]","t":7790.800000011921,"ta":6.895} +{"ev":"vibrate","pattern":"[8]","t":8271.700000017881,"ta":7.376} +{"ev":"start","t":8271.90000000596,"sid":1,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":7.377} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":8399.800000011921,"ta":7.504} +{"ev":"vend","url":"audio/voice/male/round_01.ogg","t":8487.40000000596,"reason":"kill","ta":7.592} +{"ev":"vibrate","pattern":"[10]","t":8757.600000023842,"ta":7.862} +{"ev":"vibrate","pattern":"[8]","t":8971.90000000596,"ta":8.076} +{"ev":"start","t":8972,"sid":2,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":8.077} +{"ev":"vibrate","pattern":"[20]","t":10072.300000011921,"ta":9.177} +{"ev":"fetch","url":"audio/voice/male/gd_occ_dt.ogg","status":200,"ok":true,"ms":3,"t":10076.300000011921,"ta":9.181} +{"ev":"vstart","url":"audio/voice/male/gd_occ_dt.ogg","t":10079.800000011921,"dur":2.08,"ta":9.184} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":10765.5,"ta":9.87} +{"ev":"vibrate","pattern":"[10]","t":11123.90000000596,"ta":10.229} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":11730,"ta":10.835} +{"ev":"vibrate","pattern":"[20]","t":11976.300000011921,"ta":11.081} +{"ev":"vend","url":"audio/voice/male/gd_occ_dt.ogg","t":12411.200000017881,"reason":"kill","ta":11.516} +{"ev":"fetch","url":"audio/voice/male/your_turn.ogg","status":200,"ok":true,"ms":3,"t":12414,"ta":11.519} +{"ev":"vstart","url":"audio/voice/male/your_turn.ogg","t":12416.300000011921,"dur":1.36,"ta":11.521} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":12583.100000023842,"ta":11.688} +{"ev":"vibrate","pattern":"[20]","t":12946,"ta":12.051} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":13253.600000023842,"ta":12.358} +{"ev":"vibrate","pattern":"[10]","t":13606.90000000596,"ta":12.712} +{"ev":"vend","url":"audio/voice/male/your_turn.ogg","t":14013.200000017881,"reason":"kill","ta":13.118} +{"ev":"start","t":14013.5,"sid":3,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":13.118} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":14214.100000023842,"ta":13.319} +{"ev":"vibrate","pattern":"[20]","t":14460.90000000596,"ta":13.566} +{"ev":"vibrate","pattern":"[60,40,60]","t":14461.100000023842,"ta":13.566} +{"ev":"start","t":14461.5,"sid":4,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":13.566} +{"ev":"fetch","url":"audio/voice/male/retry_use.ogg","status":200,"ok":true,"ms":2,"t":14463.40000000596,"ta":13.568} +{"ev":"vstart","url":"audio/voice/male/retry_use.ogg","t":14467.40000000596,"dur":3.52,"ta":13.572} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":14761.40000000596,"ta":13.866} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":15069.200000017881,"ta":14.174} +{"ev":"vibrate","pattern":"[20]","t":15315.90000000596,"ta":14.421} +{"ev":"vibrate","pattern":"[60,40,60]","t":15315.90000000596,"ta":14.421} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":15922.700000017881,"ta":15.027} +{"ev":"vibrate","pattern":"[20]","t":16169.5,"ta":15.274} +{"ev":"vibrate","pattern":"[60,40,60]","t":16169.5,"ta":15.274} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":16776.20000001788,"ta":15.881} +{"ev":"vibrate","pattern":"[10]","t":17140.20000001788,"ta":16.245} +{"ev":"vibrate","pattern":"[60,40,60]","t":17140.30000001192,"ta":16.245} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":17746.40000000596,"ta":16.851} +{"ev":"vibrate","pattern":"[10]","t":18106.600000023842,"ta":17.211} +{"ev":"vibrate","pattern":"[60,40,60]","t":18106.600000023842,"ta":17.211} +{"ev":"vend","url":"audio/voice/male/retry_use.ogg","t":18285.5,"reason":"kill","ta":17.39} +{"ev":"fetch","url":"audio/voice/male/chances_out.ogg","status":200,"ok":true,"ms":3,"t":18288.20000001788,"ta":17.393} +{"ev":"vstart","url":"audio/voice/male/chances_out.ogg","t":18291.90000000596,"dur":2.24,"ta":17.397} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":18715.20000001788,"ta":17.82} +{"ev":"vibrate","pattern":"[10]","t":19073.5,"ta":18.178} +{"ev":"vibrate","pattern":"[60,40,60]","t":19073.5,"ta":18.178} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":19682.30000001192,"ta":18.787} +{"ev":"vibrate","pattern":"[10]","t":20040,"ta":19.145} +{"ev":"vibrate","pattern":"[60,40,60]","t":20040,"ta":19.145} +{"ev":"vend","url":"audio/voice/male/chances_out.ogg","t":20630.40000000596,"reason":"kill","ta":19.735} +{"ev":"vstart","url":"audio/voice/male/gd_occ_dt.ogg","t":20630.600000023842,"dur":2.08,"ta":19.735} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":20649.100000023842,"ta":19.754} +{"ev":"vibrate","pattern":"[20]","t":20896,"ta":20.001} +{"ev":"vibrate","pattern":"[60,40,60]","t":20896,"ta":20.001} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":21504.5,"ta":20.609} +{"ev":"vibrate","pattern":"[20]","t":21867.40000000596,"ta":20.972} +{"ev":"vend","url":"audio/voice/male/gd_occ_dt.ogg","t":21867.5,"reason":"kill","ta":20.972} +{"ev":"vibrate","pattern":"[8]","t":21867.600000023842,"ta":20.972} +{"ev":"start","t":21867.80000001192,"sid":5,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":20.972} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":22174.70000001788,"ta":21.279} +{"ev":"vibrate","pattern":"[10]","t":22540.70000001788,"ta":21.645} +{"ev":"vibrate","pattern":"[8]","t":22567.80000001192,"ta":21.672} +{"ev":"start","t":22568,"sid":6,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":21.673} +{"ev":"vibrate","pattern":"[20]","t":23668.20000001788,"ta":22.773} +{"ev":"start","t":23668.40000000596,"sid":7,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":22.773} +{"ev":"gesture","type":"swipeup","x":195,"y":422,"t":24545.80000001192,"ta":23.65} +{"ev":"vibrate","pattern":"[10]","t":24906.70000001788,"ta":24.011} +{"ev":"vibrate","pattern":"[15]","t":24906.90000000596,"ta":24.012} +{"ev":"fetch","url":"audio/voice/male/relisten.ogg","status":200,"ok":true,"ms":2,"t":24909.30000001192,"ta":24.014} +{"ev":"vstart","url":"audio/voice/male/relisten.ogg","t":24912.30000001192,"dur":1.2,"ta":24.017} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":25514.20000001788,"ta":24.619} +{"ev":"vibrate","pattern":"[10]","t":25873.20000001788,"ta":24.978} +{"ev":"vibrate","pattern":"[60,40,60]","t":25873.30000001192,"ta":24.978} +{"ev":"vend","url":"audio/voice/male/relisten.ogg","t":26040.100000023842,"reason":"kill","ta":25.145} +{"ev":"fetch","url":"audio/voice/male/gd_chances_left1.ogg","status":200,"ok":true,"ms":2,"t":26042.5,"ta":25.147} +{"ev":"vstart","url":"audio/voice/male/gd_chances_left1.ogg","t":26046.20000001788,"dur":2.56,"ta":25.151} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":26480.70000001788,"ta":25.585} +{"ev":"vibrate","pattern":"[10]","t":26840.100000023842,"ta":25.945} +{"ev":"vibrate","pattern":"[60,40,60]","t":26840.100000023842,"ta":25.945} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":27446.20000001788,"ta":26.551} +{"ev":"vibrate","pattern":"[20]","t":27693,"ta":26.798} +{"ev":"vibrate","pattern":"[60,40,60]","t":27693,"ta":26.798} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":28300,"ta":27.405} +{"ev":"vibrate","pattern":"[20]","t":28547,"ta":27.652} +{"ev":"vibrate","pattern":"[60,40,60]","t":28547,"ta":27.652} +{"ev":"vend","url":"audio/voice/male/gd_chances_left1.ogg","t":28756.70000001788,"reason":"kill","ta":27.861} +{"ev":"vibrate","pattern":"[8]","t":28756.80000001192,"ta":27.861} +{"ev":"start","t":28756.90000000596,"sid":8,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":27.862} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":29154.70000001788,"ta":28.259} +{"ev":"vibrate","pattern":"[8]","t":29457,"ta":28.562} +{"ev":"start","t":29457.20000001788,"sid":9,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":28.562} +{"ev":"vibrate","pattern":"[10]","t":29506.30000001192,"ta":28.611} +{"ev":"vibrate","pattern":"[20]","t":30557.30000001192,"ta":29.662} +{"ev":"start","t":30557.40000000596,"sid":10,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":29.662} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":31513.20000001788,"ta":30.618} +{"ev":"vibrate","pattern":"[10]","t":31873,"ta":30.978} +{"ev":"start","t":31873.100000023842,"sid":11,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":30.978} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":32479.80000001192,"ta":31.584} +{"ev":"vibrate","pattern":"[10]","t":32839.60000002384,"ta":31.944} +{"ev":"vibrate","pattern":"[60,40,60]","t":32839.90000000596,"ta":31.945} +{"ev":"start","t":32840,"sid":12,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":31.945} +{"ev":"vibrate","pattern":"[80]","t":33140.10000002384,"ta":32.245} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":33446.90000000596,"ta":32.551} +{"ev":"start","t":33540.20000001788,"sid":13,"url":"audio/sfx/gameover.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":32.645} +{"ev":"vibrate","pattern":"[10]","t":33806.20000001788,"ta":32.911} +{"ev":"fetch","url":"audio/bgm/menu.ogg","status":200,"ok":true,"ms":3,"t":33809.5,"ta":32.914} +{"ev":"fetch","url":"audio/voice/male/menu_open.ogg","status":200,"ok":true,"ms":4,"t":33810.40000000596,"ta":32.915} +{"ev":"vstart","url":"audio/voice/male/menu_open.ogg","t":33815.10000002384,"dur":0.7970975056689342,"ta":32.92} +{"ev":"start","t":33942,"sid":14,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":33.047} +{"ev":"vend","url":"audio/voice/male/menu_open.ogg","t":34240.10000002384,"reason":"kill","ta":33.345} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":36714.90000000596,"ta":35.82} +{"ev":"vibrate","pattern":"[10]","t":37073.20000001788,"ta":36.178} +{"ev":"fetch","url":"audio/voice/male/gameover.ogg","status":200,"ok":true,"ms":3,"t":37075.90000000596,"ta":36.181} +{"ev":"vstart","url":"audio/voice/male/gameover.ogg","t":37078.90000000596,"dur":1.12,"ta":36.184} +{"ev":"vend","url":"audio/voice/male/gameover.ogg","t":38206.40000000596,"reason":"kill","ta":37.311} +{"ev":"fetch","url":"audio/voice/male/score_band1.ogg","status":200,"ok":true,"ms":3,"t":38209,"ta":37.314} +{"ev":"vstart","url":"audio/voice/male/score_band1.ogg","t":38213.40000000596,"dur":3.12,"ta":37.318} +{"ev":"vend","url":"audio/voice/male/score_band1.ogg","t":41666,"reason":"kill","ta":40.771} +{"ev":"fetch","url":"audio/voice/male/replay.ogg","status":200,"ok":true,"ms":3,"t":41668.60000002384,"ta":40.773} +{"ev":"vstart","url":"audio/voice/male/replay.ogg","t":41673.70000001788,"dur":4.24,"ta":40.778} +{"ev":"recstop","t":44055,"ta":43.16} diff --git a/research/simon-polish/round2/live-P-transcript.md b/research/simon-polish/round2/live-P-transcript.md new file mode 100644 index 00000000..b97ef299 --- /dev/null +++ b/research/simon-polish/round2/live-P-transcript.md @@ -0,0 +1,195 @@ +# simon 实时会话 transcript + +- `[ -0.07s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.41s]` **GESTURE** tap @(195,422) +- `[ 0.50s]` VOICE ▶ t0_welcome (dur 5.04s) +- `[ 0.77s]` VIBRATE [20] +- `[ 0.77s]` VOICE ■ t0_welcome (kill) +- `[ 0.77s]` VOICE ▶ skip_hint (dur 2.32s) +- `[ 0.77s]` VERDICT t0_welcome: **TRUNCATED** sim=0 + - 期望: 欢迎来到音序回响。先认识六种声音。 + - 听到: 对。 +- `[ 0.88s]` **GESTURE** tap @(195,422) +- `[ 1.24s]` VIBRATE [20] +- `[ 1.24s]` VOICE ■ skip_hint (kill) +- `[ 1.24s]` VERDICT skip_hint: **TRUNCATED** sim=0.25 + - 期望: 单击可跳过旁白。 + - 听到: 单。 +- `[ 1.24s]` VOICE ▶ t0_goal (dur 5.84s) +- `[ 1.34s]` **GESTURE** tap @(195,422) +- `[ 1.71s]` VIBRATE [20] +- `[ 1.71s]` VOICE ■ t0_goal (kill) +- `[ 1.71s]` VERDICT t0_goal: **TRUNCATED** sim=0.1 + - 期望: 我会演奏一串声音,请你记住顺序,原样复现。 + - 听到: 嗯我。 +- `[ 1.71s]` VOICE ▶ t1_up (dur 3.12s) +- `[ 1.81s]` **GESTURE** swipedown @(195,422) +- `[ 2.16s]` VIBRATE [10] +- `[ 2.16s]` VOICE ■ t1_up (kill) +- `[ 2.16s]` VERDICT t1_up: **TRUNCATED** sim=0 + - 期望: 向上滑,是这个声音。 + - 听到: 我想。 +- `[ 2.17s]` VOICE ▶ t_skip (dur 2.48s) +- `[ 4.88s]` VOICE ■ t_skip (kill) +- `[ 4.88s]` VOICE ▶ round_01 (dur 2.64s) +- `[ 4.88s]` VERDICT t_skip: **OK** sim=0.9412 + - 期望: 跳过教学,直接开始。 + - 听到: 下跳过教学直接开始。 +- `[ 4.92s]` **GESTURE** swipeleft @(195,422) +- `[ 5.28s]` VIBRATE [10] +- `[ 5.28s]` VIBRATE [60,40,60] +- `[ 5.69s]` **GESTURE** doubletap @(195,422) +- `[ 5.93s]` VIBRATE [20] +- `[ 5.93s]` VIBRATE [60,40,60] +- `[ 6.54s]` **GESTURE** swipedown @(195,422) +- `[ 6.89s]` VIBRATE [10] +- `[ 6.89s]` VIBRATE [60,40,60] +- `[ 7.38s]` VIBRATE [8] +- `[ 7.38s]` SFX ♪ tone_left +- `[ 7.50s]` **GESTURE** swipeup @(195,422) +- `[ 7.59s]` VOICE ■ round_01 (kill) +- `[ 7.59s]` VERDICT round_01: **OK** sim=1 + - 期望: 第一轮,听好了。 + - 听到: 第一轮听好了。 +- `[ 7.86s]` VIBRATE [10] +- `[ 8.08s]` VIBRATE [8] +- `[ 8.08s]` SFX ♪ tone_doubletap +- `[ 9.18s]` VIBRATE [20] +- `[ 9.18s]` VOICE ▶ gd_occ_dt (dur 2.08s) +- `[ 9.18s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 9.87s]` **GESTURE** swipedown @(195,422) +- `[ 10.23s]` VIBRATE [10] +- `[ 10.84s]` **GESTURE** doubletap @(195,422) +- `[ 11.08s]` VIBRATE [20] +- `[ 11.52s]` VOICE ■ gd_occ_dt (kill) +- `[ 11.52s]` VERDICT gd_occ_dt: **OK** sim=1 + - 期望: 这一轮,双击是作答。 + - 听到: 这一轮双击是作答。 +- `[ 11.52s]` VOICE ▶ your_turn (dur 1.36s) +- `[ 11.69s]` **GESTURE** tap @(195,422) +- `[ 12.05s]` VIBRATE [20] +- `[ 12.36s]` **GESTURE** swipeleft @(195,422) +- `[ 12.71s]` VIBRATE [10] +- `[ 13.12s]` VOICE ■ your_turn (kill) +- `[ 13.12s]` SFX ♪ input_open +- `[ 13.12s]` VERDICT your_turn: **OK** sim=1 + - 期望: 轮到你了。 + - 听到: 轮到你了。 +- `[ 13.32s]` **GESTURE** doubletap @(195,422) +- `[ 13.57s]` VIBRATE [20] +- `[ 13.57s]` VIBRATE [60,40,60] +- `[ 13.57s]` SFX ♪ tone_doubletap +- `[ 13.57s]` VOICE ▶ retry_use (dur 3.52s) +- `[ 13.87s]` VIBRATE [30,50,30,50,30] +- `[ 14.17s]` **GESTURE** doubletap @(195,422) +- `[ 14.42s]` VIBRATE [20] +- `[ 14.42s]` VIBRATE [60,40,60] +- `[ 15.03s]` **GESTURE** doubletap @(195,422) +- `[ 15.27s]` VIBRATE [20] +- `[ 15.27s]` VIBRATE [60,40,60] +- `[ 15.88s]` **GESTURE** swipedown @(195,422) +- `[ 16.25s]` VIBRATE [10] +- `[ 16.25s]` VIBRATE [60,40,60] +- `[ 16.85s]` **GESTURE** swipeleft @(195,422) +- `[ 17.21s]` VIBRATE [10] +- `[ 17.21s]` VIBRATE [60,40,60] +- `[ 17.39s]` VOICE ■ retry_use (kill) +- `[ 17.39s]` VERDICT retry_use: **OK** sim=1 + - 期望: 错了。用一次机会,再听一遍。 + - 听到: 错了,用一次机会再听一遍。 +- `[ 17.40s]` VOICE ▶ chances_out (dur 2.24s) +- `[ 17.82s]` **GESTURE** swipeup @(195,422) +- `[ 18.18s]` VIBRATE [10] +- `[ 18.18s]` VIBRATE [60,40,60] +- `[ 18.79s]` **GESTURE** swipeleft @(195,422) +- `[ 19.14s]` VIBRATE [10] +- `[ 19.14s]` VIBRATE [60,40,60] +- `[ 19.73s]` VOICE ■ chances_out (kill) +- `[ 19.73s]` VOICE ▶ gd_occ_dt (dur 2.08s) +- `[ 19.73s]` VERDICT chances_out: **OK** sim=1 + - 期望: 重听机会用完了,小心。 + - 听到: 重听机会用完了,小心。 +- `[ 19.75s]` **GESTURE** doubletap @(195,422) +- `[ 20.00s]` VIBRATE [20] +- `[ 20.00s]` VIBRATE [60,40,60] +- `[ 20.61s]` **GESTURE** tap @(195,422) +- `[ 20.97s]` VIBRATE [20] +- `[ 20.97s]` VOICE ■ gd_occ_dt (kill) +- `[ 20.97s]` VIBRATE [8] +- `[ 20.97s]` SFX ♪ tone_left +- `[ 20.97s]` VERDICT gd_occ_dt: **TRUNCATED** sim=0.6667 + - 期望: 这一轮,双击是作答。 + - 听到: 这一轮是。 +- `[ 21.28s]` **GESTURE** swiperight @(195,422) +- `[ 21.64s]` VIBRATE [10] +- `[ 21.67s]` VIBRATE [8] +- `[ 21.67s]` SFX ♪ tone_doubletap +- `[ 22.77s]` VIBRATE [20] +- `[ 22.77s]` SFX ♪ input_open +- `[ 23.65s]` **GESTURE** swipeup @(195,422) +- `[ 24.01s]` VIBRATE [10] +- `[ 24.01s]` VIBRATE [15] +- `[ 24.02s]` VOICE ▶ relisten (dur 1.2s) +- `[ 24.02s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 24.62s]` **GESTURE** swiperight @(195,422) +- `[ 24.98s]` VIBRATE [10] +- `[ 24.98s]` VIBRATE [60,40,60] +- `[ 25.14s]` VOICE ■ relisten (kill) +- `[ 25.14s]` VERDICT relisten: **OK** sim=1 + - 期望: 再听一遍。 + - 听到: 再听一遍。 +- `[ 25.15s]` VOICE ▶ gd_chances_left1 (dur 2.56s) +- `[ 25.59s]` **GESTURE** swiperight @(195,422) +- `[ 25.95s]` VIBRATE [10] +- `[ 25.95s]` VIBRATE [60,40,60] +- `[ 26.55s]` **GESTURE** doubletap @(195,422) +- `[ 26.80s]` VIBRATE [20] +- `[ 26.80s]` VIBRATE [60,40,60] +- `[ 27.41s]` **GESTURE** doubletap @(195,422) +- `[ 27.65s]` VIBRATE [20] +- `[ 27.65s]` VIBRATE [60,40,60] +- `[ 27.86s]` VOICE ■ gd_chances_left1 (kill) +- `[ 27.86s]` VIBRATE [8] +- `[ 27.86s]` VERDICT gd_chances_left1: **OK** sim=0.8889 + - 期望: 免费重听还剩一次。 + - 听到: 一边免费重听还剩一次。 +- `[ 27.86s]` SFX ♪ tone_left +- `[ 28.26s]` **GESTURE** swipeleft @(195,422) +- `[ 28.56s]` VIBRATE [8] +- `[ 28.56s]` SFX ♪ tone_doubletap +- `[ 28.61s]` VIBRATE [10] +- `[ 29.66s]` VIBRATE [20] +- `[ 29.66s]` SFX ♪ input_open +- `[ 30.62s]` **GESTURE** swipeleft @(195,422) +- `[ 30.98s]` VIBRATE [10] +- `[ 30.98s]` SFX ♪ tone_left +- `[ 31.58s]` **GESTURE** swiperight @(195,422) +- `[ 31.94s]` VIBRATE [10] +- `[ 31.95s]` VIBRATE [60,40,60] +- `[ 31.95s]` SFX ♪ tone_right +- `[ 32.24s]` VIBRATE [80] +- `[ 32.55s]` **GESTURE** swipedown @(195,422) +- `[ 32.65s]` SFX ♪ gameover +- `[ 32.91s]` VIBRATE [10] +- `[ 32.92s]` VOICE ▶ menu_open (dur 0.7970975056689342s) +- `[ 32.92s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 33.05s]` BGM ♪ menu (loop) +- `[ 33.34s]` VOICE ■ menu_open (kill) +- `[ 33.34s]` VERDICT menu_open: **TRUNCATED** sim=0 + - 期望: 菜单。 + - 听到: 操。 +- `[ 35.82s]` **GESTURE** swipedown @(195,422) +- `[ 36.18s]` VIBRATE [10] +- `[ 36.18s]` VOICE ▶ gameover (dur 1.12s) +- `[ 36.18s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 37.31s]` VOICE ■ gameover (kill) +- `[ 37.31s]` VERDICT gameover: **OK** sim=0.6667 + - 期望: 游戏结束。 + - 听到: 游戏。 +- `[ 37.32s]` VOICE ▶ score_band1 (dur 3.12s) +- `[ 40.77s]` VOICE ■ score_band1 (kill) +- `[ 40.77s]` VERDICT score_band1: **OK** sim=1 + - 期望: 一轮都没坚持下来。别灰心。 + - 听到: 一轮都没坚持下来,别灰心。 +- `[ 40.78s]` VOICE ▶ replay (dur 4.24s) diff --git a/research/simon-polish/round2/live-P-verdicts.json b/research/simon-polish/round2/live-P-verdicts.json new file mode 100644 index 00000000..dcaf44cb --- /dev/null +++ b/research/simon-polish/round2/live-P-verdicts.json @@ -0,0 +1,415 @@ +{ + "game": "simon", + "settings": { + "voice": "male", + "guide": "full", + "speed": 1, + "bgm": 1 + }, + "outdir": "/home/xsl/AutoVideo/SoundGame/web/harness/live/out/simon-20260914120934", + "segs": [ + { + "idx": 0, + "voiceId": "t0_welcome", + "t0": 0.502, + "t1": 0.772, + "dur": 5.04, + "expEnd": 5.542, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "对。", + "similarity": 0 + }, + { + "idx": 1, + "voiceId": "skip_hint", + "t0": 0.772, + "t1": 1.238, + "dur": 2.32, + "expEnd": 3.092, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "单。", + "similarity": 0.25 + }, + { + "idx": 2, + "voiceId": "t0_goal", + "t0": 1.239, + "t1": 1.707, + "dur": 5.84, + "expEnd": 7.079, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "嗯我。", + "similarity": 0.1 + }, + { + "idx": 3, + "voiceId": "t1_up", + "t0": 1.714, + "t1": 2.163, + "dur": 3.12, + "expEnd": 4.834, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "我想。", + "similarity": 0 + }, + { + "idx": 4, + "voiceId": "t_skip", + "t0": 2.168, + "t1": 4.876, + "dur": 2.48, + "expEnd": 4.648, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "下跳过教学直接开始。", + "similarity": 0.9412 + }, + { + "idx": 5, + "voiceId": "round_01", + "t0": 4.876, + "t1": 7.592, + "dur": 2.64, + "expEnd": 7.516, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "第一轮听好了。", + "similarity": 1 + }, + { + "idx": 6, + "voiceId": "gd_occ_dt", + "t0": 9.184, + "t1": 11.516, + "dur": 2.08, + "expEnd": 11.264, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "这一轮双击是作答。", + "similarity": 1 + }, + { + "idx": 7, + "voiceId": "your_turn", + "t0": 11.521, + "t1": 13.118, + "dur": 1.36, + "expEnd": 12.881, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "轮到你了。", + "similarity": 1 + }, + { + "idx": 8, + "voiceId": "retry_use", + "t0": 13.572, + "t1": 17.39, + "dur": 3.52, + "expEnd": 17.092, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "错了,用一次机会再听一遍。", + "similarity": 1 + }, + { + "idx": 9, + "voiceId": "chances_out", + "t0": 17.397, + "t1": 19.735, + "dur": 2.24, + "expEnd": 19.637, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "重听机会用完了,小心。", + "similarity": 1 + }, + { + "idx": 10, + "voiceId": "gd_occ_dt", + "t0": 19.735, + "t1": 20.972, + "dur": 2.08, + "expEnd": 21.815, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "这一轮是。", + "similarity": 0.6667 + }, + { + "idx": 11, + "voiceId": "relisten", + "t0": 24.017, + "t1": 25.145, + "dur": 1.2, + "expEnd": 25.217, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "再听一遍。", + "similarity": 1 + }, + { + "idx": 12, + "voiceId": "gd_chances_left1", + "t0": 25.151, + "t1": 27.861, + "dur": 2.56, + "expEnd": 27.711, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "一边免费重听还剩一次。", + "similarity": 0.8889 + }, + { + "idx": 13, + "voiceId": "menu_open", + "t0": 32.92, + "t1": 33.345, + "dur": 0.7970975056689342, + "expEnd": 33.717, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "操。", + "similarity": 0 + }, + { + "idx": 14, + "voiceId": "gameover", + "t0": 36.184, + "t1": 37.311, + "dur": 1.12, + "expEnd": 37.304, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "游戏。", + "similarity": 0.6667 + }, + { + "idx": 15, + "voiceId": "score_band1", + "t0": 37.318, + "t1": 40.771, + "dur": 3.12, + "expEnd": 40.438, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "一轮都没坚持下来,别灰心。", + "similarity": 1 + }, + { + "idx": 16, + "voiceId": "replay", + "t0": 40.778, + "t1": 41.041, + "dur": 4.24, + "expEnd": 45.018, + "truncated": true, + "reason": "session-end", + "verdict": null, + "heard": null, + "similarity": null + } + ], + "rows": [ + { + "t0": 0.502, + "t1": 0.772, + "voiceId": "t0_welcome", + "expected": "欢迎来到音序回响。先认识六种声音。", + "heard": "对。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 0.772, + "t1": 1.238, + "voiceId": "skip_hint", + "expected": "单击可跳过旁白。", + "heard": "单。", + "similarity": 0.25, + "verdict": "TRUNCATED" + }, + { + "t0": 1.239, + "t1": 1.707, + "voiceId": "t0_goal", + "expected": "我会演奏一串声音,请你记住顺序,原样复现。", + "heard": "嗯我。", + "similarity": 0.1, + "verdict": "TRUNCATED" + }, + { + "t0": 1.714, + "t1": 2.163, + "voiceId": "t1_up", + "expected": "向上滑,是这个声音。", + "heard": "我想。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 2.168, + "t1": 4.876, + "voiceId": "t_skip", + "expected": "跳过教学,直接开始。", + "heard": "下跳过教学直接开始。", + "similarity": 0.9412, + "verdict": "OK" + }, + { + "t0": 4.876, + "t1": 7.592, + "voiceId": "round_01", + "expected": "第一轮,听好了。", + "heard": "第一轮听好了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 9.184, + "t1": 11.516, + "voiceId": "gd_occ_dt", + "expected": "这一轮,双击是作答。", + "heard": "这一轮双击是作答。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 11.521, + "t1": 13.118, + "voiceId": "your_turn", + "expected": "轮到你了。", + "heard": "轮到你了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 13.572, + "t1": 17.39, + "voiceId": "retry_use", + "expected": "错了。用一次机会,再听一遍。", + "heard": "错了,用一次机会再听一遍。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 17.397, + "t1": 19.735, + "voiceId": "chances_out", + "expected": "重听机会用完了,小心。", + "heard": "重听机会用完了,小心。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 19.735, + "t1": 20.972, + "voiceId": "gd_occ_dt", + "expected": "这一轮,双击是作答。", + "heard": "这一轮是。", + "similarity": 0.6667, + "verdict": "TRUNCATED" + }, + { + "t0": 24.017, + "t1": 25.145, + "voiceId": "relisten", + "expected": "再听一遍。", + "heard": "再听一遍。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 25.151, + "t1": 27.861, + "voiceId": "gd_chances_left1", + "expected": "免费重听还剩一次。", + "heard": "一边免费重听还剩一次。", + "similarity": 0.8889, + "verdict": "OK" + }, + { + "t0": 32.92, + "t1": 33.345, + "voiceId": "menu_open", + "expected": "菜单。", + "heard": "操。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 36.184, + "t1": 37.311, + "voiceId": "gameover", + "expected": "游戏结束。", + "heard": "游戏。", + "similarity": 0.6667, + "verdict": "OK" + }, + { + "t0": 7.592, + "t1": 9.184, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 20.972, + "t1": 24.017, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 27.861, + "t1": 32.92, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 33.345, + "t1": 36.184, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 37.318, + "t1": 40.771, + "voiceId": "score_band1", + "expected": "一轮都没坚持下来。别灰心。", + "heard": "一轮都没坚持下来,别灰心。", + "similarity": 1, + "verdict": "OK" + } + ] +} \ No newline at end of file diff --git a/research/simon-polish/round2/live-V-driver.log b/research/simon-polish/round2/live-V-driver.log new file mode 100644 index 00000000..84913444 --- /dev/null +++ b/research/simon-polish/round2/live-V-driver.log @@ -0,0 +1,53 @@ +== 局 V(修后核对局,female/normal/guide full) + [我] 解锁 → tap + [我] 教学讲解期乱滑 → swipeleft + ✓ 教学讲解期维持静默忽略(S5 不扩面,负例锁定) + [我] 跳教学 → swipedown + [debug-collect] input_open ta=10.243 seq=right doubletap +-- 第 1 轮:right doubletap + ✓ S2:第 1 轮边界 input_open 到达 + ✓ S7:首次开放 your_turn 一遍 + [debug-collect] input_open ta=20.657 seq=right doubletap + ✓ S2:复活重播回 input 有 input_open 标记 + ✓ S7:复活重播不重念 your_turn + [debug-collect] input_open ta=27.734 seq=right doubletap right +-- 第 2 轮:right doubletap right + ✓ S2:input_open 标记到达(无链轮(占用被第 1 轮封顶抑制)) + [我] 轮次播报期乱滑 → swipeleft + [我] 再滑一下 → swiperight + ✓ S5:announce 播报期误触有 error 震 + [我] 跳播报 → tap + [debug-collect] input_open ta=37.173 seq=right doubletap right right +-- 第 3 轮:right doubletap right right + [debug-collect] input_open ta=46.955 seq=right doubletap right right tap +-- 第 4 轮(5 音):right doubletap right right tap + [我] 长按问状态 → longpress + ✓ S1/S3/S4:查询三档整句(status_len_mid, status_prog_start, status_free2) + ✓ S1:长度档与真实长度一致(status_len_mid) + ✓ S3:进度档 start(尚未作答) + ✓ S4:账目档 free2(免费两次未用) + [debug-collect] input_open ta=65.685 seq=doubletap right right tap left +-- 第 5 轮(5 音):doubletap right right tap left + [我] 故意答错(第 1 次) → swipedown + [debug-collect] input_open ta=76.56 seq=doubletap right right tap left + [我] 故意答错(第 2 次) → swipedown + [我] 死亡瞬间下滑进菜单 → swipedown + ✓ S6 前提:进菜单前结算链未开播 + ✓ S6:菜单内不交付结算链 + [我] 关菜单回结算页 → swipedown + ✓ S6:回结算页补播结算链(gameover, score_band3) +== 局 V 结束 +ASR 判定行 37,非 OK 13 + [TRUNCATED] t0_welcome sim=0.5 heard=欢迎来到音。 + [TRUNCATED] menu_open sim=0 heard=嗯。 + [MISMATCH] gameover sim=0.3333 heard=有戏。 + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= + [SFX_BGM_ONLY] null sim=null heard= +落盘: /home/xsl/AutoVideo/SoundGame/web/harness/live/out/simon-20260914120121(28 语音段 / 37 判定行) + +验证断言:通过 14,失败 0 diff --git a/research/simon-polish/round2/live-V-events.jsonl b/research/simon-polish/round2/live-V-events.jsonl new file mode 100644 index 00000000..4ccb712a --- /dev/null +++ b/research/simon-polish/round2/live-V-events.jsonl @@ -0,0 +1,250 @@ +{"ev":"probe_ready","t":9,"ta":null} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":822.4000000059605,"ta":-0.086} +{"ev":"recstart","mime":"audio/webm;codecs=opus","t":908.1999999880791,"ta":0} +{"ev":"fetch","url":"audio/sfx/tone_up.ogg","status":200,"ok":true,"ms":15,"t":923.0999999940395,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_down.ogg","status":200,"ok":true,"ms":14,"t":923.3000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_left.ogg","status":200,"ok":true,"ms":14,"t":923.3000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_right.ogg","status":200,"ok":true,"ms":14,"t":923.3000000119209,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_tap.ogg","status":200,"ok":true,"ms":15,"t":923.4000000059605,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/tone_doubletap.ogg","status":200,"ok":true,"ms":15,"t":923.5,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/gameover.ogg","status":200,"ok":true,"ms":15,"t":923.5999999940395,"ta":0.015} +{"ev":"fetch","url":"audio/sfx/input_open.ogg","status":200,"ok":true,"ms":15,"t":923.5999999940395,"ta":0.015} +{"ev":"fetch","url":"audio/voice/female/t0_welcome.ogg","status":200,"ok":true,"ms":15,"t":923.6999999880791,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/t0_goal.ogg","status":200,"ok":true,"ms":15,"t":923.6999999880791,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/skip_hint.ogg","status":200,"ok":true,"ms":14,"t":923.6999999880791,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/t_try.ogg","status":200,"ok":true,"ms":14,"t":923.6999999880791,"ta":0.016} +{"ev":"fetch","url":"audio/voice/female/round_01.ogg","status":200,"ok":true,"ms":18,"t":927.6999999880791,"ta":0.02} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":1314.5999999940395,"ta":0.406} +{"ev":"vstart","url":"audio/voice/female/t0_welcome.ogg","t":1410.4000000059605,"dur":4.24,"ta":0.502} +{"ev":"vibrate","pattern":"[10]","t":1670.800000011921,"ta":0.763} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":2376.0999999940395,"ta":1.468} +{"ev":"vibrate","pattern":"[10]","t":2737,"ta":1.829} +{"ev":"vend","url":"audio/voice/female/t0_welcome.ogg","t":2737.199999988079,"reason":"kill","ta":1.829} +{"ev":"fetch","url":"audio/voice/female/t_skip.ogg","status":200,"ok":true,"ms":2,"t":2739.5999999940395,"ta":1.831} +{"ev":"vstart","url":"audio/voice/female/t_skip.ogg","t":2743.5999999940395,"dur":2.24,"ta":1.835} +{"ev":"vend","url":"audio/voice/female/t_skip.ogg","t":5091,"reason":"kill","ta":4.183} +{"ev":"vstart","url":"audio/voice/female/round_01.ogg","t":5091.300000011921,"dur":1.52,"ta":4.183} +{"ev":"vend","url":"audio/voice/female/round_01.ogg","t":6692.9000000059605,"reason":"kill","ta":5.785} +{"ev":"vibrate","pattern":"[8]","t":6693.199999988079,"ta":5.785} +{"ev":"start","t":6693.300000011921,"sid":1,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":5.785} +{"ev":"vibrate","pattern":"[8]","t":7393.300000011921,"ta":6.485} +{"ev":"start","t":7393.5,"sid":2,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":6.485} +{"ev":"vibrate","pattern":"[20]","t":8493.800000011921,"ta":7.586} +{"ev":"fetch","url":"audio/voice/female/gd_occ_dt.ogg","status":200,"ok":true,"ms":3,"t":8497.90000000596,"ta":7.59} +{"ev":"vstart","url":"audio/voice/female/gd_occ_dt.ogg","t":8501.199999988079,"dur":1.68,"ta":7.593} +{"ev":"vend","url":"audio/voice/female/gd_occ_dt.ogg","t":10384.40000000596,"reason":"kill","ta":9.476} +{"ev":"fetch","url":"audio/voice/female/your_turn.ogg","status":200,"ok":true,"ms":3,"t":10386.90000000596,"ta":9.479} +{"ev":"vstart","url":"audio/voice/female/your_turn.ogg","t":10389,"dur":0.7970975056689342,"ta":9.481} +{"ev":"vend","url":"audio/voice/female/your_turn.ogg","t":11150.40000000596,"reason":"kill","ta":10.242} +{"ev":"start","t":11150.800000011921,"sid":3,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":10.243} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":11859.09999999404,"ta":10.951} +{"ev":"vibrate","pattern":"[10]","t":12220.09999999404,"ta":11.312} +{"ev":"start","t":12220.300000011921,"sid":4,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":11.312} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":12925.40000000596,"ta":12.017} +{"ev":"vibrate","pattern":"[10]","t":13286.59999999404,"ta":12.378} +{"ev":"vibrate","pattern":"[60,40,60]","t":13286.699999988079,"ta":12.379} +{"ev":"start","t":13287.09999999404,"sid":5,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":12.379} +{"ev":"fetch","url":"audio/voice/female/retry_use.ogg","status":200,"ok":true,"ms":2,"t":13289.199999988079,"ta":12.381} +{"ev":"vstart","url":"audio/voice/female/retry_use.ogg","t":13293.09999999404,"dur":2.64,"ta":12.385} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":13586.90000000596,"ta":12.679} +{"ev":"vend","url":"audio/voice/female/retry_use.ogg","t":16003,"reason":"kill","ta":15.095} +{"ev":"fetch","url":"audio/voice/female/chances_out.ogg","status":200,"ok":true,"ms":3,"t":16005.800000011921,"ta":15.098} +{"ev":"vstart","url":"audio/voice/female/chances_out.ogg","t":16008.699999988079,"dur":1.76,"ta":15.101} +{"ev":"vend","url":"audio/voice/female/chances_out.ogg","t":17883.80000001192,"reason":"kill","ta":16.976} +{"ev":"vstart","url":"audio/voice/female/gd_occ_dt.ogg","t":17883.90000000596,"dur":1.68,"ta":16.976} +{"ev":"vend","url":"audio/voice/female/gd_occ_dt.ogg","t":19764.5,"reason":"kill","ta":18.856} +{"ev":"vibrate","pattern":"[8]","t":19764.5,"ta":18.856} +{"ev":"start","t":19764.69999998808,"sid":6,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":18.857} +{"ev":"vibrate","pattern":"[8]","t":20464.69999998808,"ta":19.557} +{"ev":"start","t":20464.80000001192,"sid":7,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":19.557} +{"ev":"vibrate","pattern":"[20]","t":21565,"ta":20.657} +{"ev":"start","t":21565.19999998808,"sid":8,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":20.657} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":22279.69999998808,"ta":21.372} +{"ev":"vibrate","pattern":"[10]","t":22635.80000001192,"ta":21.728} +{"ev":"start","t":22636,"sid":9,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":21.728} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":23290.5,"ta":22.382} +{"ev":"vibrate","pattern":"[20]","t":23537,"ta":22.629} +{"ev":"vibrate","pattern":"[100]","t":23537.09999999404,"ta":22.629} +{"ev":"start","t":23537.5,"sid":10,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":22.629} +{"ev":"fetch","url":"audio/voice/female/correct.ogg","status":200,"ok":true,"ms":3,"t":23540.09999999404,"ta":22.632} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":23543,"dur":0.6370975056689342,"ta":22.635} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":24315.19999998808,"reason":"kill","ta":23.407} +{"ev":"fetch","url":"audio/voice/female/round_02.ogg","status":200,"ok":true,"ms":3,"t":24618,"ta":23.71} +{"ev":"vstart","url":"audio/voice/female/round_02.ogg","t":24620.40000000596,"dur":1.44,"ta":23.712} +{"ev":"vend","url":"audio/voice/female/round_02.ogg","t":26219.09999999404,"reason":"kill","ta":25.311} +{"ev":"vibrate","pattern":"[8]","t":26219.19999998808,"ta":25.311} +{"ev":"start","t":26219.19999998808,"sid":11,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":25.311} +{"ev":"vibrate","pattern":"[8]","t":26893.30000001192,"ta":25.985} +{"ev":"start","t":26893.5,"sid":12,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":25.985} +{"ev":"vibrate","pattern":"[8]","t":27567.5,"ta":26.659} +{"ev":"start","t":27567.69999998808,"sid":13,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":26.66} +{"ev":"vibrate","pattern":"[20]","t":28641.80000001192,"ta":27.734} +{"ev":"start","t":28642,"sid":14,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":27.734} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":28752.69999998808,"ta":27.845} +{"ev":"vibrate","pattern":"[10]","t":29102.09999999404,"ta":28.194} +{"ev":"start","t":29102.30000001192,"sid":15,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":28.194} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":29757.90000000596,"ta":28.85} +{"ev":"vibrate","pattern":"[20]","t":30004.09999999404,"ta":29.096} +{"ev":"start","t":30004.09999999404,"sid":16,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":29.096} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":30659.90000000596,"ta":29.752} +{"ev":"vibrate","pattern":"[10]","t":31018.69999998808,"ta":30.111} +{"ev":"vibrate","pattern":"[100]","t":31018.80000001192,"ta":30.111} +{"ev":"start","t":31019,"sid":17,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":30.111} +{"ev":"fetch","url":"audio/voice/female/gd_clear.ogg","status":200,"ok":true,"ms":2,"t":31021,"ta":30.113} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":31024.30000001192,"dur":1.84,"ta":30.116} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":32905.80000001192,"reason":"kill","ta":31.998} +{"ev":"fetch","url":"audio/voice/female/round_03.ogg","status":200,"ok":true,"ms":2,"t":33208.30000001192,"ta":32.3} +{"ev":"vstart","url":"audio/voice/female/round_03.ogg","t":33210.80000001192,"dur":1.68,"ta":32.303} +{"ev":"gesture","type":"swipeleft","x":195,"y":422,"t":33278.59999999404,"ta":32.37} +{"ev":"vibrate","pattern":"[10]","t":33635.59999999404,"ta":32.727} +{"ev":"vibrate","pattern":"[60,40,60]","t":33635.59999999404,"ta":32.727} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":34039.19999998808,"ta":33.131} +{"ev":"vibrate","pattern":"[10]","t":34402.30000001192,"ta":33.494} +{"ev":"vibrate","pattern":"[60,40,60]","t":34402.40000000596,"ta":33.494} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":34810,"ta":33.902} +{"ev":"vend","url":"audio/voice/female/round_03.ogg","t":35088.09999999404,"reason":"kill","ta":34.18} +{"ev":"vibrate","pattern":"[8]","t":35088.19999998808,"ta":34.18} +{"ev":"start","t":35088.30000001192,"sid":18,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":34.18} +{"ev":"vibrate","pattern":"[20]","t":35173.30000001192,"ta":34.265} +{"ev":"vibrate","pattern":"[8]","t":35736.40000000596,"ta":34.828} +{"ev":"start","t":35736.59999999404,"sid":19,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":34.828} +{"ev":"vibrate","pattern":"[8]","t":36384.5,"ta":35.476} +{"ev":"start","t":36384.69999998808,"sid":20,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":35.477} +{"ev":"vibrate","pattern":"[8]","t":37032.69999998808,"ta":36.125} +{"ev":"start","t":37032.80000001192,"sid":21,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":36.125} +{"ev":"vibrate","pattern":"[20]","t":38081.09999999404,"ta":37.173} +{"ev":"start","t":38081.19999998808,"sid":22,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":37.173} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":38110.09999999404,"ta":37.202} +{"ev":"vibrate","pattern":"[10]","t":38469.09999999404,"ta":37.561} +{"ev":"start","t":38469.30000001192,"sid":23,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":37.561} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":39124.59999999404,"ta":38.216} +{"ev":"vibrate","pattern":"[20]","t":39373.19999998808,"ta":38.465} +{"ev":"start","t":39373.30000001192,"sid":24,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":38.465} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":40028.30000001192,"ta":39.12} +{"ev":"vibrate","pattern":"[10]","t":40385.5,"ta":39.477} +{"ev":"start","t":40385.59999999404,"sid":25,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":39.477} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":41040.80000001192,"ta":40.133} +{"ev":"vibrate","pattern":"[10]","t":41402.09999999404,"ta":40.494} +{"ev":"vibrate","pattern":"[100]","t":41402.19999998808,"ta":40.494} +{"ev":"start","t":41402.30000001192,"sid":26,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":40.494} +{"ev":"vstart","url":"audio/voice/female/correct.ogg","t":41402.30000001192,"dur":0.6370975056689342,"ta":40.494} +{"ev":"vend","url":"audio/voice/female/correct.ogg","t":42169.80000001192,"reason":"kill","ta":41.262} +{"ev":"fetch","url":"audio/voice/female/round_04.ogg","status":200,"ok":true,"ms":3,"t":42472.90000000596,"ta":41.565} +{"ev":"vstart","url":"audio/voice/female/round_04.ogg","t":42476.69999998808,"dur":1.84,"ta":41.569} +{"ev":"vend","url":"audio/voice/female/round_04.ogg","t":44352.19999998808,"reason":"kill","ta":43.444} +{"ev":"vibrate","pattern":"[8]","t":44352.19999998808,"ta":43.444} +{"ev":"start","t":44352.30000001192,"sid":27,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":43.444} +{"ev":"vibrate","pattern":"[8]","t":44974.30000001192,"ta":44.066} +{"ev":"start","t":44974.40000000596,"sid":28,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":44.066} +{"ev":"vibrate","pattern":"[8]","t":45596.69999998808,"ta":44.689} +{"ev":"start","t":45596.80000001192,"sid":29,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":44.689} +{"ev":"vibrate","pattern":"[8]","t":46218.90000000596,"ta":45.311} +{"ev":"start","t":46218.90000000596,"sid":30,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":45.311} +{"ev":"vibrate","pattern":"[8]","t":46841,"ta":45.933} +{"ev":"start","t":46841.09999999404,"sid":31,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":45.933} +{"ev":"vibrate","pattern":"[20]","t":47863.30000001192,"ta":46.955} +{"ev":"start","t":47863.40000000596,"sid":32,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":46.955} +{"ev":"gesture","type":"longpress","x":195,"y":422,"t":47972.5,"ta":47.064} +{"ev":"boost","on":true,"t":48425.19999998808,"ta":47.517} +{"ev":"vibrate","pattern":"[20]","t":48425.19999998808,"ta":47.517} +{"ev":"fetch","url":"audio/voice/female/status_len_mid.ogg","status":200,"ok":true,"ms":3,"t":48427.90000000596,"ta":47.52} +{"ev":"vstart","url":"audio/voice/female/status_len_mid.ogg","t":48431.59999999404,"dur":1.68,"ta":47.523} +{"ev":"boost","on":false,"t":48576.09999999404,"ta":47.668} +{"ev":"vend","url":"audio/voice/female/status_len_mid.ogg","t":50319.5,"reason":"kill","ta":49.411} +{"ev":"fetch","url":"audio/voice/female/status_prog_start.ogg","status":200,"ok":true,"ms":3,"t":50322.90000000596,"ta":49.415} +{"ev":"vstart","url":"audio/voice/female/status_prog_start.ogg","t":50327.30000001192,"dur":1.6,"ta":49.419} +{"ev":"vend","url":"audio/voice/female/status_prog_start.ogg","t":51921.19999998808,"reason":"kill","ta":51.013} +{"ev":"fetch","url":"audio/voice/female/status_free2.ogg","status":200,"ok":true,"ms":2,"t":51923.69999998808,"ta":51.016} +{"ev":"vstart","url":"audio/voice/female/status_free2.ogg","t":51926.69999998808,"dur":1.6,"ta":51.019} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":52031.80000001192,"ta":51.124} +{"ev":"vibrate","pattern":"[10]","t":52385.40000000596,"ta":51.477} +{"ev":"start","t":52385.5,"sid":33,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":51.477} +{"ev":"gesture","type":"doubletap","x":195,"y":422,"t":53039.90000000596,"ta":52.132} +{"ev":"vibrate","pattern":"[20]","t":53286.5,"ta":52.378} +{"ev":"start","t":53286.59999999404,"sid":34,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":52.378} +{"ev":"vend","url":"audio/voice/female/status_free2.ogg","t":53523.30000001192,"reason":"kill","ta":52.615} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":53940.09999999404,"ta":53.032} +{"ev":"vibrate","pattern":"[10]","t":54301.40000000596,"ta":53.393} +{"ev":"start","t":54301.59999999404,"sid":35,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":53.393} +{"ev":"gesture","type":"swiperight","x":195,"y":422,"t":54956.80000001192,"ta":54.049} +{"ev":"vibrate","pattern":"[10]","t":55318.09999999404,"ta":54.41} +{"ev":"start","t":55318.19999998808,"sid":36,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":54.41} +{"ev":"gesture","type":"tap","x":195,"y":422,"t":55973.09999999404,"ta":55.065} +{"ev":"vibrate","pattern":"[20]","t":56336.19999998808,"ta":55.428} +{"ev":"vibrate","pattern":"[100]","t":56336.19999998808,"ta":55.428} +{"ev":"vibrate","pattern":"[15]","t":56336.19999998808,"ta":55.428} +{"ev":"start","t":56336.30000001192,"sid":37,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":55.428} +{"ev":"vstart","url":"audio/voice/female/gd_clear.ogg","t":56336.5,"dur":1.84,"ta":55.428} +{"ev":"vend","url":"audio/voice/female/gd_clear.ogg","t":58213.30000001192,"reason":"kill","ta":57.305} +{"ev":"fetch","url":"audio/voice/female/chance_plus.ogg","status":200,"ok":true,"ms":3,"t":58216.09999999404,"ta":57.308} +{"ev":"vstart","url":"audio/voice/female/chance_plus.ogg","t":58218.90000000596,"dur":1.44,"ta":57.311} +{"ev":"vend","url":"audio/voice/female/chance_plus.ogg","t":59815.40000000596,"reason":"kill","ta":58.907} +{"ev":"fetch","url":"audio/voice/female/round_05.ogg","status":200,"ok":true,"ms":2,"t":60118,"ta":59.21} +{"ev":"vstart","url":"audio/voice/female/round_05.ogg","t":60122.19999998808,"dur":2.96,"ta":59.214} +{"ev":"vibrate","pattern":"[8]","t":62616,"ta":61.708} +{"ev":"start","t":62616.09999999404,"sid":38,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":61.708} +{"ev":"vend","url":"audio/voice/female/round_05.ogg","t":63112.5,"reason":"kill","ta":62.204} +{"ev":"vibrate","pattern":"[8]","t":63212.19999998808,"ta":62.304} +{"ev":"start","t":63212.30000001192,"sid":39,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":62.304} +{"ev":"vibrate","pattern":"[8]","t":63808.30000001192,"ta":62.9} +{"ev":"start","t":63808.5,"sid":40,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":62.9} +{"ev":"vibrate","pattern":"[8]","t":64404.59999999404,"ta":63.496} +{"ev":"start","t":64404.69999998808,"sid":41,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":63.497} +{"ev":"vibrate","pattern":"[8]","t":65000.69999998808,"ta":64.093} +{"ev":"start","t":65000.90000000596,"sid":42,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":64.093} +{"ev":"vibrate","pattern":"[8]","t":65596.90000000596,"ta":64.689} +{"ev":"start","t":65597,"sid":43,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":64.689} +{"ev":"vibrate","pattern":"[20]","t":66593.19999998808,"ta":65.685} +{"ev":"start","t":66593.40000000596,"sid":44,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":65.685} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":66664.59999999404,"ta":65.756} +{"ev":"vibrate","pattern":"[10]","t":67017.80000001192,"ta":66.11} +{"ev":"vibrate","pattern":"[60,40,60]","t":67017.90000000596,"ta":66.11} +{"ev":"start","t":67018.09999999404,"sid":45,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":66.11} +{"ev":"vstart","url":"audio/voice/female/retry_use.ogg","t":67018.09999999404,"dur":2.64,"ta":66.11} +{"ev":"vibrate","pattern":"[30,50,30,50,30]","t":67318,"ta":66.41} +{"ev":"vend","url":"audio/voice/female/retry_use.ogg","t":69729.5,"reason":"kill","ta":68.821} +{"ev":"vstart","url":"audio/voice/female/chances_out.ogg","t":69729.59999999404,"dur":1.76,"ta":68.821} +{"ev":"vend","url":"audio/voice/female/chances_out.ogg","t":71610.19999998808,"reason":"kill","ta":70.702} +{"ev":"vstart","url":"audio/voice/female/gd_occ_dt.ogg","t":71610.19999998808,"dur":1.68,"ta":70.702} +{"ev":"vend","url":"audio/voice/female/gd_occ_dt.ogg","t":73490.80000001192,"reason":"kill","ta":72.583} +{"ev":"vibrate","pattern":"[8]","t":73490.90000000596,"ta":72.583} +{"ev":"start","t":73491,"sid":46,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":72.583} +{"ev":"vibrate","pattern":"[8]","t":74087,"ta":73.179} +{"ev":"start","t":74087.09999999404,"sid":47,"url":"audio/sfx/tone_doubletap.ogg","layer":"sfx","dur":0.34829931972789113,"rate":1,"loop":false,"when":0,"ta":73.179} +{"ev":"vibrate","pattern":"[8]","t":74683.19999998808,"ta":73.775} +{"ev":"start","t":74683.40000000596,"sid":48,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":73.775} +{"ev":"vibrate","pattern":"[8]","t":75279.40000000596,"ta":74.371} +{"ev":"start","t":75279.5,"sid":49,"url":"audio/sfx/tone_right.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":74.371} +{"ev":"vibrate","pattern":"[8]","t":75875.59999999404,"ta":74.967} +{"ev":"start","t":75875.69999998808,"sid":50,"url":"audio/sfx/tone_tap.ogg","layer":"sfx","dur":0.17709750566893423,"rate":1,"loop":false,"when":0,"ta":74.968} +{"ev":"vibrate","pattern":"[8]","t":76471.80000001192,"ta":75.564} +{"ev":"start","t":76471.90000000596,"sid":51,"url":"audio/sfx/tone_left.ogg","layer":"sfx","dur":0.39709750566893426,"rate":1,"loop":false,"when":0,"ta":75.564} +{"ev":"vibrate","pattern":"[20]","t":77468.19999998808,"ta":76.56} +{"ev":"start","t":77468.40000000596,"sid":52,"url":"audio/sfx/input_open.ogg","layer":"sfx","dur":0.37709750566893424,"rate":1,"loop":false,"when":0,"ta":76.56} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":77518.09999999404,"ta":76.61} +{"ev":"vibrate","pattern":"[10]","t":77883.90000000596,"ta":76.976} +{"ev":"vibrate","pattern":"[60,40,60]","t":77884.19999998808,"ta":76.976} +{"ev":"start","t":77884.30000001192,"sid":53,"url":"audio/sfx/tone_down.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":76.976} +{"ev":"vibrate","pattern":"[80]","t":78184.40000000596,"ta":77.276} +{"ev":"start","t":78584.5,"sid":54,"url":"audio/sfx/gameover.ogg","layer":"sfx","dur":0.9370975056689342,"rate":1,"loop":false,"when":0,"ta":77.676} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":78889.90000000596,"ta":77.982} +{"ev":"vibrate","pattern":"[10]","t":79249.69999998808,"ta":78.342} +{"ev":"fetch","url":"audio/bgm/menu.ogg","status":200,"ok":true,"ms":3,"t":79252.90000000596,"ta":78.345} +{"ev":"fetch","url":"audio/voice/female/menu_open.ogg","status":200,"ok":true,"ms":3,"t":79253.59999999404,"ta":78.345} +{"ev":"vstart","url":"audio/voice/female/menu_open.ogg","t":79258.09999999404,"dur":0.7170975056689343,"ta":78.35} +{"ev":"vend","url":"audio/voice/female/menu_open.ogg","t":79284.40000000596,"reason":"kill","ta":78.376} +{"ev":"start","t":79395.90000000596,"sid":55,"url":"audio/bgm/menu.ogg","layer":"bgm","dur":90,"rate":1,"loop":true,"when":0,"ta":78.488} +{"ev":"gesture","type":"swipedown","x":195,"y":422,"t":82159,"ta":81.251} +{"ev":"vibrate","pattern":"[10]","t":82517.09999999404,"ta":81.609} +{"ev":"fetch","url":"audio/voice/female/gameover.ogg","status":200,"ok":true,"ms":2,"t":82519.5,"ta":81.611} +{"ev":"vstart","url":"audio/voice/female/gameover.ogg","t":82522.19999998808,"dur":0.9570975056689343,"ta":81.614} +{"ev":"vend","url":"audio/voice/female/gameover.ogg","t":83660.19999998808,"reason":"kill","ta":82.752} +{"ev":"fetch","url":"audio/voice/female/score_band3.ogg","status":200,"ok":true,"ms":3,"t":83662.80000001192,"ta":82.755} +{"ev":"vstart","url":"audio/voice/female/score_band3.ogg","t":83665.80000001192,"dur":1.68,"ta":82.758} +{"ev":"vend","url":"audio/voice/female/score_band3.ogg","t":85541.19999998808,"reason":"kill","ta":84.633} +{"ev":"fetch","url":"audio/voice/female/replay.ogg","status":200,"ok":true,"ms":3,"t":85544.19999998808,"ta":84.636} +{"ev":"vstart","url":"audio/voice/female/replay.ogg","t":85548.19999998808,"dur":2.24,"ta":84.64} +{"ev":"vend","url":"audio/voice/female/replay.ogg","t":87886.09999999404,"reason":"kill","ta":86.978} +{"ev":"fetch","url":"audio/voice/female/rules_prompt.ogg","status":200,"ok":true,"ms":3,"t":87889.30000001192,"ta":86.981} +{"ev":"vstart","url":"audio/voice/female/rules_prompt.ogg","t":87896.5,"dur":5.36,"ta":86.988} +{"ev":"recstop","t":91727,"ta":90.819} diff --git a/research/simon-polish/round2/live-V-transcript.md b/research/simon-polish/round2/live-V-transcript.md new file mode 100644 index 00000000..1a67a60f --- /dev/null +++ b/research/simon-polish/round2/live-V-transcript.md @@ -0,0 +1,305 @@ +# simon 实时会话 transcript + +- `[ -0.09s]` **GESTURE** tap @(195,422) +- `[ 0.00s]` REC 开始 (audio/webm;codecs=opus) +- `[ 0.41s]` **GESTURE** swipeleft @(195,422) +- `[ 0.50s]` VOICE ▶ t0_welcome (dur 4.24s) +- `[ 0.76s]` VIBRATE [10] +- `[ 1.47s]` **GESTURE** swipedown @(195,422) +- `[ 1.83s]` VIBRATE [10] +- `[ 1.83s]` VOICE ■ t0_welcome (kill) +- `[ 1.83s]` VERDICT t0_welcome: **TRUNCATED** sim=0.5 + - 期望: 欢迎来到音序回响。先认识六种声音。 + - 听到: 欢迎来到音。 +- `[ 1.83s]` VOICE ▶ t_skip (dur 2.24s) +- `[ 4.18s]` VOICE ■ t_skip (kill) +- `[ 4.18s]` VOICE ▶ round_01 (dur 1.52s) +- `[ 4.18s]` VERDICT t_skip: **OK** sim=0.9412 + - 期望: 跳过教学,直接开始。 + - 听到: 一、跳过教学直接开始。 +- `[ 5.79s]` VOICE ■ round_01 (kill) +- `[ 5.79s]` VIBRATE [8] +- `[ 5.79s]` SFX ♪ tone_right +- `[ 5.79s]` VERDICT round_01: **OK** sim=1 + - 期望: 第一轮,听好了。 + - 听到: 第一轮听好了。 +- `[ 6.49s]` VIBRATE [8] +- `[ 6.49s]` SFX ♪ tone_doubletap +- `[ 7.59s]` VIBRATE [20] +- `[ 7.59s]` VOICE ▶ gd_occ_dt (dur 1.68s) +- `[ 7.59s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 9.48s]` VOICE ■ gd_occ_dt (kill) +- `[ 9.48s]` VERDICT gd_occ_dt: **OK** sim=1 + - 期望: 这一轮,双击是作答。 + - 听到: 这一轮双击是作答。 +- `[ 9.48s]` VOICE ▶ your_turn (dur 0.7970975056689342s) +- `[ 10.24s]` VOICE ■ your_turn (kill) +- `[ 10.24s]` VERDICT your_turn: **OK** sim=0.8889 + - 期望: 轮到你了。 + - 听到: 啊,轮到你了。 +- `[ 10.24s]` SFX ♪ input_open +- `[ 10.95s]` **GESTURE** swiperight @(195,422) +- `[ 11.31s]` VIBRATE [10] +- `[ 11.31s]` SFX ♪ tone_right +- `[ 12.02s]` **GESTURE** swipedown @(195,422) +- `[ 12.38s]` VIBRATE [10] +- `[ 12.38s]` VIBRATE [60,40,60] +- `[ 12.38s]` SFX ♪ tone_down +- `[ 12.38s]` VOICE ▶ retry_use (dur 2.64s) +- `[ 12.38s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 12.68s]` VIBRATE [30,50,30,50,30] +- `[ 15.10s]` VOICE ■ retry_use (kill) +- `[ 15.10s]` VERDICT retry_use: **OK** sim=1 + - 期望: 错了。用一次机会,再听一遍。 + - 听到: 错了,用一次机会再听一遍。 +- `[ 15.10s]` VOICE ▶ chances_out (dur 1.76s) +- `[ 16.98s]` VOICE ■ chances_out (kill) +- `[ 16.98s]` VOICE ▶ gd_occ_dt (dur 1.68s) +- `[ 16.98s]` VERDICT chances_out: **OK** sim=1 + - 期望: 重听机会用完了,小心。 + - 听到: 重听机会用完了,小心。 +- `[ 18.86s]` VOICE ■ gd_occ_dt (kill) +- `[ 18.86s]` VIBRATE [8] +- `[ 18.86s]` VERDICT gd_occ_dt: **OK** sim=1 + - 期望: 这一轮,双击是作答。 + - 听到: 这一轮双击是作答。 +- `[ 18.86s]` SFX ♪ tone_right +- `[ 19.56s]` VIBRATE [8] +- `[ 19.56s]` SFX ♪ tone_doubletap +- `[ 20.66s]` VIBRATE [20] +- `[ 20.66s]` SFX ♪ input_open +- `[ 21.37s]` **GESTURE** swiperight @(195,422) +- `[ 21.73s]` VIBRATE [10] +- `[ 21.73s]` SFX ♪ tone_right +- `[ 22.38s]` **GESTURE** doubletap @(195,422) +- `[ 22.63s]` VIBRATE [20] +- `[ 22.63s]` VIBRATE [100] +- `[ 22.63s]` SFX ♪ tone_doubletap +- `[ 22.64s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 22.64s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 23.41s]` VOICE ■ correct (kill) +- `[ 23.41s]` VERDICT correct: **OK** sim=1 + - 期望: 答对了! + - 听到: 答对了。 +- `[ 23.71s]` VOICE ▶ round_02 (dur 1.44s) +- `[ 25.31s]` VOICE ■ round_02 (kill) +- `[ 25.31s]` VIBRATE [8] +- `[ 25.31s]` SFX ♪ tone_right +- `[ 25.31s]` VERDICT round_02: **OK** sim=1 + - 期望: 第二轮,听好了。 + - 听到: 第二轮听好了。 +- `[ 25.98s]` VIBRATE [8] +- `[ 25.98s]` SFX ♪ tone_doubletap +- `[ 26.66s]` VIBRATE [8] +- `[ 26.66s]` SFX ♪ tone_right +- `[ 27.73s]` VIBRATE [20] +- `[ 27.73s]` SFX ♪ input_open +- `[ 27.84s]` **GESTURE** swiperight @(195,422) +- `[ 28.19s]` VIBRATE [10] +- `[ 28.19s]` SFX ♪ tone_right +- `[ 28.85s]` **GESTURE** doubletap @(195,422) +- `[ 29.10s]` VIBRATE [20] +- `[ 29.10s]` SFX ♪ tone_doubletap +- `[ 29.75s]` **GESTURE** swiperight @(195,422) +- `[ 30.11s]` VIBRATE [10] +- `[ 30.11s]` VIBRATE [100] +- `[ 30.11s]` SFX ♪ tone_right +- `[ 30.12s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 30.12s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 32.00s]` VOICE ■ gd_clear (kill) +- `[ 32.00s]` VERDICT gd_clear: **OK** sim=0.75 + - 期望: 漂亮,过了。 + - 听到: 漂亮过来。 +- `[ 32.30s]` VOICE ▶ round_03 (dur 1.68s) +- `[ 32.37s]` **GESTURE** swipeleft @(195,422) +- `[ 32.73s]` VIBRATE [10] +- `[ 32.73s]` VIBRATE [60,40,60] +- `[ 33.13s]` **GESTURE** swiperight @(195,422) +- `[ 33.49s]` VIBRATE [10] +- `[ 33.49s]` VIBRATE [60,40,60] +- `[ 33.90s]` **GESTURE** tap @(195,422) +- `[ 34.18s]` VOICE ■ round_03 (kill) +- `[ 34.18s]` VIBRATE [8] +- `[ 34.18s]` SFX ♪ tone_right +- `[ 34.18s]` VERDICT round_03: **OK** sim=0.8333 + - 期望: 第三轮,听好了。 + - 听到: 第三轮停好了。 +- `[ 34.27s]` VIBRATE [20] +- `[ 34.83s]` VIBRATE [8] +- `[ 34.83s]` SFX ♪ tone_doubletap +- `[ 35.48s]` VIBRATE [8] +- `[ 35.48s]` SFX ♪ tone_right +- `[ 36.13s]` VIBRATE [8] +- `[ 36.13s]` SFX ♪ tone_right +- `[ 37.17s]` VIBRATE [20] +- `[ 37.17s]` SFX ♪ input_open +- `[ 37.20s]` **GESTURE** swiperight @(195,422) +- `[ 37.56s]` VIBRATE [10] +- `[ 37.56s]` SFX ♪ tone_right +- `[ 38.22s]` **GESTURE** doubletap @(195,422) +- `[ 38.47s]` VIBRATE [20] +- `[ 38.47s]` SFX ♪ tone_doubletap +- `[ 39.12s]` **GESTURE** swiperight @(195,422) +- `[ 39.48s]` VIBRATE [10] +- `[ 39.48s]` SFX ♪ tone_right +- `[ 40.13s]` **GESTURE** swiperight @(195,422) +- `[ 40.49s]` VIBRATE [10] +- `[ 40.49s]` VIBRATE [100] +- `[ 40.49s]` SFX ♪ tone_right +- `[ 40.49s]` VOICE ▶ correct (dur 0.6370975056689342s) +- `[ 40.49s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 41.26s]` VOICE ■ correct (kill) +- `[ 41.26s]` VERDICT correct: **OK** sim=1 + - 期望: 答对了! + - 听到: 答对了。 +- `[ 41.57s]` VOICE ▶ round_04 (dur 1.84s) +- `[ 43.44s]` VOICE ■ round_04 (kill) +- `[ 43.44s]` VIBRATE [8] +- `[ 43.44s]` SFX ♪ tone_right +- `[ 43.44s]` VERDICT round_04: **OK** sim=1 + - 期望: 第四轮,听好了。 + - 听到: 第四轮听好了。 +- `[ 44.07s]` VIBRATE [8] +- `[ 44.07s]` SFX ♪ tone_doubletap +- `[ 44.69s]` VIBRATE [8] +- `[ 44.69s]` SFX ♪ tone_right +- `[ 45.31s]` VIBRATE [8] +- `[ 45.31s]` SFX ♪ tone_right +- `[ 45.93s]` VIBRATE [8] +- `[ 45.93s]` SFX ♪ tone_tap +- `[ 46.95s]` VIBRATE [20] +- `[ 46.95s]` SFX ♪ input_open +- `[ 47.06s]` **GESTURE** longpress @(195,422) +- `[ 47.52s]` VIBRATE [20] +- `[ 47.52s]` VOICE ▶ status_len_mid (dur 1.68s) +- `[ 47.52s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 49.41s]` VOICE ■ status_len_mid (kill) +- `[ 49.41s]` VERDICT status_len_mid: **OK** sim=null + - 期望: null + - 听到: 这一轮不长不短。 +- `[ 49.42s]` VOICE ▶ status_prog_start (dur 1.6s) +- `[ 51.01s]` VOICE ■ status_prog_start (kill) +- `[ 51.01s]` VERDICT status_prog_start: **OK** sim=null + - 期望: null + - 听到: 刚开头一个还没对。 +- `[ 51.02s]` VOICE ▶ status_free2 (dur 1.6s) +- `[ 51.12s]` **GESTURE** swiperight @(195,422) +- `[ 51.48s]` VIBRATE [10] +- `[ 51.48s]` SFX ♪ tone_right +- `[ 52.13s]` **GESTURE** doubletap @(195,422) +- `[ 52.38s]` VIBRATE [20] +- `[ 52.38s]` SFX ♪ tone_doubletap +- `[ 52.62s]` VOICE ■ status_free2 (kill) +- `[ 52.62s]` VERDICT status_free2: **OK** sim=null + - 期望: null + - 听到: 免费重听,还有两次。 +- `[ 53.03s]` **GESTURE** swiperight @(195,422) +- `[ 53.39s]` VIBRATE [10] +- `[ 53.39s]` SFX ♪ tone_right +- `[ 54.05s]` **GESTURE** swiperight @(195,422) +- `[ 54.41s]` VIBRATE [10] +- `[ 54.41s]` SFX ♪ tone_right +- `[ 55.06s]` **GESTURE** tap @(195,422) +- `[ 55.43s]` VIBRATE [20] +- `[ 55.43s]` VIBRATE [100] +- `[ 55.43s]` VIBRATE [15] +- `[ 55.43s]` SFX ♪ tone_tap +- `[ 55.43s]` VOICE ▶ gd_clear (dur 1.84s) +- `[ 55.43s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 57.30s]` VOICE ■ gd_clear (kill) +- `[ 57.30s]` VERDICT gd_clear: **OK** sim=0.75 + - 期望: 漂亮,过了。 + - 听到: 漂亮过来。 +- `[ 57.31s]` VOICE ▶ chance_plus (dur 1.44s) +- `[ 58.91s]` VOICE ■ chance_plus (kill) +- `[ 58.91s]` VERDICT chance_plus: **OK** sim=0.8 + - 期望: 机会加一。 + - 听到: 错了机会加一。 +- `[ 59.21s]` VOICE ▶ round_05 (dur 2.96s) +- `[ 61.71s]` VIBRATE [8] +- `[ 61.71s]` SFX ♪ tone_right +- `[ 62.20s]` VOICE ■ round_05 (kill) +- `[ 62.20s]` VERDICT round_05: **OK** sim=1 + - 期望: 第五轮,听好了。 + - 听到: 第五轮听好了。 +- `[ 62.30s]` VIBRATE [8] +- `[ 62.30s]` SFX ♪ tone_doubletap +- `[ 62.90s]` VIBRATE [8] +- `[ 62.90s]` SFX ♪ tone_right +- `[ 63.50s]` VIBRATE [8] +- `[ 63.50s]` SFX ♪ tone_right +- `[ 64.09s]` VIBRATE [8] +- `[ 64.09s]` SFX ♪ tone_tap +- `[ 64.69s]` VIBRATE [8] +- `[ 64.69s]` SFX ♪ tone_left +- `[ 65.69s]` VIBRATE [20] +- `[ 65.69s]` SFX ♪ input_open +- `[ 65.76s]` **GESTURE** swipedown @(195,422) +- `[ 66.11s]` VIBRATE [10] +- `[ 66.11s]` VIBRATE [60,40,60] +- `[ 66.11s]` SFX ♪ tone_down +- `[ 66.11s]` VOICE ▶ retry_use (dur 2.64s) +- `[ 66.11s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 66.41s]` VIBRATE [30,50,30,50,30] +- `[ 68.82s]` VOICE ■ retry_use (kill) +- `[ 68.82s]` VOICE ▶ chances_out (dur 1.76s) +- `[ 68.82s]` VERDICT retry_use: **OK** sim=1 + - 期望: 错了。用一次机会,再听一遍。 + - 听到: 错了,用一次机会再听一遍。 +- `[ 70.70s]` VOICE ■ chances_out (kill) +- `[ 70.70s]` VOICE ▶ gd_occ_dt (dur 1.68s) +- `[ 70.70s]` VERDICT chances_out: **OK** sim=1 + - 期望: 重听机会用完了,小心。 + - 听到: 重听机会用完了,小心。 +- `[ 72.58s]` VOICE ■ gd_occ_dt (kill) +- `[ 72.58s]` VIBRATE [8] +- `[ 72.58s]` SFX ♪ tone_right +- `[ 72.58s]` VERDICT gd_occ_dt: **OK** sim=1 + - 期望: 这一轮,双击是作答。 + - 听到: 这一轮双击是作答。 +- `[ 73.18s]` VIBRATE [8] +- `[ 73.18s]` SFX ♪ tone_doubletap +- `[ 73.78s]` VIBRATE [8] +- `[ 73.78s]` SFX ♪ tone_right +- `[ 74.37s]` VIBRATE [8] +- `[ 74.37s]` SFX ♪ tone_right +- `[ 74.97s]` VIBRATE [8] +- `[ 74.97s]` SFX ♪ tone_tap +- `[ 75.56s]` VIBRATE [8] +- `[ 75.56s]` SFX ♪ tone_left +- `[ 76.56s]` VIBRATE [20] +- `[ 76.56s]` SFX ♪ input_open +- `[ 76.61s]` **GESTURE** swipedown @(195,422) +- `[ 76.98s]` VIBRATE [10] +- `[ 76.98s]` VIBRATE [60,40,60] +- `[ 76.98s]` SFX ♪ tone_down +- `[ 77.28s]` VIBRATE [80] +- `[ 77.68s]` SFX ♪ gameover +- `[ 77.98s]` **GESTURE** swipedown @(195,422) +- `[ 78.34s]` VIBRATE [10] +- `[ 78.35s]` VOICE ▶ menu_open (dur 0.7170975056689343s) +- `[ 78.35s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 78.38s]` VOICE ■ menu_open (kill) +- `[ 78.38s]` VERDICT menu_open: **TRUNCATED** sim=0 + - 期望: 菜单。 + - 听到: 嗯。 +- `[ 78.49s]` BGM ♪ menu (loop) +- `[ 81.25s]` **GESTURE** swipedown @(195,422) +- `[ 81.61s]` VIBRATE [10] +- `[ 81.61s]` VOICE ▶ gameover (dur 0.9570975056689343s) +- `[ 81.61s]` VERDICT (无语音区间): **SFX_BGM_ONLY** +- `[ 82.75s]` VOICE ■ gameover (kill) +- `[ 82.75s]` VERDICT gameover: **MISMATCH** sim=0.3333 + - 期望: 游戏结束。 + - 听到: 有戏。 +- `[ 82.76s]` VOICE ▶ score_band3 (dur 1.68s) +- `[ 84.63s]` VOICE ■ score_band3 (kill) +- `[ 84.63s]` VERDICT score_band3: **OK** sim=0.75 + - 期望: 你坚持了五轮左右。 + - 听到: 也坚持了5轮左右。 +- `[ 84.64s]` VOICE ▶ replay (dur 2.24s) +- `[ 86.98s]` VOICE ■ replay (kill) +- `[ 86.98s]` VERDICT replay: **OK** sim=1 + - 期望: 单击屏幕,再来一局。 + - 听到: 单击屏幕再来一局。 +- `[ 86.99s]` VOICE ▶ rules_prompt (dur 5.36s) diff --git a/research/simon-polish/round2/live-V-verdicts.json b/research/simon-polish/round2/live-V-verdicts.json new file mode 100644 index 00000000..57ccb14f --- /dev/null +++ b/research/simon-polish/round2/live-V-verdicts.json @@ -0,0 +1,711 @@ +{ + "game": "simon", + "settings": { + "voice": "female", + "guide": "full", + "speed": 1, + "bgm": 1 + }, + "outdir": "/home/xsl/AutoVideo/SoundGame/web/harness/live/out/simon-20260914120121", + "segs": [ + { + "idx": 0, + "voiceId": "t0_welcome", + "t0": 0.502, + "t1": 1.829, + "dur": 4.24, + "expEnd": 4.742, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "欢迎来到音。", + "similarity": 0.5 + }, + { + "idx": 1, + "voiceId": "t_skip", + "t0": 1.835, + "t1": 4.183, + "dur": 2.24, + "expEnd": 4.075, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "一、跳过教学直接开始。", + "similarity": 0.9412 + }, + { + "idx": 2, + "voiceId": "round_01", + "t0": 4.183, + "t1": 5.785, + "dur": 1.52, + "expEnd": 5.703, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "第一轮听好了。", + "similarity": 1 + }, + { + "idx": 3, + "voiceId": "gd_occ_dt", + "t0": 7.593, + "t1": 9.476, + "dur": 1.68, + "expEnd": 9.273, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "这一轮双击是作答。", + "similarity": 1 + }, + { + "idx": 4, + "voiceId": "your_turn", + "t0": 9.481, + "t1": 10.242, + "dur": 0.7970975056689342, + "expEnd": 10.278, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "啊,轮到你了。", + "similarity": 0.8889 + }, + { + "idx": 5, + "voiceId": "retry_use", + "t0": 12.385, + "t1": 15.095, + "dur": 2.64, + "expEnd": 15.025, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "错了,用一次机会再听一遍。", + "similarity": 1 + }, + { + "idx": 6, + "voiceId": "chances_out", + "t0": 15.101, + "t1": 16.976, + "dur": 1.76, + "expEnd": 16.861, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "重听机会用完了,小心。", + "similarity": 1 + }, + { + "idx": 7, + "voiceId": "gd_occ_dt", + "t0": 16.976, + "t1": 18.856, + "dur": 1.68, + "expEnd": 18.656, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "这一轮双击是作答。", + "similarity": 1 + }, + { + "idx": 8, + "voiceId": "correct", + "t0": 22.635, + "t1": 23.407, + "dur": 0.6370975056689342, + "expEnd": 23.272, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "答对了。", + "similarity": 1 + }, + { + "idx": 9, + "voiceId": "round_02", + "t0": 23.712, + "t1": 25.311, + "dur": 1.44, + "expEnd": 25.152, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "第二轮听好了。", + "similarity": 1 + }, + { + "idx": 10, + "voiceId": "gd_clear", + "t0": 30.116, + "t1": 31.998, + "dur": 1.84, + "expEnd": 31.956, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "漂亮过来。", + "similarity": 0.75 + }, + { + "idx": 11, + "voiceId": "round_03", + "t0": 32.303, + "t1": 34.18, + "dur": 1.68, + "expEnd": 33.983, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "第三轮停好了。", + "similarity": 0.8333 + }, + { + "idx": 12, + "voiceId": "correct", + "t0": 40.494, + "t1": 41.262, + "dur": 0.6370975056689342, + "expEnd": 41.131, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "答对了。", + "similarity": 1 + }, + { + "idx": 13, + "voiceId": "round_04", + "t0": 41.569, + "t1": 43.444, + "dur": 1.84, + "expEnd": 43.409, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "第四轮听好了。", + "similarity": 1 + }, + { + "idx": 14, + "voiceId": "status_len_mid", + "t0": 47.523, + "t1": 49.411, + "dur": 1.68, + "expEnd": 49.102, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "这一轮不长不短。", + "similarity": null + }, + { + "idx": 15, + "voiceId": "status_prog_start", + "t0": 49.419, + "t1": 51.013, + "dur": 1.6, + "expEnd": 51.019, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "刚开头一个还没对。", + "similarity": null + }, + { + "idx": 16, + "voiceId": "status_free2", + "t0": 51.019, + "t1": 52.615, + "dur": 1.6, + "expEnd": 52.619, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "免费重听,还有两次。", + "similarity": null + }, + { + "idx": 17, + "voiceId": "gd_clear", + "t0": 55.428, + "t1": 57.305, + "dur": 1.84, + "expEnd": 57.268, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "漂亮过来。", + "similarity": 0.75 + }, + { + "idx": 18, + "voiceId": "chance_plus", + "t0": 57.311, + "t1": 58.907, + "dur": 1.44, + "expEnd": 58.751, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "错了机会加一。", + "similarity": 0.8 + }, + { + "idx": 19, + "voiceId": "round_05", + "t0": 59.214, + "t1": 62.204, + "dur": 2.96, + "expEnd": 62.174, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "第五轮听好了。", + "similarity": 1 + }, + { + "idx": 20, + "voiceId": "retry_use", + "t0": 66.11, + "t1": 68.821, + "dur": 2.64, + "expEnd": 68.75, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "错了,用一次机会再听一遍。", + "similarity": 1 + }, + { + "idx": 21, + "voiceId": "chances_out", + "t0": 68.821, + "t1": 70.702, + "dur": 1.76, + "expEnd": 70.581, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "重听机会用完了,小心。", + "similarity": 1 + }, + { + "idx": 22, + "voiceId": "gd_occ_dt", + "t0": 70.702, + "t1": 72.583, + "dur": 1.68, + "expEnd": 72.382, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "这一轮双击是作答。", + "similarity": 1 + }, + { + "idx": 23, + "voiceId": "menu_open", + "t0": 78.35, + "t1": 78.376, + "dur": 0.7170975056689343, + "expEnd": 79.067, + "truncated": true, + "reason": "kill", + "verdict": "TRUNCATED", + "heard": "嗯。", + "similarity": 0 + }, + { + "idx": 24, + "voiceId": "gameover", + "t0": 81.614, + "t1": 82.752, + "dur": 0.9570975056689343, + "expEnd": 82.571, + "truncated": false, + "reason": "kill", + "verdict": "MISMATCH", + "heard": "有戏。", + "similarity": 0.3333 + }, + { + "idx": 25, + "voiceId": "score_band3", + "t0": 82.758, + "t1": 84.633, + "dur": 1.68, + "expEnd": 84.438, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "也坚持了5轮左右。", + "similarity": 0.75 + }, + { + "idx": 26, + "voiceId": "replay", + "t0": 84.64, + "t1": 86.978, + "dur": 2.24, + "expEnd": 86.88, + "truncated": false, + "reason": "kill", + "verdict": "OK", + "heard": "单击屏幕再来一局。", + "similarity": 1 + }, + { + "idx": 27, + "voiceId": "rules_prompt", + "t0": 86.988, + "t1": 88.261, + "dur": 5.36, + "expEnd": 92.348, + "truncated": true, + "reason": "session-end", + "verdict": null, + "heard": null, + "similarity": null + } + ], + "rows": [ + { + "t0": 0.502, + "t1": 1.829, + "voiceId": "t0_welcome", + "expected": "欢迎来到音序回响。先认识六种声音。", + "heard": "欢迎来到音。", + "similarity": 0.5, + "verdict": "TRUNCATED" + }, + { + "t0": 1.835, + "t1": 4.183, + "voiceId": "t_skip", + "expected": "跳过教学,直接开始。", + "heard": "一、跳过教学直接开始。", + "similarity": 0.9412, + "verdict": "OK" + }, + { + "t0": 4.183, + "t1": 5.785, + "voiceId": "round_01", + "expected": "第一轮,听好了。", + "heard": "第一轮听好了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 7.593, + "t1": 9.476, + "voiceId": "gd_occ_dt", + "expected": "这一轮,双击是作答。", + "heard": "这一轮双击是作答。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 9.481, + "t1": 10.242, + "voiceId": "your_turn", + "expected": "轮到你了。", + "heard": "啊,轮到你了。", + "similarity": 0.8889, + "verdict": "OK" + }, + { + "t0": 12.385, + "t1": 15.095, + "voiceId": "retry_use", + "expected": "错了。用一次机会,再听一遍。", + "heard": "错了,用一次机会再听一遍。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 15.101, + "t1": 16.976, + "voiceId": "chances_out", + "expected": "重听机会用完了,小心。", + "heard": "重听机会用完了,小心。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 16.976, + "t1": 18.856, + "voiceId": "gd_occ_dt", + "expected": "这一轮,双击是作答。", + "heard": "这一轮双击是作答。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 22.635, + "t1": 23.407, + "voiceId": "correct", + "expected": "答对了!", + "heard": "答对了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 23.712, + "t1": 25.311, + "voiceId": "round_02", + "expected": "第二轮,听好了。", + "heard": "第二轮听好了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 30.116, + "t1": 31.998, + "voiceId": "gd_clear", + "expected": "漂亮,过了。", + "heard": "漂亮过来。", + "similarity": 0.75, + "verdict": "OK" + }, + { + "t0": 32.303, + "t1": 34.18, + "voiceId": "round_03", + "expected": "第三轮,听好了。", + "heard": "第三轮停好了。", + "similarity": 0.8333, + "verdict": "OK" + }, + { + "t0": 40.494, + "t1": 41.262, + "voiceId": "correct", + "expected": "答对了!", + "heard": "答对了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 41.569, + "t1": 43.444, + "voiceId": "round_04", + "expected": "第四轮,听好了。", + "heard": "第四轮听好了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 47.523, + "t1": 49.411, + "voiceId": "status_len_mid", + "expected": null, + "heard": "这一轮不长不短。", + "similarity": null, + "verdict": "OK" + }, + { + "t0": 49.419, + "t1": 51.013, + "voiceId": "status_prog_start", + "expected": null, + "heard": "刚开头一个还没对。", + "similarity": null, + "verdict": "OK" + }, + { + "t0": 51.019, + "t1": 52.615, + "voiceId": "status_free2", + "expected": null, + "heard": "免费重听,还有两次。", + "similarity": null, + "verdict": "OK" + }, + { + "t0": 55.428, + "t1": 57.305, + "voiceId": "gd_clear", + "expected": "漂亮,过了。", + "heard": "漂亮过来。", + "similarity": 0.75, + "verdict": "OK" + }, + { + "t0": 57.311, + "t1": 58.907, + "voiceId": "chance_plus", + "expected": "机会加一。", + "heard": "错了机会加一。", + "similarity": 0.8, + "verdict": "OK" + }, + { + "t0": 59.214, + "t1": 62.204, + "voiceId": "round_05", + "expected": "第五轮,听好了。", + "heard": "第五轮听好了。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 66.11, + "t1": 68.821, + "voiceId": "retry_use", + "expected": "错了。用一次机会,再听一遍。", + "heard": "错了,用一次机会再听一遍。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 68.821, + "t1": 70.702, + "voiceId": "chances_out", + "expected": "重听机会用完了,小心。", + "heard": "重听机会用完了,小心。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 70.702, + "t1": 72.583, + "voiceId": "gd_occ_dt", + "expected": "这一轮,双击是作答。", + "heard": "这一轮双击是作答。", + "similarity": 1, + "verdict": "OK" + }, + { + "t0": 78.35, + "t1": 78.376, + "voiceId": "menu_open", + "expected": "菜单。", + "heard": "嗯。", + "similarity": 0, + "verdict": "TRUNCATED" + }, + { + "t0": 81.614, + "t1": 82.752, + "voiceId": "gameover", + "expected": "游戏结束。", + "heard": "有戏。", + "similarity": 0.3333, + "verdict": "MISMATCH" + }, + { + "t0": 5.785, + "t1": 7.593, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 10.242, + "t1": 12.385, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 18.856, + "t1": 22.635, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 25.311, + "t1": 30.116, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 34.18, + "t1": 40.494, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 43.444, + "t1": 47.523, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 52.615, + "t1": 55.428, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 62.204, + "t1": 66.11, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 72.583, + "t1": 78.35, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 78.376, + "t1": 81.614, + "voiceId": null, + "expected": null, + "heard": "", + "similarity": null, + "verdict": "SFX_BGM_ONLY" + }, + { + "t0": 82.758, + "t1": 84.633, + "voiceId": "score_band3", + "expected": "你坚持了五轮左右。", + "heard": "也坚持了5轮左右。", + "similarity": 0.75, + "verdict": "OK" + }, + { + "t0": 84.64, + "t1": 86.978, + "voiceId": "replay", + "expected": "单击屏幕,再来一局。", + "heard": "单击屏幕再来一局。", + "similarity": 1, + "verdict": "OK" + } + ] +} \ No newline at end of file diff --git a/research/simon-polish/round2/p1-blind.md b/research/simon-polish/round2/p1-blind.md new file mode 100644 index 00000000..1fcdfa39 --- /dev/null +++ b/research/simon-polish/round2/p1-blind.md @@ -0,0 +1,41 @@ +# P1 视障资深玩家复审:《音序回响》(simon polish 修复验证轮 R2) + +> 复审依据:research/simon-polish/round2/live-V-transcript.md(核对局,14/14 断言)+ +> live-P-transcript.md(压力局,8/8 断言)。对照 round1 评审(../round1/p1-blind.md) +> 的失聪点逐条复听。ASR 非 OK 行全部归因玩家自裁(跳旁白截断/短句同音近失),无游戏自残。 + +### 音序回响 +- 状态感知:4/5 —— round1 的两个失聪区都补上了。**①输入开放窗口**:input_open + 柔铃现在在 every 边界准点响(V 行 40/70/96/135/171/236/271,含复活重播 70), + 而且实测它严格落在占用预告语音结束之后——第 1 轮 your_turn 念完(V 行 36)才有 + 开放铃(V 行 40),我再不会被吞手势了。**②账目**:长按查询三句链实测兑现 + (V 行 174-193:status_len_mid「这一轮不长不短」→ status_prog_start → + status_free2,VERDICT 全 OK),长度档与真实序列长度一致、进度档与 inputIdx + 一致、账目档与免费余量一致——归因真话过关。扣 1 分:查询键无教学提示,发现式 + 辅助对新手仍是隐藏功能(可接受,旁白只承诺"记不住就向上滑")。 +- 下一步明确性:5/5 —— 播报期误触现在有 error 震(V 行 116/119、P 行 41-47), + "现在不用按"有了触觉落点;playback 维持静默豁免的负例也实测锁定(P 播放中乱按 + 零 error 震)。结算链阶段看守兑现(V 行 277-298:78.35s 进菜单 → 菜单内 3 秒 + 只有 BGM 没有结算句 → 81.25s 关菜单 → 81.61s 结算链从头补播,承诺「单击屏幕, + 再来一局」(V 行 86.99)这次是在结算屏上播的)。 +- 愿意继续玩:是 —— 现在每一步都有听觉落点,记忆挑战的纯度没被破坏(每轮只多 + 一声 0.38s 的铃)。 +- P0 问题:无(round1 的 S6 已闭环,压力路径复测通过:P 行 173-195)。 +- 建议(≤3 条,按影响排序): + 1. 查询键值得一句教学提示或开局 hint——发现式对全听觉玩家意味着"可能永远发现 + 不了"(P2 瑕疵,不阻塞)。 + 2. status_out「答错就结束」语气可再温和一档(P4 已表示可接受,记录备查)。 + 3. 无。 + +#### 听觉惯例符合度(逐条核对) +- 语音可打断/重听:过。跳句机制未变;S6 的 stopVoice 抢占是结算链内部替换, + 不产生半句残片(V 行 78.35-81.61 菜单窗口无半截语音)。 +- 等待有无声:过。结算屏死寂 8.4s 已消除(菜单内只有 BGM,回结算屏即补播)。 +- 失败可归因:过。被吞手势有双保险:input_open 边界铃 + announce/roundend + error 震。 +- 菜单列表导航规整:过。菜单只播菜单语义,结算链不再越界(V 行 277-298)。 +- 提示永不逐字重复:过。your_turn 每局一遍实测(V 行 35-37,复活重播未重念)。 +- 账目真实:过。查询三档与内部状态逐项核对一致(V 行 174-193)。 +- 语速上限/长按快进:过(P 局 1.7 档整句无截断,gd_occ_dt 截断归因乱按)。 +- status key:**从缺席到过**(长按=查询,键盘按住空格同享 00 §5.5 通道)。 +- 双击确认(菜单约定):过(P 局菜单双击未变)。 diff --git a/research/simon-polish/round2/p2-student.md b/research/simon-polish/round2/p2-student.md new file mode 100644 index 00000000..63ef0ca7 --- /dev/null +++ b/research/simon-polish/round2/p2-student.md @@ -0,0 +1,29 @@ +# P2 时间充裕的大学生复审:《音序回响》(simon polish 修复验证轮 R2) + +> 复审依据:live-V-transcript.md + live-P-transcript.md,对照 round1 评审逐条复核。 + +### 音序回响 +- 状态感知:4/5 —— 跳播报依然是我的合法操作,但现在**跳完不再失明**:每轮答题 + 窗口有 input_open 铃(V 行 40/135/171),听铃即知"能答了";忘了自己答到哪就 + 长按一下,「这一轮不长不短。刚开头,一个还没对。免费重听还有两次。」(V 行 + 174-193)三秒解决。扣 1 分:轮次数字本身在跳播报后仍不可查(查询给的是长度档 + 不是"第 N 轮")——对记忆力是合理代偿,对"打到第几轮了"的成就感略打折。 +- 下一步明确性:5/5 —— 播报期抢跑有 error 震(V 行 116/119);死亡瞬间下滑进 + 菜单这条 round1 的 P0 链路实测闭环(V 行 277-298:进菜单只有 BGM → 关菜单 + 结算链从头播 → 「单击屏幕,再来一局」在正确的相位上说)。 +- 愿意继续玩:**是(改口)** —— 上版本"死的一瞬间手还在屏幕上"把我卖了,现在 + 同一手型(P 局 32.65s 死亡 → 32.92s 下滑进菜单 → 36.18s 关菜单后结算链补播, + P 行 173-195)得到的是完整结算体验,8.4 秒死寂没了。单局结束再来一局的冲动 + 保住了。 +- P0 问题:无。 +- 建议(≤3 条,按影响排序): + 1. 查询里加一轮次档("第十轮左右"式分档),把成就感补全。 + 2. input_open 与 turn earcon 的音色家族可以再拉开一点(现在一个铃一个风铃, + full 档连续听感略近)——吹毛求疵级。 + 3. 无。 + +#### 我的特别检查项核对 +- 开头多少秒能动手:过(教学未动,11s 首出手节奏不变)。 +- 保送首胜:过(第 1 轮 2 音 + 复活 + 免费重听两层账,查询可查证)。 +- 结算是否想让人再来一局:过(S6 闭环 + 补播链完整,V 行 277-298)。 +- 单局长度/节奏:过(速度曲线未动,700→420ms 逐轮收紧的紧张感原样)。 diff --git a/research/simon-polish/round2/p3-office.md b/research/simon-polish/round2/p3-office.md new file mode 100644 index 00000000..4caf4f2d --- /dev/null +++ b/research/simon-polish/round2/p3-office.md @@ -0,0 +1,27 @@ +# P3 时间紧张的白领复审:《音序回响》(simon polish 修复验证轮 R2) + +> 复审依据:live-V-transcript.md + live-P-transcript.md,对照 round1 评审逐条复核。 + +### 音序回响 +- 状态感知:4/5 —— 中断恢复这件 round1 的死症现在有解:地铁到站停手 20 秒回来, + 长按一下即知"这一轮多长、答到哪、还能重听几次"(V 行 174-193 实测三档全对)。 + 轮次边界铃(input_open)让我不用盯着 confirm 震猜相位。扣 1 分:占用轮里 + "这轮怎么重听"依旧无解(上滑被占时不给替代键,这是 H2 既有裁定的代价,查询 + 也不报"这轮上滑是答案"——实际上听到序列里有上行音自己就该知道,可接受)。 +- 下一步明确性:5/5 —— 播报期误触有 error 震(V 行 116/119),抢跑不再掉进 + 无声洞;死亡瞬间误触菜单的 P0 链路闭环(V 行 277-298,P 行 173-195 双路径实测)。 +- 愿意继续玩:是(改口)—— 25 分钟地铁现在装得下了:查询句三秒接上中断,结算 + 死寂消除,单局长度自控。 +- P0 问题:无。 +- 建议(≤3 条,按影响排序): + 1. 无(round1 三条建议全部落地)。 + 2. (备查)查询句在 1.7 语速档下的用时实测可接受(P 局未触发查询,V 局正常档 + 三句约 3.2s)。 + 3. 无。 + +#### 我的特别检查项核对 +- 关键信息听不清怎么办:过。免费重听两层账 + 查询可查证余额(V 行 185-193)。 +- 中断恢复:**从不过到过**(长按查询 = 一句话接上)。 +- 单局长度:过(结算到下一局的间隔不再被菜单死寂拉长)。 +- 有无沉默尴尬期:过(round1 的 8.4s 死寂消除,菜单内 BGM 填充、回结算屏即补播)。 +- 单手盲操:过(长按查询单手自然)。 diff --git a/research/simon-polish/round2/p4-worker.md b/research/simon-polish/round2/p4-worker.md new file mode 100644 index 00000000..512a7384 --- /dev/null +++ b/research/simon-polish/round2/p4-worker.md @@ -0,0 +1,29 @@ +# P4 疲惫的工人复审:《音序回响》(simon polish 修复验证轮 R2) + +> 复审依据:live-V-transcript.md + live-P-transcript.md,对照 round1 评审逐条复核。 + +### 音序回响 +- 状态感知:4/5 —— "按了没反应"这个老毛病有两层兜底了:播报期乱按会震我一下 + 告诉我"现在不用按"(V 行 116/119、P 行 41-47 实测),答题窗口开了有铃(V 行 + 40/135)。按住屏幕能问"这一轮还有几个音、还能重听几次"(V 行 174-193),话 + 不长,一两句,正合我的意。扣 1 分:查询要长按 450ms,我这种手慢的有时按成了 + 连点——连点是跳旁白,答题阶段没旁白可跳就等于没反应( teaching 里学过"单击 + 可跳过旁白",我不会怪游戏,但第一次没查成会愣一下)。 +- 下一步明确性:5/5 —— 死的时候习惯性一滑进菜单,这次它没在菜单里骗我: + 菜单里安安静静(V 行 278-281),滑回去它才从头讲"游戏结束…你坚持了五轮左右… + 单击屏幕,再来一局"(V 行 281-298),我单击就真的开了新局。它让我单击我就 + 能单击——这话现在算数了。 +- 愿意继续玩:是 —— 答对还是每句都夸我,错了也不骂我,现在连"我按了算不算数" + 都清楚了。 +- P0 问题:无。 +- 建议(≤3 条,按影响排序): + 1. 无(round1 三条建议全部落地)。 + 2. (备查)教学 gd_economy 里可加半句"按住屏幕问状态"—— discovery 对我不太 + 友好,但菜单上滑能听规则,规则句以后可以提一嘴(P2 瑕疵,不阻塞)。 + 3. 无。 + +#### 我的特别检查项核对 +- 教学语速与句长:过(教学未动,逐句教-练保留)。 +- 容错:过(两层账 + 查询可查证 + 复活链完整,P 局 retry_use VERDICT OK sim=1)。 +- 反馈即时温暖:过(表扬句未动;被吞手势的 error 震不凶,两短震刚好)。 +- 有无 pressure:过(查询不耗账、无倒计时,看门狗 5 秒才轻提醒一次)。 diff --git a/research/simon-polish/round2/transcript.md b/research/simon-polish/round2/transcript.md new file mode 100644 index 00000000..f7b3572d --- /dev/null +++ b/research/simon-polish/round2/transcript.md @@ -0,0 +1,283 @@ +# 试玩转写:《simon》 + +> 本文件是「玩家感知日志」:一位新手玩家的整局体验转写。语音列出了玩家听到的每句话全文, +> 音效/BGM/震动按发生时间列出。「静默」段 = 玩家什么也听不到。手势是剧本注入的(模拟真人手部动作), +> 非最优操作:包含犹豫、误操作与乱试。语音时长按语速估算(±20%),仅供节奏参考。 +t+ 0.0s (玩家点开游戏,轻触屏幕开始) +t+ 0.5s ▶ 语音:「欢迎来到音序回响。先认识六种声音。」 +t+ 2.6s ▶ 语音:「单击可跳过旁白。」 +t+ 4.7s ▶ 语音:「我会演奏一串声音,请你记住顺序,原样复现。」 +t+ 6.9s ▶ 语音:「向上滑,是这个声音。」 +t+ 9.0s ♪ 音效 sfx/tone_up +t+ 9.9s ▶ 语音:「你试试。」 +t+ 11.4s 【状态】教学第 1/6 个音色 教学:该做「上滑」了(语音播放中,语速1) +t+ 11.4s ♪ 音效 sfx/tone_up +t+ 11.4s ▶ 语音:「对了。」 +t+ 13.5s ▶ 语音:「向下滑,是这个声音。」 +t+ 15.6s ♪ 音效 sfx/tone_down +t+ 16.5s ▶ 语音:「你试试。」 +t+ 18.6s 【状态】教学第 2/6 个音色 教学:该做「下滑」了(无 BGM,语速1) +t+ 18.6s ♪ 音效 sfx/tone_down +t+ 18.6s ▶ 语音:「对了。」 +t+ 20.8s ▶ 语音:「向左滑,是这个声音。」 +t+ 22.9s ♪ 音效 sfx/tone_left +t+ 23.8s ▶ 语音:「你试试。」 +t+ 25.9s 【状态】教学第 3/6 个音色 教学:该做「左滑」了(无 BGM,语速1) + +#### 【玩家动作】把「左滑」记混了,先来了个右滑 + +t+ 25.9s ▶ 语音:「不是这个,向左滑试试。」 +t+ 25.9s 〰 震动:error(做错了:两连短震) +t+ 25.9s ♪ 音效 sfx/tone_left +t+ 25.9s ▶ 语音:「对了。」 +t+ 28.0s ▶ 语音:「向右滑,是这个声音。」 +t+ 30.1s ♪ 音效 sfx/tone_right +t+ 31.0s ▶ 语音:「你试试。」 +t+ 33.2s 【状态】教学第 4/6 个音色 教学:该做「右滑」了(无 BGM,语速1) +t+ 33.2s ♪ 音效 sfx/tone_right +t+ 33.2s ▶ 语音:「对了。」 +t+ 35.3s ▶ 语音:「单击,是这个声音。」 +t+ 37.4s ♪ 音效 sfx/tone_tap +t+ 38.3s ▶ 语音:「你试试。」 +t+ 40.4s 【状态】教学第 5/6 个音色 教学:该做「单击」了(无 BGM,语速1) +t+ 40.4s ♪ 音效 sfx/tone_tap +t+ 40.4s ▶ 语音:「对了。」 +t+ 42.5s ▶ 语音:「双击,是这个声音。」 +t+ 44.7s ♪ 音效 sfx/tone_doubletap +t+ 45.6s ▶ 语音:「你试试。」 +t+ 47.7s 【状态】教学第 6/6 个音色 教学:该做「双击」了(无 BGM,语速1) +t+ 47.7s ♪ 音效 sfx/tone_doubletap +t+ 47.7s ▶ 语音:「对了。」 +t+ 49.8s ▶ 语音:「六种声音都记住了。后面的序列,会越来越长。」 +t+ 51.9s ▶ 语音:「答错可以消耗机会重听。向上滑,可以随时重听。」 +t+ 54.0s ▶ 向导语音:「记不住就向上滑,重新听一遍。免费机会有两次,用完要扣一次机会。」 +t+ 56.2s ▶ 语音:「第一轮,听好了。」 +t+ 56.2s 【状态】教学讲完了:免费重听两次、用完扣机会,想重听就向上滑 第 1 轮报数呢,听好了(语音播放中,语速1) +t+ 58.3s ♪ 音效 sfx/tone_up +t+ 58.3s 〰 震动:beat(节拍点) +t+ 59.0s ♪ 音效 sfx/tone_tap +t+ 59.0s 〰 震动:beat(节拍点) +t+ 60.1s ♪ 向导音:turn(轮到你) +t+ 60.1s ▶ 向导语音:「这一轮,向上滑是作答。」 +t+ 60.1s 〰 震动:confirm(轻点确认) +t+ 62.2s ▶ 语音:「轮到你了。」 +t+ 64.3s ♪ 音效 sfx/input_open +t+ 64.3s 【状态】序列一播完就听到「这一轮,向上滑是作答」——重听键这轮被占了 第 1 轮轮到你了:已对上 0/2,照原顺序做手势(这轮上滑是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 64.3s ……… 静默 5s(第一轮先不动手,看看它催不催) ……… +t+ 69.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 69.3s ♪ 向导音:watchdog(看门狗升级) +t+ 89.3s ♪ 向导音:nudge(看门狗轻提醒) +t+ 89.3s ♪ 向导音:watchdog(看门狗升级) +t+ 89.3s ♪ 向导音:turn(轮到你) +t+ 89.3s 〰 震动:confirm(轻点确认) + +#### 【玩家动作】5 秒一声轻提醒、25 秒又一声加确认震——两级提醒都没建议「向上滑重听」,它知道这轮上滑是作答 + +t+ 89.3s 【状态】先来一发上滑——期望恰为 up 时上滑就是作答 第 1 轮轮到你了:已对上 0/2,照原顺序做手势(这轮上滑是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 89.3s ♪ 音效 sfx/tone_up +t+ 89.3s ♪ 音效 sfx/tone_tap +t+ 89.3s ▶ 语音:「答对了!」 +t+ 89.3s 〰 震动:success(成功长震) +t+ 91.7s ▶ 语音:「第二轮,听好了。」 +t+ 93.9s ♪ 音效 sfx/tone_down +t+ 93.9s 〰 震动:beat(节拍点) +t+ 94.5s ♪ 音效 sfx/tone_doubletap +t+ 94.5s 〰 震动:beat(节拍点) +t+ 95.2s ♪ 音效 sfx/tone_left +t+ 95.2s 〰 震动:beat(节拍点) +t+ 96.3s ♪ 向导音:turn(轮到你) +t+ 96.3s ▶ 向导语音:「这一轮,双击是作答。」 +t+ 96.3s 〰 震动:confirm(轻点确认) +t+ 98.4s ♪ 音效 sfx/input_open +t+ 98.4s 【状态】这轮预告的是「双击是作答」 第 2 轮轮到你了:已对上 0/3,照原顺序做手势(这轮双击是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 98.4s ♪ 音效 sfx/tone_down +t+ 98.4s ♪ 音效 sfx/tone_doubletap +t+ 98.4s ♪ 音效 sfx/tone_left +t+ 98.4s ▶ 向导语音:「漂亮,过了。」 +t+ 98.4s 〰 震动:success(成功长震) +t+ 100.8s ▶ 语音:「第三轮,听好了。」 +t+ 102.9s ♪ 音效 sfx/tone_down +t+ 102.9s 〰 震动:beat(节拍点) +t+ 103.6s ♪ 音效 sfx/tone_right +t+ 103.6s 〰 震动:beat(节拍点) +t+ 104.2s ♪ 音效 sfx/tone_tap +t+ 104.9s ♪ 音效 sfx/tone_left +t+ 104.2s 〰 震动:beat(节拍点) +t+ 104.9s 〰 震动:beat(节拍点) +t+ 105.9s ♪ 音效 sfx/input_open +t+ 105.9s 〰 震动:confirm(轻点确认) +t+ 105.9s 【状态】这轮开场没有占用预告——上滑还能当重听键用 第 3 轮轮到你了:已对上 0/4,照原顺序做手势(要重听就向上滑)(无 BGM,语速1) +t+ 105.9s ♪ 音效 sfx/tone_down +t+ 105.9s ♪ 音效 sfx/tone_right +t+ 105.9s ♪ 音效 sfx/tone_tap +t+ 105.9s ♪ 音效 sfx/tone_left +t+ 105.9s ▶ 语音:「答对了!」 +t+ 105.9s 〰 震动:success(成功长震) +t+ 108.4s ▶ 语音:「第四轮,听好了。」 +t+ 110.5s ♪ 音效 sfx/tone_down +t+ 110.5s 〰 震动:beat(节拍点) +t+ 111.1s ♪ 音效 sfx/tone_right +t+ 111.7s ♪ 音效 sfx/tone_tap +t+ 111.1s 〰 震动:beat(节拍点) +t+ 111.7s 〰 震动:beat(节拍点) +t+ 112.3s ♪ 音效 sfx/tone_left +t+ 112.3s 〰 震动:beat(节拍点) +t+ 113.0s ♪ 音效 sfx/tone_down +t+ 113.0s 〰 震动:beat(节拍点) +t+ 114.0s ♪ 音效 sfx/input_open +t+ 114.0s 〰 震动:confirm(轻点确认) +t+ 114.0s 【状态】机会加一之后,免费重听真的有两次了 第 4 轮轮到你了:已对上 0/5,照原顺序做手势(要重听就向上滑)(无 BGM,语速1) +t+ 114.0s ♪ 音效 sfx/tone_down +t+ 114.0s ♪ 音效 sfx/tone_right +t+ 114.0s ♪ 音效 sfx/tone_tap +t+ 114.0s ♪ 音效 sfx/tone_left +t+ 114.0s ♪ 音效 sfx/tone_down +t+ 114.0s ▶ 向导语音:「漂亮,过了。」 +t+ 114.0s 〰 震动:success(成功长震) +t+ 114.0s 〰 震动:pickup(获得) +t+ 116.1s ▶ 语音:「机会加一。」 +t+ 118.5s ▶ 语音:「第五轮,听好了。」 +t+ 120.6s ♪ 音效 sfx/tone_down +t+ 120.6s 〰 震动:beat(节拍点) +t+ 121.2s ♪ 音效 sfx/tone_right +t+ 121.8s ♪ 音效 sfx/tone_tap +t+ 121.2s 〰 震动:beat(节拍点) +t+ 121.8s 〰 震动:beat(节拍点) +t+ 122.4s ♪ 音效 sfx/tone_left +t+ 122.4s 〰 震动:beat(节拍点) +t+ 123.0s ♪ 音效 sfx/tone_down +t+ 123.6s ♪ 音效 sfx/tone_right +t+ 123.0s 〰 震动:beat(节拍点) +t+ 123.6s 〰 震动:beat(节拍点) +t+ 124.6s ♪ 音效 sfx/input_open +t+ 124.6s 〰 震动:confirm(轻点确认) +t+ 124.6s 【状态】第 5 轮序列有点长,先不动手 第 5 轮轮到你了:已对上 0/6,照原顺序做手势(要重听就向上滑)(无 BGM,语速1) +t+ 124.6s ……… 静默 5s(想不起来序列了) ……… +t+ 129.6s ♪ 向导音:nudge(看门狗轻提醒) +t+ 129.6s ▶ 向导语音:「需要的话,向上滑可以重新听一遍序列。」 +t+ 129.6s 【状态】5 秒就来了提示:需要的话,向上滑可以重新听一遍序列 第 5 轮轮到你了:已对上 0/6,照原顺序做手势(要重听就向上滑)(语音播放中,语速1) + +#### 【玩家动作】照提示向上滑——第 1 次免费重听用掉,跟着听到「免费重听还剩一次」 + +t+ 129.6s ▶ 语音:「再听一遍。」 +t+ 129.6s 〰 震动:pickup(获得) +t+ 131.7s ▶ 向导语音:「免费重听还剩一次。」 +t+ 133.9s ♪ 音效 sfx/tone_down +t+ 133.9s 〰 震动:beat(节拍点) +t+ 134.5s ♪ 音效 sfx/tone_right +t+ 134.5s 〰 震动:beat(节拍点) +t+ 135.1s ♪ 音效 sfx/tone_tap +t+ 135.6s ♪ 音效 sfx/tone_left +t+ 135.1s 〰 震动:beat(节拍点) +t+ 135.6s 〰 震动:beat(节拍点) +t+ 136.2s ♪ 音效 sfx/tone_down +t+ 136.8s ♪ 音效 sfx/tone_right +t+ 136.2s 〰 震动:beat(节拍点) +t+ 136.8s 〰 震动:beat(节拍点) +t+ 137.8s ♪ 音效 sfx/input_open +t+ 137.8s 〰 震动:confirm(轻点确认) +t+ 137.8s ♪ 音效 sfx/tone_down +t+ 137.8s ♪ 音效 sfx/tone_right +t+ 137.8s ♪ 音效 sfx/tone_tap +t+ 137.8s ♪ 音效 sfx/tone_left +t+ 137.8s ♪ 音效 sfx/tone_down +t+ 137.8s ♪ 音效 sfx/tone_right +t+ 137.8s ▶ 语音:「答对了!」 +t+ 137.8s 〰 震动:success(成功长震) +t+ 140.3s ▶ 语音:「第六轮,听好了。」 +t+ 142.4s ♪ 音效 sfx/tone_up +t+ 142.9s ♪ 音效 sfx/tone_doubletap +t+ 142.4s 〰 震动:beat(节拍点) +t+ 142.9s 〰 震动:beat(节拍点) +t+ 143.5s ♪ 音效 sfx/tone_tap +t+ 143.5s 〰 震动:beat(节拍点) +t+ 144.1s ♪ 音效 sfx/tone_left +t+ 144.7s ♪ 音效 sfx/tone_down +t+ 144.1s 〰 震动:beat(节拍点) +t+ 144.7s 〰 震动:beat(节拍点) +t+ 145.2s ♪ 音效 sfx/tone_right +t+ 145.8s ♪ 音效 sfx/tone_tap +t+ 145.2s 〰 震动:beat(节拍点) +t+ 145.8s 〰 震动:beat(节拍点) +t+ 146.8s ♪ 向导音:turn(轮到你) +t+ 146.8s ▶ 向导语音:「这一轮,向上滑和双击都是作答。」 +t+ 146.8s 〰 震动:confirm(轻点确认) +t+ 148.9s ♪ 音效 sfx/input_open +t+ 148.9s 【状态】这轮说「向上滑和双击都是作答」——两个键都被占用了 第 6 轮轮到你了:已对上 0/7,照原顺序做手势(这轮上滑和双击是作答,占用了)(要重听就向上滑)(无 BGM,语速1) +t+ 148.9s ……… 静默 5s(轮到我了,先心里过一遍序列) ……… +t+ 153.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 153.9s ♪ 向导音:watchdog(看门狗升级) +t+ 173.9s ♪ 向导音:nudge(看门狗轻提醒) +t+ 173.9s ♪ 向导音:watchdog(看门狗升级) +t+ 173.9s ♪ 向导音:turn(轮到你) +t+ 173.9s 〰 震动:confirm(轻点确认) + +#### 【玩家动作】又是两级提醒都没有重听建议——占用轮里那句建议自动闭嘴 + +t+ 173.9s ♪ 音效 sfx/tone_up +t+ 173.9s ♪ 音效 sfx/tone_doubletap +t+ 173.9s ♪ 音效 sfx/tone_tap +t+ 173.9s ♪ 音效 sfx/tone_left +t+ 173.9s ♪ 音效 sfx/tone_down +t+ 173.9s ♪ 音效 sfx/tone_right +t+ 173.9s ♪ 音效 sfx/tone_tap +t+ 173.9s ▶ 向导语音:「漂亮,过了。」 +t+ 173.9s 〰 震动:success(成功长震) +t+ 176.3s ▶ 语音:「第七轮,听好了。」 +t+ 178.4s ♪ 音效 sfx/tone_down +t+ 178.4s 〰 震动:beat(节拍点) +t+ 179.0s ♪ 音效 sfx/tone_right +t+ 179.5s ♪ 音效 sfx/tone_tap +t+ 179.0s 〰 震动:beat(节拍点) +t+ 179.5s 〰 震动:beat(节拍点) +t+ 180.1s ♪ 音效 sfx/tone_left +t+ 180.6s ♪ 音效 sfx/tone_down +t+ 180.1s 〰 震动:beat(节拍点) +t+ 180.6s 〰 震动:beat(节拍点) +t+ 181.1s ♪ 音效 sfx/tone_right +t+ 181.7s ♪ 音效 sfx/tone_tap +t+ 181.1s 〰 震动:beat(节拍点) +t+ 181.7s 〰 震动:beat(节拍点) +t+ 182.2s ♪ 音效 sfx/tone_left +t+ 182.2s 〰 震动:beat(节拍点) +t+ 183.2s ♪ 音效 sfx/input_open +t+ 183.2s 〰 震动:confirm(轻点确认) +t+ 183.2s ……… 静默 5s(长序列,又想不起来了) ……… +t+ 188.2s ♪ 向导音:nudge(看门狗轻提醒) +t+ 188.2s ▶ 向导语音:「需要的话,向上滑可以重新听一遍序列。」 +t+ 188.2s 【状态】又是那句提示:向上滑可以重新听一遍序列 第 7 轮轮到你了:已对上 0/8,照原顺序做手势(要重听就向上滑)(语音播放中,语速1) + +#### 【玩家动作】向上滑——第 2 次免费重听用掉,这回听到「免费重听用完了。之后重听会花一次机会」 + +t+ 188.2s ▶ 语音:「再听一遍。」 +t+ 188.2s 〰 震动:pickup(获得) +t+ 190.3s ▶ 向导语音:「免费重听用完了。之后重听会花一次机会,别怕,慢慢来。」 +t+ 192.4s ♪ 音效 sfx/tone_down +t+ 192.4s 〰 震动:beat(节拍点) +t+ 193.0s ♪ 音效 sfx/tone_right +t+ 193.5s ♪ 音效 sfx/tone_tap +t+ 193.0s 〰 震动:beat(节拍点) +t+ 193.5s 〰 震动:beat(节拍点) +t+ 194.1s ♪ 音效 sfx/tone_left +t+ 194.6s ♪ 音效 sfx/tone_down +t+ 194.1s 〰 震动:beat(节拍点) +t+ 194.6s 〰 震动:beat(节拍点) +t+ 195.1s ♪ 音效 sfx/tone_right +t+ 195.7s ♪ 音效 sfx/tone_tap +t+ 195.1s 〰 震动:beat(节拍点) +t+ 195.7s 〰 震动:beat(节拍点) +t+ 196.2s ♪ 音效 sfx/tone_left +t+ 196.2s 〰 震动:beat(节拍点) +t+ 197.2s ♪ 音效 sfx/input_open +t+ 197.2s 〰 震动:confirm(轻点确认) +t+ 197.2s ♪ 音效 sfx/tone_down +t+ 197.2s ♪ 音效 sfx/tone_right +t+ 197.2s ♪ 音效 sfx/tone_tap +t+ 197.2s ♪ 音效 sfx/tone_left +t+ 197.2s ♪ 音效 sfx/tone_down +t+ 197.2s ♪ 音效 sfx/tone_right +t+ 197.2s ♪ 音效 sfx/tone_tap +t+ 197.2s ♪ 音效 sfx/tone_left +t+ 197.2s ▶ 语音:「答对了!」 +t+ 197.2s 〰 震动:success(成功长震) +t+ 197.2s 【状态】收工:打完 7 轮在轮边界停手(免费重听剩 2 次,账目和播的对上了) 刚答完一轮,播报中(语音播放中,语速1) diff --git a/tools/gen_simon_syn.py b/tools/gen_simon_syn.py new file mode 100644 index 00000000..10ba86f5 --- /dev/null +++ b/tools/gen_simon_syn.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""《音序回响》程序合成音效(simon polish round2,research/simon-polish/round1 取证 S2)。 + +新增 1 件(落 web/simon/audio/sfx/): + input_open 「答题窗口开放」标记音:sfx/input_open。confirm 震只标记"播放完毕", + 占用预告/your_turn 语音链之后才真开放(_toInput);此前玩家作答被静默 + 吞(live-A 行 108-115)。该音为游戏层资产、不走向导层——guide=off / + iOS(无震动,00 §2.5)下仍有听觉边界。与 6 个手势音色(弹拨/琶音/底鼓/ + 木琴双响)及向导 turn earcon(1318.5Hz 单音)错开:双音上行柔铃。 + +one-shot QC(同 gen_space_syn.py 标准):去直流 + 首尾 8ms cos² + 真峰值 ≤-3dBFS +(编码后 ebur128 实测,超限自动降档重编)+ 编码后解码回读频谱。 + +用法:.venv-tts/bin/python tools/gen_simon_syn.py +""" +import os +import subprocess +import sys + +import numpy as np +import soundfile as sf + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +FFMPEG = os.path.join(ROOT, "tools", "bin", "ffmpeg") +OUT = os.path.join(ROOT, "tools", "gen_simon_syn_wav") +DST = os.path.join(ROOT, "web", "simon", "audio", "sfx") +os.makedirs(OUT, exist_ok=True) +os.makedirs(DST, exist_ok=True) + +sr = 44100 +ONE_SHOT_TP_CEIL = -3.0 +SAMPLE_PEAK = 0.66 +FADE_N = int(sr * 0.008) + + +def dc(y): + return y - np.mean(y) + + +def fade(y): + w = np.sin(np.linspace(0, np.pi / 2, FADE_N)) ** 2 + y = y.copy() + y[:FADE_N] *= w + y[-FADE_N:] *= w[::-1] + return y + + +def norm(y, peak=SAMPLE_PEAK): + m = np.max(np.abs(y)) + return (y / m * peak) if m > 0 else y + + +def stereo(y): + return np.stack([y, y], axis=1).astype(np.float32) + + +def bell(freq, dur, gain=1.0, shimmer=0.18): + """柔铃单音:基频 + 弱二次泛音,快起双段缓释(同向导 earcon 包络思路)。""" + n = int(dur * sr) + t = np.arange(n) / sr + y = np.sin(2 * np.pi * freq * t) + shimmer * np.sin(2 * np.pi * freq * 2 * t) + env = np.minimum(1.0, t / 0.008) + env *= np.where(t < dur * 0.4, + np.exp(-t * 3.0), + np.exp(-dur * 0.4 * 3.0) * np.exp(-(t - dur * 0.4) * 9.0)) + return y * env * gain + + +def input_open(): + """双音上行柔铃 B5→D6(0.35s):「开放作答」。不与 tone_doubletap(同音双响) + 或 turn earcon(1318.5Hz 单音)同质。""" + y = np.zeros(int(sr * 0.38)) + for at, f in [(0.0, 987.77), (0.14, 1174.66)]: + seg = bell(f, 0.3, gain=0.9) + n = min(len(seg), len(y) - int(at * sr)) + y[int(at * sr):int(at * sr) + n] += seg[:n] + return dc(y) + + +ONE_SHOTS = { + "input_open": input_open, +} + + +# ---------------------------------------------------------------- 编码 + 真峰值校验 +def encode(wav_path, base): + for args, ext in [(["-c:a", "libvorbis", "-q:a", "3"], ".ogg"), + (["-c:a", "aac", "-b:a", "128k"], ".m4a")]: + subprocess.run([FFMPEG, "-y", "-v", "error", "-i", wav_path, + "-ar", "44100", *args, base + ext], check=True) + + +def true_peak_db(path): + r = subprocess.run([FFMPEG, "-i", path, "-af", "ebur128=peak=true", "-f", "null", "-"], + capture_output=True, text=True) + peaks = [float(line.split("Peak:")[1].strip().split()[0]) + for line in r.stderr.splitlines() if "Peak:" in line and "dBFS" in line] + return max(peaks) if peaks else float("nan") + + +def check_tp(base): + return max(true_peak_db(base + ".ogg"), true_peak_db(base + ".m4a")) + + +def spectral_report(base): + """编码后解码回读:≥3kHz/≥5kHz 能量占比(同 space polish 复测口径)。""" + r = subprocess.run([FFMPEG, "-v", "error", "-i", base + ".ogg", "-f", "f32le", "-ac", "1", "-ar", "44100", "-"], + capture_output=True) + y = np.frombuffer(r.stdout, dtype=np.float32) + Y = np.abs(np.fft.rfft(y * np.hanning(len(y)))) + fr = np.fft.rfftfreq(len(y), 1 / sr) + e = Y ** 2 + tot = e.sum() + 1e-12 + return e[fr >= 3000].sum() / tot * 100, e[fr >= 5000].sum() / tot * 100, fr[np.argmax(Y)] / 1000 + + +def main(): + report = [] + problems = [] + for fid, fn in ONE_SHOTS.items(): + wav_path = os.path.join(OUT, fid + ".wav") + base = os.path.join(DST, fid) + y = fade(norm(dc(fn()))) + sf.write(wav_path, stereo(y), sr) + encode(wav_path, base) + tp = check_tp(base) + if tp > ONE_SHOT_TP_CEIL: + gain = 10 ** ((ONE_SHOT_TP_CEIL - tp) / 20) * 0.98 + sf.write(wav_path, stereo(y * gain), sr) + encode(wav_path, base) + tp2 = check_tp(base) + report.append((fid, len(y) / sr, tp, f"降 {20 * np.log10(gain):.1f}dB 重编 -> {tp2:.2f}")) + tp = tp2 + else: + report.append((fid, len(y) / sr, tp, "")) + if tp > ONE_SHOT_TP_CEIL: + problems.append(f"{fid}: 真峰值 {tp:.2f} dBFS 仍超 {ONE_SHOT_TP_CEIL}") + print(f"{'id':14s} {'dur(s)':>7s} {'TP(dBFS)':>9s} {'%>3k':>7s} {'%>5k':>7s} {'peakkHz':>8s} note") + for fid, dur, tp, note in report: + e3, e5, pk = spectral_report(os.path.join(DST, fid)) + print(f"{fid:14s} {dur:7.2f} {tp:9.2f} {e3:7.1f} {e5:7.1f} {pk:8.2f} {note}") + if e5 > 15.0: + problems.append(f"{fid}: 5kHz+ 能量 {e5:.1f}% 仍偏高") + if problems: + print("PROBLEMS:") + for p in problems: + print(" ", p) + return 1 + print(f"ALL OK: {len(ONE_SHOTS)} one-shot -> {DST}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/web/simon/audio/sfx/input_open.m4a b/web/simon/audio/sfx/input_open.m4a new file mode 100644 index 00000000..63eaad08 Binary files /dev/null and b/web/simon/audio/sfx/input_open.m4a differ diff --git a/web/simon/audio/sfx/input_open.ogg b/web/simon/audio/sfx/input_open.ogg new file mode 100644 index 00000000..96df2d59 Binary files /dev/null and b/web/simon/audio/sfx/input_open.ogg differ diff --git a/web/simon/audio/voice/female/status_chance1.m4a b/web/simon/audio/voice/female/status_chance1.m4a new file mode 100644 index 00000000..60fd0b43 Binary files /dev/null and b/web/simon/audio/voice/female/status_chance1.m4a differ diff --git a/web/simon/audio/voice/female/status_chance1.ogg b/web/simon/audio/voice/female/status_chance1.ogg new file mode 100644 index 00000000..5bd6b615 Binary files /dev/null and b/web/simon/audio/voice/female/status_chance1.ogg differ diff --git a/web/simon/audio/voice/female/status_chance2.m4a b/web/simon/audio/voice/female/status_chance2.m4a new file mode 100644 index 00000000..63d14937 Binary files /dev/null and b/web/simon/audio/voice/female/status_chance2.m4a differ diff --git a/web/simon/audio/voice/female/status_chance2.ogg b/web/simon/audio/voice/female/status_chance2.ogg new file mode 100644 index 00000000..90f75802 Binary files /dev/null and b/web/simon/audio/voice/female/status_chance2.ogg differ diff --git a/web/simon/audio/voice/female/status_free1.m4a b/web/simon/audio/voice/female/status_free1.m4a new file mode 100644 index 00000000..f441d9a3 Binary files /dev/null and b/web/simon/audio/voice/female/status_free1.m4a differ diff --git a/web/simon/audio/voice/female/status_free1.ogg b/web/simon/audio/voice/female/status_free1.ogg new file mode 100644 index 00000000..a6ef5481 Binary files /dev/null and b/web/simon/audio/voice/female/status_free1.ogg differ diff --git a/web/simon/audio/voice/female/status_free2.m4a b/web/simon/audio/voice/female/status_free2.m4a new file mode 100644 index 00000000..ae97d084 Binary files /dev/null and b/web/simon/audio/voice/female/status_free2.m4a differ diff --git a/web/simon/audio/voice/female/status_free2.ogg b/web/simon/audio/voice/female/status_free2.ogg new file mode 100644 index 00000000..e8a42850 Binary files /dev/null and b/web/simon/audio/voice/female/status_free2.ogg differ diff --git a/web/simon/audio/voice/female/status_len_long.m4a b/web/simon/audio/voice/female/status_len_long.m4a new file mode 100644 index 00000000..0befba03 Binary files /dev/null and b/web/simon/audio/voice/female/status_len_long.m4a differ diff --git a/web/simon/audio/voice/female/status_len_long.ogg b/web/simon/audio/voice/female/status_len_long.ogg new file mode 100644 index 00000000..f0b36891 Binary files /dev/null and b/web/simon/audio/voice/female/status_len_long.ogg differ diff --git a/web/simon/audio/voice/female/status_len_mid.m4a b/web/simon/audio/voice/female/status_len_mid.m4a new file mode 100644 index 00000000..7a99256e Binary files /dev/null and b/web/simon/audio/voice/female/status_len_mid.m4a differ diff --git a/web/simon/audio/voice/female/status_len_mid.ogg b/web/simon/audio/voice/female/status_len_mid.ogg new file mode 100644 index 00000000..1f2e8779 Binary files /dev/null and b/web/simon/audio/voice/female/status_len_mid.ogg differ diff --git a/web/simon/audio/voice/female/status_len_short.m4a b/web/simon/audio/voice/female/status_len_short.m4a new file mode 100644 index 00000000..caedca1f Binary files /dev/null and b/web/simon/audio/voice/female/status_len_short.m4a differ diff --git a/web/simon/audio/voice/female/status_len_short.ogg b/web/simon/audio/voice/female/status_len_short.ogg new file mode 100644 index 00000000..2953df26 Binary files /dev/null and b/web/simon/audio/voice/female/status_len_short.ogg differ diff --git a/web/simon/audio/voice/female/status_len_xlong.m4a b/web/simon/audio/voice/female/status_len_xlong.m4a new file mode 100644 index 00000000..3238515f Binary files /dev/null and b/web/simon/audio/voice/female/status_len_xlong.m4a differ diff --git a/web/simon/audio/voice/female/status_len_xlong.ogg b/web/simon/audio/voice/female/status_len_xlong.ogg new file mode 100644 index 00000000..6450ab04 Binary files /dev/null and b/web/simon/audio/voice/female/status_len_xlong.ogg differ diff --git a/web/simon/audio/voice/female/status_out.m4a b/web/simon/audio/voice/female/status_out.m4a new file mode 100644 index 00000000..66658408 Binary files /dev/null and b/web/simon/audio/voice/female/status_out.m4a differ diff --git a/web/simon/audio/voice/female/status_out.ogg b/web/simon/audio/voice/female/status_out.ogg new file mode 100644 index 00000000..7c6c0394 Binary files /dev/null and b/web/simon/audio/voice/female/status_out.ogg differ diff --git a/web/simon/audio/voice/female/status_prog_early.m4a b/web/simon/audio/voice/female/status_prog_early.m4a new file mode 100644 index 00000000..c577453c Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_early.m4a differ diff --git a/web/simon/audio/voice/female/status_prog_early.ogg b/web/simon/audio/voice/female/status_prog_early.ogg new file mode 100644 index 00000000..e3cad1d8 Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_early.ogg differ diff --git a/web/simon/audio/voice/female/status_prog_half.m4a b/web/simon/audio/voice/female/status_prog_half.m4a new file mode 100644 index 00000000..92ccff99 Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_half.m4a differ diff --git a/web/simon/audio/voice/female/status_prog_half.ogg b/web/simon/audio/voice/female/status_prog_half.ogg new file mode 100644 index 00000000..b3228d65 Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_half.ogg differ diff --git a/web/simon/audio/voice/female/status_prog_late.m4a b/web/simon/audio/voice/female/status_prog_late.m4a new file mode 100644 index 00000000..5055888b Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_late.m4a differ diff --git a/web/simon/audio/voice/female/status_prog_late.ogg b/web/simon/audio/voice/female/status_prog_late.ogg new file mode 100644 index 00000000..13998d46 Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_late.ogg differ diff --git a/web/simon/audio/voice/female/status_prog_start.m4a b/web/simon/audio/voice/female/status_prog_start.m4a new file mode 100644 index 00000000..a7fbf279 Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_start.m4a differ diff --git a/web/simon/audio/voice/female/status_prog_start.ogg b/web/simon/audio/voice/female/status_prog_start.ogg new file mode 100644 index 00000000..8f74d218 Binary files /dev/null and b/web/simon/audio/voice/female/status_prog_start.ogg differ diff --git a/web/simon/audio/voice/male/status_chance1.m4a b/web/simon/audio/voice/male/status_chance1.m4a new file mode 100644 index 00000000..070beff7 Binary files /dev/null and b/web/simon/audio/voice/male/status_chance1.m4a differ diff --git a/web/simon/audio/voice/male/status_chance1.ogg b/web/simon/audio/voice/male/status_chance1.ogg new file mode 100644 index 00000000..a085cf4e Binary files /dev/null and b/web/simon/audio/voice/male/status_chance1.ogg differ diff --git a/web/simon/audio/voice/male/status_chance2.m4a b/web/simon/audio/voice/male/status_chance2.m4a new file mode 100644 index 00000000..42f181af Binary files /dev/null and b/web/simon/audio/voice/male/status_chance2.m4a differ diff --git a/web/simon/audio/voice/male/status_chance2.ogg b/web/simon/audio/voice/male/status_chance2.ogg new file mode 100644 index 00000000..4238a25f Binary files /dev/null and b/web/simon/audio/voice/male/status_chance2.ogg differ diff --git a/web/simon/audio/voice/male/status_free1.m4a b/web/simon/audio/voice/male/status_free1.m4a new file mode 100644 index 00000000..bda269d7 Binary files /dev/null and b/web/simon/audio/voice/male/status_free1.m4a differ diff --git a/web/simon/audio/voice/male/status_free1.ogg b/web/simon/audio/voice/male/status_free1.ogg new file mode 100644 index 00000000..80b915f0 Binary files /dev/null and b/web/simon/audio/voice/male/status_free1.ogg differ diff --git a/web/simon/audio/voice/male/status_free2.m4a b/web/simon/audio/voice/male/status_free2.m4a new file mode 100644 index 00000000..bd9fb4aa Binary files /dev/null and b/web/simon/audio/voice/male/status_free2.m4a differ diff --git a/web/simon/audio/voice/male/status_free2.ogg b/web/simon/audio/voice/male/status_free2.ogg new file mode 100644 index 00000000..df35c1b7 Binary files /dev/null and b/web/simon/audio/voice/male/status_free2.ogg differ diff --git a/web/simon/audio/voice/male/status_len_long.m4a b/web/simon/audio/voice/male/status_len_long.m4a new file mode 100644 index 00000000..50184ec4 Binary files /dev/null and b/web/simon/audio/voice/male/status_len_long.m4a differ diff --git a/web/simon/audio/voice/male/status_len_long.ogg b/web/simon/audio/voice/male/status_len_long.ogg new file mode 100644 index 00000000..260b6c72 Binary files /dev/null and b/web/simon/audio/voice/male/status_len_long.ogg differ diff --git a/web/simon/audio/voice/male/status_len_mid.m4a b/web/simon/audio/voice/male/status_len_mid.m4a new file mode 100644 index 00000000..f16c291e Binary files /dev/null and b/web/simon/audio/voice/male/status_len_mid.m4a differ diff --git a/web/simon/audio/voice/male/status_len_mid.ogg b/web/simon/audio/voice/male/status_len_mid.ogg new file mode 100644 index 00000000..b84361db Binary files /dev/null and b/web/simon/audio/voice/male/status_len_mid.ogg differ diff --git a/web/simon/audio/voice/male/status_len_short.m4a b/web/simon/audio/voice/male/status_len_short.m4a new file mode 100644 index 00000000..ceba38f6 Binary files /dev/null and b/web/simon/audio/voice/male/status_len_short.m4a differ diff --git a/web/simon/audio/voice/male/status_len_short.ogg b/web/simon/audio/voice/male/status_len_short.ogg new file mode 100644 index 00000000..7f2b09f9 Binary files /dev/null and b/web/simon/audio/voice/male/status_len_short.ogg differ diff --git a/web/simon/audio/voice/male/status_len_xlong.m4a b/web/simon/audio/voice/male/status_len_xlong.m4a new file mode 100644 index 00000000..8c63b1d4 Binary files /dev/null and b/web/simon/audio/voice/male/status_len_xlong.m4a differ diff --git a/web/simon/audio/voice/male/status_len_xlong.ogg b/web/simon/audio/voice/male/status_len_xlong.ogg new file mode 100644 index 00000000..8ae72a3f Binary files /dev/null and b/web/simon/audio/voice/male/status_len_xlong.ogg differ diff --git a/web/simon/audio/voice/male/status_out.m4a b/web/simon/audio/voice/male/status_out.m4a new file mode 100644 index 00000000..9ab2e1b2 Binary files /dev/null and b/web/simon/audio/voice/male/status_out.m4a differ diff --git a/web/simon/audio/voice/male/status_out.ogg b/web/simon/audio/voice/male/status_out.ogg new file mode 100644 index 00000000..f77edfd0 Binary files /dev/null and b/web/simon/audio/voice/male/status_out.ogg differ diff --git a/web/simon/audio/voice/male/status_prog_early.m4a b/web/simon/audio/voice/male/status_prog_early.m4a new file mode 100644 index 00000000..92e0f1ca Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_early.m4a differ diff --git a/web/simon/audio/voice/male/status_prog_early.ogg b/web/simon/audio/voice/male/status_prog_early.ogg new file mode 100644 index 00000000..78d9c1f7 Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_early.ogg differ diff --git a/web/simon/audio/voice/male/status_prog_half.m4a b/web/simon/audio/voice/male/status_prog_half.m4a new file mode 100644 index 00000000..4a3a391c Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_half.m4a differ diff --git a/web/simon/audio/voice/male/status_prog_half.ogg b/web/simon/audio/voice/male/status_prog_half.ogg new file mode 100644 index 00000000..5bea7908 Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_half.ogg differ diff --git a/web/simon/audio/voice/male/status_prog_late.m4a b/web/simon/audio/voice/male/status_prog_late.m4a new file mode 100644 index 00000000..2a34e82b Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_late.m4a differ diff --git a/web/simon/audio/voice/male/status_prog_late.ogg b/web/simon/audio/voice/male/status_prog_late.ogg new file mode 100644 index 00000000..8cb198b0 Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_late.ogg differ diff --git a/web/simon/audio/voice/male/status_prog_start.m4a b/web/simon/audio/voice/male/status_prog_start.m4a new file mode 100644 index 00000000..9724161e Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_start.m4a differ diff --git a/web/simon/audio/voice/male/status_prog_start.ogg b/web/simon/audio/voice/male/status_prog_start.ogg new file mode 100644 index 00000000..83a2bd93 Binary files /dev/null and b/web/simon/audio/voice/male/status_prog_start.ogg differ diff --git a/web/simon/game.js b/web/simon/game.js index cd05baef..7bb56de8 100644 --- a/web/simon/game.js +++ b/web/simon/game.js @@ -40,6 +40,19 @@ * 1→0 播 gd_chances_left0,替换该路径旧「用完了」绝对句,全档位)。 * - H4 input 看门狗首级 10s→5s(升级级 25s 与次数不变;非 input 阶段不动)。 * + * round5(research/simon-polish/round1 取证 S1-S7 → round2 修复,状态透明层;玩法零改动): + * - S2:input 开放标记音 sfx/input_open——confirm 震只标记"播放完毕",占用预告/ + * your_turn 语音链之后才真开放(此前作答被静默吞,live-A 行 108-115);input_open + * 在 _toInput 播、游戏层资产不走向导层(guide=off/iOS 无震动也有听觉边界)。 + * 无语音链的轮次不再叠向导 turn earcon(input_open 独立作边界标记,二选一不叠响)。 + * - S1/S3/S4:input 阶段长按=状态查询(_statusQuery)——长度 4 档+进度 4 档+重听 + * 两账 5 档,13 句 status_* 整句预生成(禁运行时拼接);玩家主动查询,三档 guide 全可用。 + * - S5:announce/roundend 阶段非单击手势给 error 震(playback 维持静默豁免,02 §4.1)。 + * - S6:结算语音链阶段看守——gameover 瞬间进菜单则挂起,回结算屏补播(_deliverSettle); + * 承诺「单击屏幕,再来一局」永远只在结算屏上播(live-B 行 140-174:链在菜单里 + * 播完 → 承诺是假的 + 关菜单后结算屏死寂 8.4s)。 + * - S7:your_turn 每局只播一次(第 1 轮每次重播都重念,live-B 行 67/96-98)。 + * * 手势 → 音色映射: * up 上行琶音 / down 下行低音 / left 左声道弹拨 / right 右声道弹拨 / * tap 底鼓 / doubletap 双连响 @@ -77,6 +90,14 @@ const TEACH_BLUNT = { right: 'voice/t_blunt_right', tap: 'voice/t_blunt_tap', doubletap: 'voice/t_blunt_double', }; +// 状态查询分档整句(round5 S1/S3/S4;游戏层资产三档 guide 全可用,全句预生成禁拼接) +const STATUS_LEN = ['voice/status_len_short', 'voice/status_len_mid', + 'voice/status_len_long', 'voice/status_len_xlong']; // 2-4 / 5-8 / 9-12 / 13+ 音 +const STATUS_PROG = ['voice/status_prog_start', 'voice/status_prog_early', + 'voice/status_prog_half', 'voice/status_prog_late']; // 0 / ≤⅓ / ≤⅓-⅔ / 收尾 +const STATUS_ECO = ['voice/status_free2', 'voice/status_free1', 'voice/status_chance2', + 'voice/status_chance1', 'voice/status_out']; // 下一次重听消耗哪个桶(两账口径) + const BEST_KEY = 'soundgame.simon.best'; const AUTH_KEY = 'soundgame.auth'; // 大厅登录写入(见 web/index.html) @@ -115,13 +136,17 @@ export class SimonGame extends Game { this._recordSaid = false; // P2(round1 live):占用组合预告每局每种只播首次(答错时重播,见 _wrongAnswer) this._occAnnounced = new Set(); + // round5 S7:your_turn 每局只播一次(第 1 轮复活/重听重播不再重念) + this._turnHintSaid = false; + // round5 S6:待交付结算链(gameover 瞬间进菜单时挂起,回结算屏补播) + this._settleChain = null; } start() { // 预解码全部短音效与开场语音,消除首次播放延迟 this.audio.prewarm([ ...GESTURES.map((g) => TONE[g]), - 'sfx/gameover', + 'sfx/gameover', 'sfx/input_open', 'voice/t0_welcome', 'voice/t0_goal', 'voice/skip_hint', 'voice/t_try', 'voice/round_01', ]); this._timer(() => this._runTutorial(), 500); // 开场静默 0.5s 后进教学(无 BGM) @@ -151,7 +176,11 @@ export class SimonGame extends Game { this._onMenuGesture(g); break; default: - // playback/announce/roundend:纯聆听阶段手势静默忽略(02 §4.1) + // playback/announce/roundend:纯聆听/播报阶段手势静默忽略(02 §4.1); + // round5 S5:announce/roundend(非 playback)的误触给 error 震——00 §5.4 + // "做了手势 3 秒内必须有反馈",播报期被静默吞是"不知道自己在哪"的重灾区 + // (live-A 行 824-830:roundend 下滑开菜单零反馈;playback 维持静默豁免)。 + if (this.phase === 'announce' || this.phase === 'roundend') vibrate('error'); break; } } @@ -268,6 +297,8 @@ export class SimonGame extends Game { this.freeRelistens = 2; // 免费重听每局重置(round2 live P1) this._recordSaid = false; this._occAnnounced.clear(); // P2:新一局重新封顶(每种组合首次再播) + this._turnHintSaid = false; // round5 S7 + this._settleChain = null; // round5 S6:上一局挂起的结算链随新局作废 this._nextRound(); } @@ -345,8 +376,7 @@ export class SimonGame extends Game { } else { this._timer(() => { if (s !== this._session || this.phase !== 'playback') return; - vibrate('confirm'); // "轮到你了" - this.guide.turn({}); // turn earcon 每轮泛化(第 1 轮另有 your_turn 语音,下行) + vibrate('confirm'); // "播放完毕"("现在能答"由 _toInput 的 input_open 标记) // H2(round4)→ round1 live P2 改口:占用预告每种组合每局只播首次 //(_occAnnounced 记录;之后仅答错重听时随 retry_use 重播,见 _wrongAnswer)。 // 重听键与答案音共用词表的结构性冲突,换手势无解,改为轮次开场讲清判据。 @@ -355,12 +385,19 @@ export class SimonGame extends Game { if (this._occAnnounced.has(ids[0])) ids = []; else this._occAnnounced.add(ids[0]); } - if (this.round === 1) ids.push('voice/your_turn'); + // round5 S7:your_turn 每局只播一次(第 1 轮复活/重听重播不再重念) + if (this.round === 1 && !this._turnHintSaid) { + ids.push('voice/your_turn'); + this._turnHintSaid = true; + } if (ids.length) { + // 有语音链:向导 turn earcon 打头,链尾由 _toInput 的 input_open 收尾 + this.guide.turn({}); this._speakGuarded(ids, () => { if (s === this._session && this.phase === 'playback') this._toInput(); }, 2500 * ids.length); // 语音缺失兜底:每句 2.5s } else { + // round5 S2:无语音链时不叠 turn earcon——input_open 独立作"能答了"标记 this._toInput(); } }, 400); // 最后一个音播完 400ms 后 @@ -385,6 +422,9 @@ export class SimonGame extends Game { _toInput() { this.phase = 'input'; this.inputIdx = 0; + // round5 S2:input 开放标记音(游戏层资产,三档 guide/iOS 全可闻)——语音链 + // (占用预告/your_turn)播完才进这里,此前作答被静默吞(live-A 行 108-115)。 + this.audio.play('sfx/input_open'); // 向导层静默看门狗(round2 F1.2 礼仪重构 + round4 H4/H2):input 阶段无 BGM // 无超时,挂机永久静默。5s → nudge + gd_relisten 提示(H4:首级 10s→5s, // P4「10 秒干等」;升级级 25s 与级数不变);25s 升级**取消免扣机会自动重播 @@ -409,10 +449,17 @@ export class SimonGame extends Game { this._relisten(); return; } - // 未支持手势兜底(round1 live P1:答题阶段长按 9 秒零反馈,玩家以为卡死)—— - // 即时 error 震,不判错、不耗机会、不进重听。此前 TONE['longpress'] 为 - // undefined,audio.play(undefined) 直接抛 TypeError(事件回调内静默崩溃, - // 表象正是"手势被吞")。longpressend 是同一动作的收尾,静默不重复反馈。 + // round5 S1/S3/S4:input 阶段长按=状态查询(长度/进度/重听两账,分档整句)—— + // 长按是六手势之外的唯一空闲键位(键盘=按住空格),玩家主动查询不耗账不判错; + // longpressend 是同一动作收尾,静默不重复反馈。 + if (g === 'longpress') { + this._statusQuery(); + return; + } + // 其余未支持手势兜底(round1 live P1:无效手势零反馈,玩家以为卡死)—— + // 即时 error 震,不判错、不耗机会、不进重听(此前 audio.play(undefined) 直接 + // 抛 TypeError,事件回调内静默崩溃,表象正是"手势被吞")。longpressend 是 + // 长按的收尾事件,静默不重复反馈(长按本体已在上面走了查询路径)。 if (!TONE[g]) { if (g !== 'longpressend') vibrate('error'); return; @@ -462,6 +509,27 @@ export class SimonGame extends Game { this._speakGuarded(ids, () => { if (s === this._session) this._playSequence(); }); } + /** + * round5 S1/S3/S4:input 阶段长按=问状态(status_* 13 句整句预生成,数字分档, + * 禁运行时拼接——00 §3.2)。三句链:本轮长度档(2-4/5-8/9-12/13+ 音)→ 已答 + * 进度档(0/≤⅓/≤⅔/收尾)→ 重听账目档(下一次重听消耗哪个桶:免费 2/免费 1/ + * 机会 2/机会 1/两账空)。不耗账、不判错、不清进度;答错消耗路径与主动重听 + * 路径的分账口径与 _relisten 一致(归因真话)。教学不讲这句——查询是发现式 + * 辅助(旁白只承诺"记不住就向上滑重听"),主动查询的玩家三档 guide 都能用 + * (属玩家发起,不走向导插播通道)。 + */ + _statusQuery() { + const len = this.sequence.length; + const idx = this.inputIdx; + vibrate('confirm'); // 收到查询:轻确认震(longpress 无引擎内置震动) + const lenIdx = len <= 4 ? 0 : len <= 8 ? 1 : len <= 12 ? 2 : 3; + const progIdx = idx === 0 ? 0 : idx * 3 <= len ? 1 : idx * 3 <= len * 2 ? 2 : 3; + const ecoIdx = this.freeRelistens >= 2 ? 0 : this.freeRelistens === 1 ? 1 + : this.chances >= 2 ? 2 : this.chances === 1 ? 3 : 4; + // 相位保持 input:查询语音不闭作答窗口(玩家可以边听边继续答)。 + this._speakGuarded([STATUS_LEN[lenIdx], STATUS_PROG[progIdx], STATUS_ECO[ecoIdx]], null, 7500); + } + _roundClear() { this.phase = 'roundend'; const s = this._session; @@ -527,8 +595,15 @@ export class SimonGame extends Game { const ids = ['voice/gameover', this._scoreBandVoice(score)]; if (isRecord) ids.push('voice/new_record'); ids.push('voice/replay', 'voice/rules_prompt'); + // round5 S6 阶段看守:结算链只在结算屏交付——gameover 瞬间下滑进菜单时 + // 链挂起(_deliverSettle 见相位不对不播),回结算屏补播;承诺「单击屏幕, + // 再来一局」永远与所处阶段一致(live-B 行 140-174:链在菜单里播完 → 承诺 + // 在菜单内是假的 → 关菜单后结算屏死寂 8.4s)。重开(_beginGame)作废挂起链。 + this._settleChain = ids; this._timer(() => { - if (s === this._session) this._speak(ids, null); // 链播完停在 gameover,等手势 + if (s !== this._session) return; + this.audio.stopVoice(); // 抢占点火:整链替换重播,listen/ASR 窗口不碎 + this._deliverSettle(); }, 1400); // 状态 BGM(10 号文档 simon 表):sfx/gameover(约 0.95s,+700ms 起播) @@ -550,6 +625,24 @@ export class SimonGame extends Game { return 'voice/score_band6'; } + /** + * round5 S6:交付结算语音链。只在结算屏(phase==='gameover')播;在菜单则 + * 挂起(_settleChain 保留),回结算屏(_backToSettle)再补播——链内承诺 + * (单击重开/上滑规则/下滑菜单)只对听得见它们的相位负责。 + */ + _deliverSettle() { + if (this.phase !== 'gameover' || !this._settleChain) return; + const ids = this._settleChain; + this._settleChain = null; + this._speak(ids, null); + } + + /** 菜单返回结算页:补挂起的结算链(S6),并落相位。 */ + _backToSettle() { + this.phase = 'gameover'; + this._deliverSettle(); + } + _speakRules() { this._speak(['voice/rules', 'voice/rules_prompt'], null); } @@ -578,12 +671,12 @@ export class SimonGame extends Game { } else if (g === 'up') { this._speakRules(); } else if (g === 'down') { - this.phase = 'gameover'; // 下滑=关闭菜单回结算页(13 号文档 §7.5 菜单约定) + this._backToSettle(); // 下滑=关闭菜单回结算页(13 号文档 §7.5 菜单约定;S6 补播结算链) } else if (g === 'doubletap') { const sel = this._menuIdx; if (sel === 0) this._restart(); else if (sel === 1) { this.stop(); window.location.href = '../'; } - else this.phase = 'gameover'; // 返回:回到结算页 + else this._backToSettle(); // 返回:回到结算页(S6 补播结算链) } } diff --git a/web/simon/test/playtest.mjs b/web/simon/test/playtest.mjs index 30295d58..c82bbba1 100644 --- a/web/simon/test/playtest.mjs +++ b/web/simon/test/playtest.mjs @@ -328,6 +328,12 @@ function checkSeqConstraints() { /** announce →(单击跳过轮次播报)→ playback(手势静默忽略)→ input。 */ async function toInputViaSkip(round) { await advanceUntil(() => game.phase === 'announce' && !!audio._voice, { desc: `第 ${round} 轮播报` }); + // round5 S5:announce 阶段非单击手势给 error 震(00 §5.4 三秒反馈律;旧行为静默吞) + const v0 = vibLog.length; + await gesture('left'); + assert(game.phase === 'announce', `S5:第 ${round} 轮 announce 误触不推进相位`); + assert(vibLog.slice(v0).some((p) => Array.isArray(p) && p[0] === 60), + `S5:第 ${round} 轮 announce 误触给 error 震(不再静默吞)`); const skips = skipLog.length; await gesture('tap'); assert(skipLog.length === skips + 1, `第 ${round} 轮 round_* 播报单击可跳`); @@ -406,6 +412,15 @@ section('第 1-3 轮(含单击跳播报、playback 忽略、看门狗)'); assert(game._interval() === 700, '第 1 轮播放间隔 700ms'); await toInputViaSkip(1); await answerAll(); +assert(game.phase === 'roundend', '第 1 轮答完进 roundend 表扬链'); +{ + // round5 S5:roundend 播报期手势同样不静默吞(error 震 + 相位不推进) + const v0 = vibLog.length; + await gesture('left'); + assert(game.phase === 'roundend', 'S5:roundend 播报期误触不推进相位'); + assert(vibLog.slice(v0).some((p) => Array.isArray(p) && p[0] === 60), 'S5:roundend 误触给 error 震'); +} +assert(played('sfx/input_open'), 'S2:input 开放标记音 input_open 已播(第 1 轮 your_turn 链尾)'); await advanceUntil(() => game.phase === 'announce' && game.round === 2, { desc: '进第 2 轮' }); assert(played('voice/correct'), 'P1:每轮答对都播表扬(第 1 轮 correct,池轮播)'); @@ -454,18 +469,30 @@ assert(playCount('voice/gd_clear') === 2, 'P1:每轮答对都播表扬(第 4 section('第 5 轮:主动重听(上滑)两层账 / 重听拒绝 / 双击=作答(round3 G5 §8 + round2 live P1 §15)'); await toInputViaSkip(5); { - // 未支持手势兜底(round1 live P1:答题阶段长按 9 秒零反馈,玩家以为卡死) + // round5 S1/S3/S4:input 阶段长按=状态查询(长度/进度/重听两账,分档整句)。 + // 第 5 轮:len=6 → status_len_mid;idx=0 → status_prog_start;免费 2 次 → status_free2。 const idx = game.inputIdx; const ch = game.chances; - const vib0 = vibLog.length; + const v0 = vibLog.length; await gesture('longpress'); - assert(game.phase === 'input' && game.inputIdx === idx && game.chances === ch, - 'P1:input 阶段长按不判错、不耗机会、不进重听'); - assert(vibLog.slice(vib0).some((p) => Array.isArray(p) && p[0] === 60), - 'P1:input 阶段长按发 error 震动兜底(不再零反馈,也不再抛 TypeError)'); - const vib1 = vibLog.length; - await gesture('longpressend'); - assert(vibLog.length === vib1 && game.inputIdx === idx, 'P1:longpressend(同一动作收尾)静默不重复反馈'); + assert(game.phase === 'input' && game.inputIdx === idx && game.chances === ch && game.freeRelistens === 2, + 'S4:长按查询不判错、不耗账、不清进度'); + assert(!vibLog.slice(v0).some((p) => Array.isArray(p) && p[0] === 60), + 'S4:查询不再走 error 震兜底(长按已升为查询键)'); + await advance(3400); // 查询三句链播完(mock 语音 1s/句,onComplete 串行) + assert(playCount('voice/status_len_mid') === 1 && playCount('voice/status_prog_start') === 1 + && playCount('voice/status_free2') === 1, 'S1/S3/S4:查询三档整句(长度 mid/进度 start/账目 free2)'); + await gesture('longpressend'); // 收尾静默,不重复查询 + assert(playCount('voice/status_len_mid') === 1, 'S4:longpressend 静默不重复查询'); + // 答两音再查 → 进度档 early(idx=2、len=6:2*3 ≤ 6) + await answerPastDoubletaps(); + await answerPastUps(); + await gesture(game.sequence[game.inputIdx]); + await gesture(game.sequence[game.inputIdx]); + assert(game.inputIdx === 2, 'S3:查询后作答窗口原样可用(已答 2 音)'); + await gesture('longpress'); + await advance(3400); + assert(playCount('voice/status_prog_early') === 1, 'S3:进度档随 inputIdx 分档(early)'); } { // round3 G5:input 阶段双击永远=作答,主动重听改绑上滑(期望恰为 up 时上滑=作答) @@ -474,11 +501,13 @@ await toInputViaSkip(5); await answerPastDoubletaps(); await answerPastUps(); // 先把期望恰为 up 的音答掉 const relistenCount = playCount('voice/relisten'); + const ioBefore = playCount('sfx/input_open'); assert(game.freeRelistens === 2 && game.chances === 1, 'P1:第 5 轮账目起点 = 免费 2 次 + 真机会 1 次'); await gesture('up'); // 期望非 up → 第 1 次主动重听(免费) assert(game.freeRelistens === 1 && game.chances === 1, 'P1:第 1 次重听用免费额度(2→1),真机会不动'); assert(playCount('voice/relisten') === relistenCount + 1 && game.phase === 'roundend', '播 relisten 并重播'); await advanceUntil(() => game.phase === 'input', { desc: '重听重播后回输入' }); + assert(playCount('sfx/input_open') === ioBefore + 1, 'S2:重听重播后回 input 再发 input_open 标记'); assert(played('voice/gd_chances_left1'), 'P1:第 1 次后如实报余量(gd_chances_left1「还剩一次」,链尾句)'); assert(game.inputIdx === 0, '重听后输入进度清零'); } @@ -676,6 +705,47 @@ await advance(500); await advance(500); } +// ---------------------------------------------------------------- 场景三:round5 S6/S7 +// S6 结算链阶段看守:gameover 瞬间进菜单 → 链挂起不播 → 回结算页补播(承诺与相位一致)。 +// S7 your_turn 每局一次:第 1 轮复活重播不再重念。 +section('场景三:结算链阶段看守(S6)与 your_turn 每局一次(S7)'); +{ + const game3 = new SimonGame(audio, fakeEl()); + gameRef = game3; + const ytBase = playCount('voice/your_turn'); // 主局第 1 轮已播过,用增量断言 + game3.start(); + await advanceUntil(() => game3.phase === 'tutorial' && game3.teachAwait, { desc: '场景三教学' }); + await gesture('down'); // 跳教学 + await advanceUntil(() => game3.phase === 'input', { desc: '场景三第 1 轮输入' }); + assert(playCount('voice/your_turn') === ytBase + 1, 'S7:第 1 轮首次开放播一次 your_turn'); + // 答错一次(chances=1)→ 复活重播 → your_turn 不重念 + const wrong = GESTURES.find((g) => g !== game3.sequence[0] && g !== 'doubletap' && g !== 'up'); + await gesture(wrong); + assert(game3.phase === 'roundend' && game3.chances === 0, '场景三:答错消耗唯一复活'); + await advanceUntil(() => game3.phase === 'input', { desc: '场景三复活重播后回输入' }); + assert(playCount('voice/your_turn') === ytBase + 1, 'S7:复活重播不重念 your_turn(每局一次)'); + // 再答错 → gameover;死亡瞬间下滑进菜单(压力线手型,live-B 行 141) + const wrong2 = GESTURES.find((g) => g !== game3.sequence[0] && g !== 'doubletap' && g !== 'up'); + await gesture(wrong2); + assert(game3.phase === 'gameover', '场景三:复活耗尽再答错 → gameover'); + const go0 = playCount('voice/gameover'); + const sb0 = playCount('voice/score_band1'); + await gesture('down'); + assert(game3.phase === 'menu', 'S6:死亡瞬间下滑进菜单(压力线可复现路径)'); + await advance(2000); // 越过结算链原定 +1400ms 点火点 + assert(playCount('voice/gameover') === go0 && playCount('voice/score_band1') === sb0, + 'S6:菜单内不交付结算链(「单击再来一局」不在错误的相位播)'); + assert(game3._settleChain && game3._settleChain.length === 4, + 'S6:结算链挂起待补播(gameover+score_band+replay+rules_prompt)'); + await gesture('down'); // 关菜单回结算页 + assert(game3.phase === 'gameover', 'S6:关菜单回结算页'); + await advanceUntil(() => playCount('voice/gameover') === go0 + 1, { desc: 'S6:回结算页补播结算链', max: 4000 }); + await advanceUntil(() => playCount('voice/score_band1') === sb0 + 1, { desc: 'S6:补播链续播 score_band1', max: 4000 }); + game3.stop(); + gameRef = game; + await advance(500); +} + // ---------------------------------------------------------------- 资产引用校验 section('资产引用校验(ogg+m4a 双格式,voice 双性别)'); {