2f06c696fa
refactor: replace interface{} with any for modern Go style
...
Update callback function signatures to use the any alias introduced in Go 1.18,
improving code readability and following current Go conventions.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-04-09 16:52:48 +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
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
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 >
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 >
2026-04-08 11:34:27 +08:00
8780f8555e
解决部分已知bug
2025-02-27 11:36:40 +08:00
593d7758bf
播放游戏时,停止待机任务
2025-02-26 19:45:47 +08:00
aa634c8860
音色可配置
2024-11-26 17:51:40 +08:00
28291598bb
完成日志输出到文件、终端多处的处理
2024-11-13 16:11:59 +08:00
cc12b60437
优化全局zap的打印,修复待机任务出现多个的情况
2024-11-12 14:47:20 +08:00
edb8d30605
全面替换log为zap
2024-11-08 18:42:13 +08:00
ab0678aa3b
待机功能基本实现
2024-11-06 15:44:35 +08:00
ccfe0d311b
对接阿里语音合成证书
2024-11-05 14:52:11 +08:00
f9b9beea4b
基本逻辑完成
2024-11-01 17:40:34 +08:00