fix(simon): 音序回响状态透明打磨(玩家代理取证迭代,玩法零改动)

- S2:新增input_open双音柔铃标记「能答了」边界(playback/input边界此前吞手势无标记)
- S1/S3/S4:input阶段长按=状态查询(13句status_*分档整句:长度4档×进度4档×账目5档,两本账口径一致,不耗账不闭窗)
- S5:announce/roundend非单击手势补error震(00 §5.4三秒反馈律)
- S6 P0:gameover下滑进菜单→结算链死锁8.4s修复(结算看守+挂起补播)
- S7:your_turn每局一次(原每轮重念)
- 取证:live两会话+4人设评审,S清单见research/simon-polish/round1/findings.md
- 验证:playtest 156/156 + guide 122 + 终检绿 + 14游戏回归零回退 + live复跑核对局14/14压力局8/8;状态感知2/5→4/5(四席同升),愿意玩改口为是
- 02号文档追加§9修订记录;新增input_open+13句status_*走完整TTS管线(flock串行QC无离群)
This commit is contained in:
xsl
2026-09-14 20:17:28 +08:00
parent ae850a4ce0
commit 258ffd5ba3
89 changed files with 7455 additions and 21 deletions
+354
View File
@@ -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);
});
@@ -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
@@ -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}
@@ -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)
@@ -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"
}
]
}
@@ -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
@@ -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}
@@ -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)
@@ -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"
}
]
}
+41
View File
@@ -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 局菜单双击未变)。
@@ -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 逐轮收紧的紧张感原样)。
+27
View File
@@ -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 填充、回结算屏即补播)。
- 单手盲操:过(长按查询单手自然)。
+29
View File
@@ -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 秒才轻提醒一次)。
+283
View File
@@ -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)