Commit Graph
164 Commits
Author SHA1 Message Date
Henry_Du 34d9ed00d6 fix: 解决自动更新无限重启循环 + 终点站列车不显示在预测列表
1. CloudServer: publishStationUpdate 发布时同步 Gitea 最新脚本到本地副本
   - 新增 fetchGiteaScript() 一次下载全文
   - 发布更新时将 Gitea 脚本内容写入 stationScriptPath
   - 保证 targetVersion 与 /downloads/station_broadcast.lua 内容版本一致

2. 客户端 AutoUpdate.apply: 下载后校验版本一致性
   - 从下载内容正则提取 APP_VERSION_TEXT
   - 若 downloadedVersion ~= targetVersion 则中止更新,防止 reboot loop
   - 写入错误日志便于排查

3. 预测显示: 在站列车(尤其终点站)强制插入 upcomingTrains 列表头部
   - CRN 可能从 TrainStops 提前移除终点站列车
   - 使用 normalizeUpcomingKey 去重避免重复条目
   - 固定 ETA=0,确保 CURREN T TRAIN 对应列车能在 UPCOMING 中可见

版本号 v1.0.68 -> v1.0.69
2026-08-16 12:32:11 +08:00
Henry_Du 82a4ecd3e8 fix: 确保在站列车(包括终点站列车)始终显示在预测列表中
- 当 State.currentTrain 存在时,手动将其信息插入 upcomingTrains 列表头部
- 解决终点站列车被 CRN 导航系统从 TrainStops 提前移除导致预测区无显示的问题
- 使用 normalizeUpcomingKey 去重,避免重复条目
- 版本号 v1.0.68 -> v1.0.69
2026-08-16 12:22:50 +08:00
Henry_Du 1b958c25df feat(display): 标注终点站[END]与下一站[NEXT]并修复多项显示bug
- 修复所有站误标[END]:原来用instruction.id判断是错误的,Create中每个停靠站都是create:destination;现在改为用Utils.getDestination()匹配或取列表最后一个站作为终点站
- 过滤包含NaN的无效站点名
- 当前站匹配:先尝试『站名+站台号』严格匹配(避免CB-03 5和CB-03 6同时高亮,匹配不到再退化到站名匹配
- 新增『下一站』标识:~前缀 + 橙色 + [NEXT]后缀
- 新增『终点站』标识:黄色 + [END]后缀
- 当前站:>前缀 + 绿色 + << 标记
- 未到达站:*前缀 + 白色
- 已过站:浅灰色
- 版本号升级至 v1.0.68
2026-08-16 12:01:04 +08:00
Henry_Du 1d99634957 fix(audio): 修复导致完全没有声音的回归错误,添加超时防止挂起,修复等待缓冲区清空的逻辑 2026-08-16 11:58:31 +08:00
Henry_Du af00d57e68 feat: 发布更新时优先使用远程 Gitea 仓库的版本号 2026-08-16 11:54:29 +08:00
Henry_Du 4b972c3ae6 fix(display): 修复时刻表不显示的多个问题
- 将宽度阈值从 50 降低到 30,适配更小的 monitor
- 重构 schedule.entries 解析逻辑:兼容非纯数字索引(用 pairs 收集后排序)
- 修复视觉逻辑 bug:已到达站(浅灰) vs 未到达站(白) 颜色搞反
- 增加 schedule 为 nil/invalid 时的错误提示显示
- 增加调试日志输出 monitor 尺寸和提取到的站点数
- 版本号升级至 v1.0.65
2026-08-16 11:50:44 +08:00
Henry_Du 71f6800a2a feat(display): 列车进站后在屏幕右侧显示时刻表信息
- 新增 Utils.extractAllStationsFromSchedule() 从时刻表提取所有站点
- 重构 Display.render() 实现左右分栏布局
- 列车存在且屏幕宽度>=50时启用右侧时刻表面板
- 使用颜色区分:已过站(浅灰)/当前站(绿色高亮+>)/未到站(白)/终点站(黄色+[END])
- 版本号升级至 v1.0.64
2026-08-16 11:45:37 +08:00
Henry_Du b74eb252e3 feat: 在后端增加解析远程 Gitea 最新版本号的接口并展示在前端 2026-08-16 11:40:47 +08:00
Henry_Du 298308b7f3 fix(audio): 修复非高音质环境下 PCM 音频分片播放时的爆音问题
1. 移除 server.js 生成的每个音频分片携带的 44 字节 WAV 头,防止将其作为音频样本解码导致每 0.25 秒出现点击声 ('哒')。 2. 优化 playAudio 队列满时的轮询机制,从原先阻塞等待 speaker_audio_empty(会导致扬声器饥饿)改为使用 0.05 秒的定时器定期尝试,以保持缓冲区处于满载状态。 3. 同步修复了 station_broadcast-warning.lua 中潜在的相同轮询饥饿问题。 4. 版本号递增至 v1.0.62。
2026-08-16 11:32:00 +08:00
Henry_Du 6b1a531b77 fix(audio): 修复在没有高音质模块时,回退播放实时音频流产生刺耳噪音及可能导致卡死的问题 2026-08-15 23:30:09 +08:00
Henry_Du 2eddc9fefe 1.0.61 2026-08-15 23:13:10 +08:00
Henry_Du 51968cc825 fix(audio): 当扬声器不支持高音质时退回使用默认原版解码播放 2026-08-15 23:11:25 +08:00
Henry_Du 8f70c1f1d3 fix: 发车音乐列表过长时自动换行显示,修复 UI 溢出重叠问题 2026-08-04 13:13:03 +08:00
Henry_Du d8eee041c8 feat: 明确音频优先级,优化发车音频触发时机
- 到达与发车最高优先级(3),其次是进站预告(2),然后是延误警告(1),最低为背景音乐(0)

- 将发车音乐的触发时机从固定时间改为动态计算(音频时长+1.5秒补偿),确保音频结束时列车刚好发车

- 拆分 handleTrainApproaching 与 handleTrainAlert 逻辑,解耦进站与延误的优先级

- 版本号提升至 v1.0.59
2026-08-04 13:00:04 +08:00
Henry_Du 01ac488aef fix(client): 解决终端配置界面文字重叠与停站状态进站预告误报问题
1. 修复配置界面 UI 布局:当发车音乐可用列表过长时导致与后续输入提示重叠的问题,通过拆分显示并换行解决。
2. 彻底解决停站时误报进站预告:当 CC 电脑检测到当前站台已有列车停靠(`State.currentTrain ~= nil`)时,无论显示器上显示的是该站台的当前列车发车倒计时,还是被阻塞的下一班列车的到达倒计时,均强制抑制针对该站台的“进站预告”触发,直至站台被清空。
2026-08-04 11:29:45 +08:00
Henry_Du c86fca8449 feat(client): 全面增强站名模糊匹配逻辑,支持中英文混排关键词提取
1. 新增 `Utils.getKeywords(text)`:自动提取所有关键信息:
   - 包含中划线的字母数字组合(如 CE-03)
   - 连续的字母数字(如 CRH01)
   - 中文字符串,并在提取时自动过滤掉“站台”、“轨道”、“号”、“线”等噪音词。
2. 将 `Utils.getKeywords` 的匹配逻辑集成至 `Utils.isFuzzyMatch` 的最终校验中,即使在 `Utils.getBaseName` 无法精确比较的情况下,也能通过核心关键字(特别是纯中文关键字)判断两者是否为同一站台。
3. 将列车在站判定(`isAtStation`)对未知列车的目的站比较逻辑统一切换为使用强化的 `Utils.isFuzzyMatch`,保证时刻表、列车站名、NBT、显示器等来源的中英文站名信息均能互相精准匹配。
2026-08-04 07:42:57 +08:00
Henry_Du 6398146ee6 fix(client): 优化停站预告判断条件,彻底解决停站倒秒重复播报
修复由于列车时刻表中的目的站字符串与 NBT 或显示器获取到的目的地字符串不完全匹配,导致 `isAtStation` 判断失败的问题。
现在判断列车是否在站(`isAtStation`)主要依据 `trainName` 与 `State.currentTrain.id` 是否匹配。
对于未命名列车(如 ??? 或 Unknown),会额外通过模糊匹配或基础名称匹配目的地,从而保证当任何一列车在站台停留期间,系统正确识别它已停站,并忽略它因为离站倒数带来的 `etaSeconds > 0` 从而错误触发进站预告。
2026-08-04 07:37:11 +08:00
Henry_Du 86e58a5c59 feat(蜂鸣音频资源): 添加 fc2 至 fc14 共13个蜂鸣音效文件 2026-08-03 19:45:57 +08:00
Henry_Du aa10f0ebe1 chore(server): 屏蔽 HLS RTMP 推流失败的错误日志
由于当前环境未配置 RTMP 服务器,当 ffmpeg 尝试推送音频流到 127.0.0.1:1935 时会一直报错 `Connection refused` 从而导致控制台刷屏。
现将该错误日志注释屏蔽,使控制台保持清爽。
2026-08-03 12:35:16 +08:00
Henry_Du effcd30291 1 2026-08-03 12:33:59 +08:00
Henry_Du 3c25040a84 chore(client): 优化日志输出并清理测试代码
1. 引入全局 `CONFIG.DEBUG` 配置项(默认为 `false`),将所有 `Utils.log(DEBUG, ...)` 的大量扫描和推算日志默认隐藏,避免刷屏 CC 终端,需要时可通过配置文件开启。
2. 移除了排查 NBT 结构时添加的 `stop_dump.json` 导出逻辑,保持主机系统文件整洁。
2026-08-03 12:27:37 +08:00
Henry_Du fdbcfa3b9b fix(client): 优化停站时间获取,并在列车停站时禁用进站预告
1. 修复 `Utils.getStopTime` 和 `Utils.getNextStation` 会误匹配“非车站指令”(如修改最高速度等指令)中的文本的问题,现在仅在 `instruction.id == create:station`
或 `create:destination` 的条目中扫描,保证了 CC 电脑从 `create:track_station`
获取到的时刻表信息(包括计算出的停站时间)100% 准确。
2. 修复显示器(Display Board / NBT)在列车停站后依然显示“离站倒计时 ETA”,导致触发 `train_approaching` 的问题:如果当前列车已经在站内(`State.currentTrain` 存在且匹配),将强制忽略该列车的 `train_approaching` 触发逻辑,彻底解决列车停站时倒秒导致的重复播报。
2026-08-03 12:20:54 +08:00
Henry_Du 87fda31485 fix(client): 在 NBT 分支中也应用非车站指令过滤
将 `isStationDestination` 的过滤逻辑同时应用于 Block Reader(读取车站方块 NBT)的分支,
确保无论是通过显示屏还是 NBT 读取,都不会把“设置最高速度”等非停站指令当作列车进站播报。
同时已包含 `etaSeconds > 0` 修复,解决完全停站后重复播报的问题。
2026-08-03 12:09:08 +08:00
Henry_Du f846004091 fix(client): 过滤非车站指令并修复列车停站后重复播报进站预告的问题
1. 新增 `isStationDestination` 过滤器,在通过显示屏(Create Target)读取时刻表时,
   自动忽略包含“速度”、“重命名”、“时刻表”、“等待”、“卸载”等关键字的非车站指令,
   防止将这些指令当作车站并错误触发进站预告。
2. 修复显示屏读取到的负数 ETA 被错误解析为正数的问题(增加可选负号匹配)。
3. 将触发进站预告的条件从 `etaSeconds >= 0` 修改为 `etaSeconds > 0`。
   这样当列车完全停站(ETA=0或负数)时,将不再触发进站预告,彻底解决停站时间
   超过冷却期后导致的重复播报“进站预告”的问题。
2026-08-03 12:04:13 +08:00
Henry_Du 439ed9ea3c chore(client): 增加调试日志以导出 NBT stop 结构
用于排查非停站指令(如设置最高速度、新建时刻表区段)的 NBT 结构,
以便后续在代码中精准过滤这些非车站指令。
2026-08-03 11:28:32 +08:00
Henry_Du eb018dbae9 fix(client): 修复多个同名同目的地的列车互相清除 pending 状态的问题
当存在多个列车(如无名列车 ??? 开往同一目的地)时:
- 第二个 ETA 较远的列车会因为 `etaSeconds > 45` 走进 `else` 分支
- 原逻辑在 `else` 分支会直接清空该 key 的 pending 状态
- 导致排在前面的列车永远无法积累 5 秒的稳定期

修改:
1. 移除 `else` 分支,统一交由末尾的清理循环处理
2. 使用 `if not seenApproachKeys[announceKey]` 确保同一个 tick 只有 ETA 最近(排最前)的列车更新状态
2026-08-03 11:14:40 +08:00
Henry_Du 619d4e9a20 杂项(station_broadcast): 更新版本至v1.0.50并添加列车ETA调试日志
该调试日志会打印列车名称、ETA秒数、计时tick数及服务器tick率,仅在列车ETA不超过60秒且未触发过接近播报时输出,用于辅助排查列车接近播报的逻辑问题
2026-08-03 11:09:44 +08:00
Henry_Du 3c71d64f79 chore(station_broadcast): 升级版本至v1.0.49并调整ETA触发阈值
调整列车接近播报的ETA更新阈值,从3秒改为15秒以减少频繁触发
2026-08-03 10:40:12 +08:00
Henry_Du a36b21cfaf fix(server): 完善列车接近音频的处理与日志记录
新增列车接近音频入队和构建失败的日志输出
调整音频任务优先级为1,中断模式改为ifLower
修复音频构建为空时的静默失败问题
2026-08-03 10:22:04 +08:00
Henry_Du 101d392840 fix(CloudServer/server): 修复列车接近处理的ch序列遗漏的站台编号参数 2026-08-03 09:59:58 +08:00
Henry_Du c8681417a8 refactor(音频模块): 重构wav音频播放与解码逻辑
移除冗余的流式wav解码工具函数,复用现有decodeWavChunkToSamples
简化playChunkOnSpeakers实现,移除固定帧拆分逻辑与无用常量
优化音频日志与错误处理,解码失败时回退至HQ播放路径
调整应用版本号从v1.0.50回退至v1.0.47
2026-08-03 09:51:33 +08:00
Henry_Du bf1895ebc5 perf(audio): 优化音频播放帧处理逻辑,升级版本至v1.0.50
- 为test.lua添加标准文件头部注释
- 将station_broadcast.lua版本从v1.0.49更新至v1.0.50
- 新增NATIVE_AUDIO_FRAME_SAMPLES常量,将音频处理拆分为128样本每帧
- 修复空音频样本输入的边界异常问题
- 优化原生扬声器播放的循环逻辑,提升兼容性与执行效率
2026-08-03 09:49:01 +08:00
Henry_Du 394f81b9fa 1 2026-08-03 09:39:00 +08:00
Henry_Du 5fb81e3998 feat(audio): 实现流式WAV解码器并优化音频播放逻辑
将应用版本更新至v1.0.48;新增WAV头部解析与流式解码逻辑,替换原有的单块解码方案;添加扬声器speakWav兼容性检测,无支持设备时输出错误日志;优化WAV解码错误处理与日志输出,仅首次打印音频格式信息。
2026-08-03 09:37:00 +08:00
Henry_Du e89b82a8b4 1 2026-08-03 09:27:51 +08:00
Henry_Du 5dbd3d667f fix: restore speaker peripheral detection
Re-add speaker discovery during peripheral init so installed speakers are available for playback and log the detected count at startup.
2026-08-03 09:24:58 +08:00
Henry_Du 6964e7a47d refactor(station_broadcast): 清理冗余代码与注释,移除无用文件并更新gitignore
- 清理station_broadcast.lua中的冗余注释、废弃代码块,移除无用的节分隔注释
- 删除不再使用的austream.lua文件
- 更新.gitignore,新增临时文件与转储文件的忽略规则
2026-08-02 22:03:06 +08:00
Henry_Du 59865138c7 11 2026-08-02 21:26:41 +08:00
Henry_Du b2888c6c88 chore(安装脚本与文档): 修改安装脚本下载源并新增教程视频
将install_station_broadcast.lua中的旧下载地址替换为gitea仓库的https新源,同时新增FSE铁路广播系统教程视频文件
2026-08-02 21:24:57 +08:00
Henry_Du aef63ca444 fix: install updater alongside startup script
Download the update helper during install and expose it from the cloud server so new hosts can run manual updates immediately.
2026-08-02 21:20:28 +08:00
Henry_Du 10d15dfddc feat: add station auto update publishing
Publish the latest station script from the console so online hosts download and reboot immediately while offline hosts update on their next load.
2026-08-02 20:04:55 +08:00
Henry_Du 52a643a868 tune: shorten delay alert confirmation to 15 seconds 2026-08-02 19:48:01 +08:00
Henry_Du e29cc0c2ba tune: trigger approaching announcement earlier 2026-08-02 19:34:27 +08:00
Henry_Du 73f0ba8e69 tune: trigger stable approaching announcement at 45 seconds 2026-08-02 19:29:26 +08:00
Henry_Du 22ea43c1c1 tune: stabilize approaching trigger and show precise ETA 2026-08-02 19:25:57 +08:00
Henry_Du fb1256fbcc tune: add delay confirmation and approaching cooldown 2026-08-02 19:22:01 +08:00
Henry_Du 04591fc0c8 fix: dedupe delay alerts to reduce music stutter 2026-08-02 19:19:00 +08:00
Henry_Du 906594008a fix: remove ch-min from delay announcement 2026-08-02 19:06:20 +08:00
Henry_Du 126aaaf02f fix: trigger delay alerts from displayed CRN delay 2026-08-02 19:04:10 +08:00
Henry_Du 278de7de6b feat: announce delay alerts as soon as they appear 2026-08-02 18:58:54 +08:00