zijunchiang
|
33b704bd5a
|
V1.3.9: 二维码跟随控制层 + 声音设置精简 + 远程滑杆绑定修复 + 搜索提速
1) 播放界面右上角二维码改为跟随控制层出现/隐藏
setFullScreenChromeVisible() 里同步 fullScreenQrOverlay 可见性,
updateFullScreenQrOverlay() 新建时按 fullScreenChromeVisible 初始化;
删除按"手机是否在点歌"自动隐藏的 qrAutoHideMonitor,
并删除扫码点歌弹窗里的"扫码点歌后自动隐藏播放界面二维码"提示词。
2) 声音设置删除音量调节与均衡器入口
移除「歌曲最大音量」滑杆(及 pendingMusicVolume)与「均衡器入口」按钮,
该弹窗只保留「切到点播歌曲时音量/原伴唱」这类策略选择; 音量与均衡器统一在「调音」弹窗。
3) 远程控制均衡器滑动点未完全绑定的真正原因: 滑杆被 <label> 包裹
<label> 会把内部任意位置的点击转发给 range -> 点轨道/点文字就跳值。
行容器 label -> div(.audio-row / .eq-band), CSS 相应改为类选择器;
滑杆元素高度 4px -> 32px(触控目标), 细轨道改由 ::-webkit-slider-runnable-track 绘制,
滑块 22px+5px 边框; attachThumbOnlyDrag 命中容差按 32px 滑块对齐(第二道防线)。
4) 远程搜歌界面: 歌曲移到左边、歌手移到右边
同步把默认搜索方式改为「歌曲」(否则左侧高亮与实际模式不一致), 初始 placeholder 同步。
5) 搜索提速(基于对 991MB/67 万首 muse.db 的实测)
实测: 中文 contains 热态 2~280ms; 拼音 GLOB 热态 0.2~150ms、冷态 1~15s;
歌手 EXISTS 34~70ms。瓶颈是冷态 I/O 与重复查库, 因此:
- 设备端新增 remoteSearchCache(LRU 24 条=4 查询×6 页, TTL 60s, 曲库刷新即清空),
同一「类型+关键词+页码」直接复用 JSON, 翻页/重复搜索不再查库;
- 手机端: AbortController 取消旧请求、同关键词不重复请求、首页返回后预热第 2 页、
搜索期间暂停 1s 状态轮询避免抢 I/O;
- 实测证明「一次多取几页」更慢(301 行 6.2s vs 21 行 0.7s), 故保持单页 LIMIT;
- 均衡器卡片收起时跳过其 DOM 刷新(展开时补渲染)。
版本号 1.3.8 -> 1.3.9(versionCode 14 -> 15)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 19:36:41 +08:00 |
|
zijunchiang
|
42919cc8e3
|
V1.3.8: 均衡器频段改横向滑杆 + 遥控确认键调节/退出 + 触控需按住滑块
1) 频段 UI 改为横向滑动条
删除 VerticalEqBar, 新增自绘控件 EqSlider(横向), 音量与频段共用:
每个频段一行「频率 | 滑杆 | 增益(dB)」, 带 0dB 参考线并从参考线填充到当前值。
弹窗布局随之改为: 音量横向杆 → 均衡器开关 → 预设 → 5 行频段滑杆。
2) 电视遥控交互(按确认键才可调节控件点, 同理按确认键退出控制)
- 焦点在滑杆上时方向键**不**改数值(先让焦点在控件间正常移动);
- 按确认键进入「调节态」(描边变亮变粗), 此时左右/上下键才调值;
- 再按确认键退出调节态; 调节态下 BACK 也只退出调节态、不关弹窗; 失焦自动退出。
新增 onInteractionFinished 回调, 退出调节态/抬手/失焦时统一 applyPlaybackMode +
saveState(音量) 或 applyEqualizerSettings(频段), 避免逐步落盘。
3) 触控优化(含远程控制): 必须按住控件点(滑块)才能滑动
- App: EqSlider 触摸按下时先做 hitsThumb 命中判断(容差 26dp, 含纵向范围),
未命中直接不处理 -> 点轨道空白不会跳变数值;
- 远程点歌页面: 新增 attachThumbOnlyDrag(), 对 input[type=range] 的
pointerdown/touchstart/mousedown 做同样的滑块命中判断, 未命中则 preventDefault,
命中才放行浏览器原生拖动; 滑块光标改 grab/grabbing 提示可拖。
4) 自适应随之调整: 预算按「频段行数」均分得到行高(clamp 38~56dp),
两遍 fit 超出时收缩的是频段行高(下限 34dp), 文字行仍全部 wrap_content。
版本号 1.3.7 -> 1.3.8(versionCode 13 -> 14)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 19:00:53 +08:00 |
|
zijunchiang
|
ce57068c68
|
V1.3.5: 调音弹窗重构(音量+均衡器) + 公放切歌修复 + 远程均衡器可折叠
1) 公放歌曲按「切歌」不再停止
原先 advancePlayback 在已点队列为空时把「用户主动切歌」一律当作停止(进入空闲态),
导致公放(随机)歌曲播放中按切歌就停了。现在: 若当前曲目属于公放清单
(RandomPlayQueue.isCurrentTrack), 按切歌直接接着播清单里的下一首;
不调用 markFinished(跳过不等于播完, 不该 +1), 但它已在 markStarted 计入本轮已播,
所以本轮不会重复。playRandomLocalSong 新增 skipped 参数用于提示文案。
2) 「调音」弹窗重构为 App 内唯一音控入口(播放界面 + 主界面右上角同一弹窗)
自上而下: 音量(横向控制杆, 即时生效) → 均衡器开关(默认关闭) → 均衡器预设
(自定义/流行/摇滚/舞曲, 手改频段自动转「自定义」并保存) → EQ 频段(竖向控制杆)。
全部即时生效, 因此没有「完成/确认」按钮, 只有关闭。
新增自绘控件 VerticalEqBar(SeekBar 只支持横向): 触摸拖动 + 遥控器上下键步进,
量程端点放行按键以便焦点离开, 焦点态自绘橙色边框并 suppressFill。
均衡器预设改为 标准(仅供远程"恢复标准", 不在 App 行内)/流行/摇滚/舞曲,
eqPreset 默认 "自定义"。
清除旧 UI 与代码: 删除 dialog_tuning.xml / dialog_audio_control.xml /
CircularVolumeView.kt, 移除 showAudioControlDialog / showAlignedTuningDialog /
showEqualizerDialog / showFullScreenVolumeDialog / bindAtmospherePreset /
updateToggleState 及 fullScreenVolume* / fullScreenToneControl /
hideFullScreenVolumeIndicatorRunnable 等字段与 dispatchKeyEvent 中的面板分支。
设置页「音频控制」改为指向调音弹窗(麦克风音量仍提示由功放硬件调节;
升降调保留在下一页「音调控制」)。
3) 远程点歌页面均衡器界面不变, 均衡器文字栏改为折叠按钮(默认收起)。
版本号 1.3.4 -> 1.3.5(versionCode 10 -> 11)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 15:38:48 +08:00 |
|
zijunchiang
|
4c22826ea1
|
V1.3.4: 新增音频均衡器(参考 OpenEQ) + 随机续播改为伪随机公放清单
1) 音频均衡器
- 新增 KtvEqualizer:参考开源项目 OpenEQ(Turbofan3360/OpenEQ, GPL-3.0) 的 EQUtils,
直接用系统 android.media.audiofx.Equalizer, 按设备真实频段数与增益范围自适应
(频段动态生成, 频段标签规则同 OpenEQ: 60/230/910/3.6K ...)。
- 挂载方式改为按"实际播放会话": player.audioSessionId() /
vocalPlayer.audioSessionId / embeddedVocalEngine.audioSessionId()(IJK 原生
IjkMediaPlayer_getAudioSessionId 即真实 AudioTrack 会话)。会话随歌曲变化,
由 500ms lyricTicker -> syncEqualizerSessions() 周期对齐, 消失会话延迟 3s 释放;
设备不支持按会话挂载时可显式开启 globalMix(会话 0, 默认关闭)。
- UI(showEqualizerDialog)与调音弹窗同风格: 深色圆角面板/紫色频段卡/橙色焦点反馈;
滑杆固定 30 档、步进由设备增益范围均分(保证 0 dB 可选中), 5 个预设
标准/流行/抒情/摇滚/唱将, 手动调整后转"自定义"。
- 四个入口: 主页顶栏「调音」弹窗、播放界面「调音」面板、声音设置「均衡器入口」、
远程点歌页面「均衡器」卡片(PATCH /api/v1/player/equalizer, 状态随
GET /api/v1/state 的 equalizer 下发)。
- 设置持久化: KtvStore.eqEnabled/eqPreset/eqLevels/eqGlobalMix。
2) 随机续播改为伪随机公放清单
- 新增 RandomPlayQueue(纯内存): 随机续播一次性生成打乱顺序的临时清单, 一轮内不重复;
播完一首 markFinished +1; next() 每次重新比对曲库, 自动吸纳新增歌曲、剔除已删除歌曲;
一轮播完自动开新一轮(尽量不把刚播完的放开头)。
- 不显示(界面不展示)、不关联已点清单(orderQueue 完全独立, 随机歌曲不入队)、
App 退出即清理(onDestroy 里 isFinishing 时 clear(), 不落盘)。
版本号 1.3.3 -> 1.3.4(versionCode 9 -> 10)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-20 12:02:07 +08:00 |
|
zijunchiang
|
4eb6b7b382
|
V1.3.3: 移除点击时的纯色遮罩层 + App 音量默认值改为 85%
1) 纯色遮罩层: TvFocusStyler.install() 会把背景整体换成不透明的红→橙渐变作为
焦点/按下反馈, 而 prepareTvFocusableTree(window.decorView) 会遍历整棵树施加。
按钮/Tab/卡片需要该反馈, 但铺满屏幕或覆盖播放画面的「表面型」View 一旦被套上,
触摸一次(state_pressed)就会用纯色盖住整屏内容。
新增 TvFocusStyler.suppressFill(view, focusable) 显式排除:
- 播放触摸层 playerTouchOverlay(浮在播放画面上方, 主要元凶; 传 focusable=false
保持其 isFocusable=false, 不再抢遥控器焦点)
- 全屏播放容器 R.id.container、启动加载遮罩 databaseLoadingOverlay
- 手机点歌二维码浮层(首页右下 + 全屏右上)、全屏音量面板
- 原 preserveBackground 更名为 suppressFill(播放画面宿主/海报沿用)
同时 install() 对已标记的 View 直接跳过, 不再替调用方强制可聚焦。
2) App 音量默认 85%: 新增 KtvStore.DEFAULT_MUSIC_VOLUME 作为唯一来源,
KtvStore 字段默认值与 optInt 兜底、MainActivity.musicVolume 初值、
调音弹窗「默认」按钮(原 80)统一引用; 远程页面 assets/mobile 默认值同步为 85。
版本号 1.3.2 -> 1.3.3(versionCode 8 -> 9)。按约定本次不发布 Release, 仅本地打包测试。
|
2026-09-14 03:37:17 +08:00 |
|
zijunchiang
|
61ad000daf
|
麦克风: 外接输入设备热插拔跟随重建 + 音量UI改硬件调节提示
- MicActivator: 支持 restart/setPreferredDevice(API26), 输入路由切换后重建占用
- MainActivity: AudioDeviceCallback(API23+)/HEADSET广播监听, USB/外接麦插入后
自动重建 AudioRecord 跟随当前输入设备
- 麦克风音量标准Android无输入增益API: 远程界面滑杆禁用并提示'由功放/混音器
硬件调节', 本地调音台+/−按钮同样提示, 避免假调节无效果
|
2026-09-06 01:33:59 +08:00 |
|
zijunchiang
|
0c26f6da68
|
麦动KTV: 移除Gitee数据库(改官方Muse同步), 歌曲源切w.w345.my, 远程日志+广告屏蔽
- DatabaseBootstrapper: 删除 Gitee 分片/manifest/blob 下载逻辑, 曲库只走官方 MuseDbSync
- build.gradle: 移除 GITEE_DATABASE_* 构建参数
- MainActivity: 重置数据库文案改为官方同步
- ktv_api.js: 歌曲源仅 w.w345.my, 缓存标记 7, 广告/错号资源拦截+重试
- 远程日志: 点歌记录 编号/标题/请求源/状态
|
2026-09-04 21:23:21 +08:00 |
|