|
|
6ac23c28f1
|
feat(audio): 添加单声道转立体声转换功能
ci/woodpecker/tag/woodpecker Pipeline was successful
- 新增 monoToStereoReader 将单声道 WAV 实时转换为立体声
- PlayWav 自动检测单声道并应用转换管线
- 添加完整的单元测试覆盖转换逻辑
- 整理 import 顺序(goimports)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
2026-04-09 10:34:45 +08:00 |
|
|
|
ec168be827
|
feat(audio): 使用 Windowed Sinc 高质量重采样器替代线性插值
ci/woodpecker/tag/woodpecker Pipeline failed
统一音频输出采样率为 44100Hz,使用 go-audio-resampler 库实现
Windowed Sinc + Polyphase FIR 算法(VeryHigh 28-bit 精度),
替代原有的线性插值透传方案。
主要变更:
- 新增 sincResampler:三阶段 Read 循环(填充→处理→Flush)
- 双缓冲区架构避免输出样本丢失,复用内存减少 GC 压力
- WAV/MP3/BGM 播放管线全部接入 Sinc 重采样器
- 移除旧的 linearResampler 和透传模式
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-09 01:35:04 +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 |
|
|
|
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>
|
2026-04-08 16:59:13 +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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
660ae1326f
|
前三个点位所有功能已调通
|
2024-11-08 15:37:36 +08:00 |
|
|
|
ab0678aa3b
|
待机功能基本实现
|
2024-11-06 15:44:35 +08:00 |
|
|
|
f9b9beea4b
|
基本逻辑完成
|
2024-11-01 17:40:34 +08:00 |
|