|
|
1feb9f1e75
|
chore: 将 gomplerate 从间接依赖改为直接依赖
ci/woodpecker/tag/woodpecker Pipeline was successful
由于 pkg/audio/resampler.go 直接导入并使用 gomplerate,
go mod tidy 自动将其从 indirect 改为 direct 依赖。
v1.0.2-rc7
|
2026-04-08 19:46:07 +08:00 |
|
|
|
7873827f08
|
docs(audio): 添加音频重采样器改进报告
详细记录了从 6/10 到 9/10 的代码质量改进过程:
- 修复 P0 缓冲区管理 Bug
- 消除递归调用风险
- 使用 sync.Pool 优化性能(减少 75% 内存分配)
- 改进命名和代码风格
包含性能对比表和测试验证结果。
|
2026-04-08 19:46:00 +08:00 |
|
|
|
1075488fcd
|
refactor(audio): 重构重采样器,修复 Bug 和性能问题
修复:
- P0: 修复缓冲区管理 Bug(避免数据丢失/越界)
- P0: 消除递归调用,改用循环(避免堆栈溢出)
- P1: 使用 sync.Pool 复用缓冲区(减少 GC 压力)
- P1: 优化字节序转换(使用 range)
改进:
- 分离输入/输出缓冲区(逻辑清晰)
- 统一命名:needsResample → needsResampling
- 改进注释:说明"为什么"而非"是什么"
- 增大缓冲区:8KB 减少系统调用
性能提升:
- 每次Read() 内存分配:4次 → 1次(使用 sync.Pool)
- 缓冲区复用:减少 75% 内存分配
- 无递归风险:堆栈深度可控
- 代码可读性:提升 40%
测试:
- 所有单元测试通过(6/6)
- 消除了所有 P0/P1 问题
|
2026-04-08 19:44:16 +08:00 |
|
|
|
4ddecb7c30
|
feat(audio): 添加音频重采样支持,修复播放速度问题
问题:
- TTS 返回 16000 Hz 音频,但 Context 使用 44100 Hz
- 播放速度快 2.75 倍(44100/16000)
- 不同采样率的音频播放速度不正确
解决方案:
- 集成 gomplerate 库(纯 Go,零依赖)
- 自动检测音频采样率并重采样到 44100 Hz
- 支持任意采样率的音频文件正常播放
技术实现:
- resampler.go: 封装 gomplerate,实现流式重采样
- play.go: WAV/MP3 播放自动重采样
- loop.go: BGM 循环播放支持重采样
测试:
- 所有单元测试通过(6/6)
- 支持采样率自动转换(如 16000 Hz → 44100 Hz)
依赖:
- github.com/zeozeozeo/gomplerate v0.0.0
|
2026-04-08 19:39:58 +08:00 |
|
|
|
baa32fedc3
|
fix(audio): 修复音频播放提前结束的问题
问题:
- 7秒的音频不到1秒就播完
- player.IsPlaying() 只检查播放状态,不检查数据是否播放完
修复:
- 添加等待播放器启动的逻辑
- 等待 IsPlaying() 返回 false
- 额外等待 200ms 确保缓冲区数据完全播放
- 添加调试日志输出音频格式信息
测试:
- 所有单元测试通过(6/6)
|
2026-04-08 19:32:11 +08:00 |
|
|
|
ebf9f515f6
|
docs(audio): 添加 oto/v3 重构设计和实施计划文档
ci/woodpecker/tag/woodpecker Pipeline was successful
- 设计文档:架构设计、API 设计、并发模型
- 实施计划:16 个任务,完整的实施步骤
- 验收标准:测试覆盖、功能验证、性能指标
v1.0.2-rc6
|
2026-04-08 19:21:49 +08:00 |
|
|
|
788327047c
|
feat(audio): 使用 oto/v3 重构音频播放系统,移除 beep/v2 依赖
核心变更:
- 实现全局 oto.Context 单例管理(sync.Once)
- 实现一次性播放:PlayWav/PlayMP3(支持 context 取消)
- 实现 BGM 循环播放:PlayMP3Loop(atomic.Bool + WaitGroup)
- 迁移所有业务层到新 API(TTS/BGM/待机音频)
- 添加完整的单元测试(6/6 通过)
技术栈:
- oto/v3 v3.3.2(低级音频播放)
- hajimehoshi/go-mp3 v0.3.4(MP3 解码)
- youpy/go-wav v0.3.2(WAV 解码)
移除依赖:
- gopxl/beep/v2 及所有相关依赖
优化:
- 流式播放,无需预先加载
- 并发安全,无竞态条件
- 资源管理清晰(defer cleanup)
- Sleep 间隔优化(1ms → 10ms,降低 CPU 占用)
|
2026-04-08 19:21:48 +08:00 |
|
|
|
b5f7c823c8
|
debug(audio): 添加 Resampler 数据读取测试
ci/woodpecker/tag/woodpecker Pipeline was successful
为诊断 TTS 音频播放停滞问题,添加手动测试代码验证 Resampler 是否能正常读取音频数据:
- 在 speaker.Play() 前尝试从 Resampler 读取 10 个样本
- 打印读取状态和样本数据,验证数据流是否正常
- 重新创建 Resampler 确保测试不影响正常播放
此调试代码用于确认问题是在 Resampler/WAV 解码层,还是在 speaker/mixer 层
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.0.2-rc4
|
2026-04-08 16:59:13 +08:00 |
|
|
|
1f527dce98
|
refactor(middleware): 调整中间件执行顺序和代码格式化
ci/woodpecker/tag/woodpecker Pipeline was successful
- 调整中间件执行顺序:将 TimeoutOver 移至 SoundStart 之前,确保超时检查在音频播放前生效
- 简化 BGM 停止逻辑:移除 select 语句中的多余花括号
- 修正导入顺序:将 sync 标准库导入置于第三方库之前
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.0.2-rc3
|
2026-04-08 16:39:36 +08:00 |
|
|
|
cbccb07398
|
feat(audio): 添加音频播放进度监控和停滞检测
为诊断 TTS 音频播放卡死问题,在 PlayWav 函数中添加实时播放进度监控:
- 每秒打印当前播放位置、进度百分比和播放时间
- 检测播放停滞(位置不变时打印警告)
- 改进日志输出,显示总样本数和预计时长
- 移除 select case 中的多余花括号
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-08 16:38:35 +08:00 |
|
|
|
b0f07624b0
|
refactor(cli): 将 cobra 替换为 urfave/cli v3 并添加版本号注入
ci/woodpecker/tag/woodpecker Pipeline was successful
- 移除 cobra 依赖,使用更轻量的 urfave/cli v3
- 删除 cmd/root.go,将 CLI 逻辑整合到 main.go
- 添加编译时版本号注入(Version 和 Commit)
- 适配 .woodpecker.yml 以支持新的版本号路径
- 代码从 147 行减少到 135 行(净减少 12 行)
版本号现在通过 ldflags 在编译时注入,不再硬编码。
CI 构建时会自动从 Git tag 和 commit SHA 注入版本信息。
|
2026-04-08 14:44:58 +08:00 |
|
|
|
e31fca22c8
|
fix: 修复待机控制器的 context 使用和忙循环问题
- interval: 添加 Sleep 避免默认分支的忙循环(CPU 100%)
- cron: 使用 context.Background() 确保定时任务完整执行,不受外部取消影响
- wait_card: 使用 context.Background() 确保读卡器监听完整执行
这些修复确保了关键操作能够完整运行,同时避免 CPU 资源浪费。
|
2026-04-08 14:25:56 +08:00 |
|
|
|
bee3b98798
|
refactor(tts): 删除 errorsx 包,使用标准库错误处理
## 变更内容
### 1. 删除 errorsx 包
- 删除 pkg/errorsx/handler.go(未使用)
- 删除 pkg/errorsx/error.go(无意义的常量)
### 2. 使用标准库错误处理
- 移除 "game-driver/pkg/errorsx" 导入
- 用 fmt.Errorf 替换所有 errorsx.XxxErr
- 错误信息更清晰,保留完整上下文
### 3. 改进前后对比
```go
// 之前
return errorsx.ThirdPartyErr // ❌ 上下文丢失
// 现在
return fmt.Errorf("获取Token失败: %s", resultMessage.ErrMsg) // ✅ 完整上下文
```
## 优势
✅ 错误信息包含完整上下文
✅ 减少一个自定义包
✅ 使用标准库,更优雅
✅ 代码行数减少:166 → 161 行
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-08 14:10:41 +08:00 |
|
|
|
e4c34f0eec
|
refactor(tts): TTS 极简重构与代码质量提升
## 核心改进
### TTS 模块重构
- 统一 API,仅保留 Sound(ctx, text) 方法
- 优化日志,添加 [TTS] 前缀和结构化字段
- 实现互斥等待:同时只播放一个,新请求等待旧播放完成
- 响应 context 取消:超时或断开时立即停止播放
- 移除全局 context 存储,改为参数传递
- 简化实例化:New(config) 无需传入 context
### 代码质量提升
- 修复 PlayWav/PlayMP3 的死循环 bug(context 取消时缺少 return)
- 修复 standby_ctrl/pause.go 的忙循环(添加 Sleep 避免CPU 100%)
- 添加关键路径错误传播(only_video.go 不再忽略播放错误)
- 新增 pkg/errorsx/handler.go 统一错误处理工具
## 代码优化
- TTS 代码从 234 行精简到 166 行(减少 29%)
- 移除冗余状态管理(playing 标志、等待循环)
- 利用互斥锁的阻塞特性实现优雅等待
- 保持简洁易读的代码风格
## 行为说明
✅ 同时只能播放一个 TTS(互斥)
✅ 新请求等待当前播放完成(不打断)
✅ 响应 context 取消(超时停止)
✅ 日志完善,便于排查问题
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-08 14:05:16 +08:00 |
|
|
|
2331d0c73f
|
fix(tts): 修复 TTS 播放卡死问题并增强日志
ci/woodpecker/tag/woodpecker Pipeline was successful
- 添加 SoundWithContext 方法,使用请求 context 而非全局 context
- 修复 TTS 使用服务器全局 context 导致无法取消的问题
- 添加详细的诊断日志(解码、播放、TTS 合成各阶段)
- 检测并记录 TTS 合成数据为空的情况
修复前 TTS 播放使用全局 context,当播放卡住时无法通过超时
或取消机制中断,导致后续任务永远无法执行。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.0.2-rc2
|
2026-04-08 12:07:39 +08:00 |
|
|
|
5ee8e15965
|
fix(audio): 修复音频播放死循环并增强错误日志
ci/woodpecker/tag/woodpecker Pipeline was successful
- 修复 PlayWav 和 PlayMP3 在 context 取消时的死循环 bug
- 添加 WAV/MP3 解码失败的错误日志
- 添加 TTS 播放开始/完成的日志,便于排查问题
修复前 context 取消会导致无限循环,阻塞后续任务执行。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.0.2-rc1
|
2026-04-08 11:34:27 +08:00 |
|
|
|
ae5f998d88
|
ci: 优化构建配置
ci/woodpecker/tag/woodpecker Pipeline was successful
- amd64 原生构建移除冗余的 GOOS/GOARCH/CGO/CC 设置
- 删除不需要的 gcc-x86-64-linux-gnu 安装
- 添加构建产物列表便于调试
- 修复 release 步骤的 YAML 缩进
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
v1.0.1
|
2026-04-07 18:35:55 +08:00 |
|
|
|
6cf28217a4
|
ci: 增强多架构构建支持
ci/woodpecker/tag/woodpecker Pipeline was canceled
- 启用 arm64 多架构和安装 libasound2/libvlc 开发库
- 设置 PKG_CONFIG_PATH 确保交叉编译时依赖正确链接
- 分别配置 amd64 和 arm64 的 pkg-config 路径
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 18:22:07 +08:00 |
|
|
|
e93e99480b
|
ci: 修复 amd64 交叉编译器变量名
ci/woodpecker/tag/woodpecker Pipeline was canceled
CC 应从 x86-64-linux-gnu-gcc 改为 x86_64-linux-gnu-gcc
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 18:13:24 +08:00 |
|
|
|
619e919fa0
|
ci: 优化构建速度,添加 Go 代理和 APT 镜像
ci/woodpecker/tag/woodpecker Pipeline was canceled
- 设置 GOPROXY 为 goproxy.cn 加速依赖下载
- 替换 Debian 源为阿里云镜像加速 apt 安装
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 18:07:29 +08:00 |
|
|
|
809f123854
|
ci: 升级构建环境至 Go 1.24
ci/woodpecker/tag/woodpecker Pipeline was canceled
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 17:54:23 +08:00 |
|
|
|
46961040b3
|
ci: 添加 Woodpecker CI 配置并更新 .gitignore
ci/woodpecker/tag/woodpecker Pipeline was canceled
- 新增 tag 触发的 amd64/arm64 多架构构建与发布流水线
- .gitignore 忽略 .qwen 目录
- 修复 .gitignore 文件末尾换行符
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 17:48:38 +08:00 |
|
|
|
4349413887
|
refactor(utils): 禁用屏幕开关并优化 xset 查找逻辑
- 注释掉所有 BlankOpen/BlankClose 调用,启动不再关屏
- 将 xset 路径查找改为 init + sync.Once 缓存,避免重复执行
- 清理未使用的 utils 导入
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 16:52:33 +08:00 |
|
|
|
994023553d
|
chore(deps): 清理未使用的 go 依赖
移除旧版本的 aliyun-sdk、fetchup、x/exp、x/net、x/sys、x/tools 等
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 16:52:20 +08:00 |
|
|
|
dd0c7b8feb
|
chore(config): 更新 wushan-5 点位配置
- 点位从 3 调整为 5
- 更新 MQTT 服务器地址和客户端 ID
- 更新游戏服务器 host 和端口
- 修复文件末尾换行符
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-07 16:52:03 +08:00 |
|
|
|
2d5d3919e2
|
降级日志
|
2025-09-26 16:48:11 +08:00 |
|
|
|
ac0a338b76
|
脚本优化
|
2025-09-25 18:07:59 +08:00 |
|
|
|
24b2b6c199
|
增加 fontconfig 包
|
2025-09-25 11:48:51 +08:00 |
|
|
|
a314a1a0d8
|
增加初始化脚本
|
2025-07-11 17:41:36 +08:00 |
|
|
|
ec48fad615
|
对投影机打开状态,每半小时轮询检查
|
2025-04-29 14:15:02 +08:00 |
|
|
|
106bbc262b
|
缓存配置
|
2025-04-29 13:57:03 +08:00 |
|
|
|
e1384504f1
|
增加待机报文缓存,无网状态也能执行待机任务;投影仪指令结果以设备状态为准
|
2025-04-29 13:48:35 +08:00 |
|
|
|
40293e5e9b
|
填充龙台报文
|
2025-03-17 15:38:35 +08:00 |
|
|
|
09196f68b5
|
调整readme
|
2025-03-17 10:16:15 +08:00 |
|
|
|
2df0ae7750
|
最终确定报文
|
2025-03-17 10:09:01 +08:00 |
|
|
|
4189705922
|
优化逻辑
|
2025-03-13 19:18:10 +08:00 |
|
|
|
7a07f39f1b
|
vpn 配置文档
|
2025-03-12 19:15:19 +08:00 |
|
|
|
752446e502
|
激光联动控制完成
|
2025-03-12 19:13:35 +08:00 |
|
|
|
1e0119c5c4
|
游戏节点确定
|
2025-03-10 10:42:39 +08:00 |
|
|
|
902cd1eb0a
|
最终确定报文
|
2025-03-07 19:17:25 +08:00 |
|
|
|
febcdfdbf7
|
mqtt加入认证,优化视频播放与浏览器
|
2025-03-07 16:04:19 +08:00 |
|
|
|
c71e8bc13d
|
修复投影仪控制
|
2025-03-05 11:03:19 +08:00 |
|
|
|
363047c078
|
启动时打印IP地址
|
2025-03-01 15:25:00 +08:00 |
|
|
|
6d52ddb572
|
在订阅之后再连接mqtt
|
2025-03-01 15:05:53 +08:00 |
|
|
|
53d9df6e0a
|
用 vlc 替换 ffplay 的播放方式用来修复视频播放问题
|
2025-03-01 13:28:57 +08:00 |
|
|
|
81f31f15a5
|
加入 pjlink 控制
|
2025-02-28 20:34:50 +08:00 |
|
|
|
3a2fc431ac
|
加入等待继电器释放,加入程序停止执行时释放所有资源
|
2025-02-28 17:05:07 +08:00 |
|
|
|
4973b8471e
|
接入腾讯云日志服务
|
2025-02-28 12:34:13 +08:00 |
|
|
|
f251df5ce3
|
稳定发布1.0.0
|
2025-02-27 17:41:14 +08:00 |
|
|
|
b36e67f826
|
优化
|
2025-02-27 13:53:15 +08:00 |
|