从2020年左右ChatGPT出现开始,生成式AI正以超乎大多数人预料的速度闯入我们的生活,并改变着周遭的一切。短短六年多,AI已经深刻影响了无数人的工作、学习与生活状态。
让我印象最深的,是今年过年那段时间:豆包的普及让无论老少都能轻松上手,玩得不亦乐乎。我的父母、身边的邻居、很多朋友都在用。而我们视障群体更是受益良多:豆包的图像描述和视频通话功能,得到了很多伙伴的一致好评。从去年下半年开始,豆包自身也在做App的无障碍优化,这让我们看到:AI的普惠性,真的可以解决视障用户的实际问题。
不过,目前的生成式模型能解决的,大多还停留在"屏内或屏外图像描述"这个层面。视障用户的痛点是多样的。于是我开始想:我能用AI做点什么?既能解决自己的问题,也能帮到更多人?
最近看一部动漫,主角说:"在乱世中,我希望自己能过得好一点;如果可以,也希望所有人都能过得好一点。"这句话给我很长一段时间的正向触动。AI这么发达,有人用它生成音乐、做视频、编程。那是不是可以用AI编程,来解决视障用户在手机使用中遇到的软件无障碍问题?比如,把无障碍现象描述给AI,把规范告诉它,让它分析具体问题并给出建议代码,再配合我们的反馈经验,给开发者提供可落地的优化思路。
但大厂有时并不那么愿意做无障碍优化,理由种种,暂且不论对错。既然他们不愿做,我们自己能否用AI手搓一个工具,解决自己以及有相同困境的伙伴的问题?
我觉得可以。于是尝试了几个AI模型,伙伴推荐的GLM 5.1代码能力较强,就用它写代码、创建文件,再用GitHub仓库自动构建编译,最后拿到安装包测试。我建了两个分支:Beta版和正式版。
我解决的是一个泛娱乐问题,手机K歌。无论是全民K歌还是唱吧,Android端朗读歌词都不方便。视障用户想K歌,要么提前背下歌词,要么用另一部手机听歌词,极其不便。我们无法像明眼人那样,看到歌词、知道旋律就能唱。反馈了这么多年,大厂解决的希望渺茫。于是就有了「梦仔伴唱」。
软件工作原理:在App内搜索想唱的歌(比如周杰伦《晴天》),点击后通过接口抓取带时间戳的LRC歌词。点击"开始播报"后,默认使用通知通道(因为没有注册无障碍服务的应用,无法调用无障碍接口播报)。我提供了两个通道(通知或媒体)和一个模式,用户可切换;另外还有个"跟随屏幕阅读器"开关,开启后会把歌词推送给屏幕阅读器播报,滑动焦点会打断当前句。
播报的核心逻辑:根据两句歌词的时间戳,计算时间间隔,提前播报下一句。用户可以调整播报时机(更快或更慢)。软件还内置了微软Edge TTS(在线),音质更自然,挂了会自动回退系统TTS。建议大家和屏幕阅读器使用不同的语音库,避免冲突。
点击开始播报后,后台会检测伴奏何时开始。受限于我的编程水平,检测其实不太准,只要检测到音乐播放就会开始播报,这块还需要大家适应。除了自动检测,还有手动模式:点击开始播报后选择"通过悬浮球朗读",歌词信息会推送到悬浮球(屏幕左下角或右下角的胶囊)。屏幕阅读器可触摸到它,进行播报控制(上一句、下一句、从头开始等)。你可以先打开全民K歌搜索歌曲,在点击"开始K歌"前,点击悬浮球上的开始播报按钮,并设置3秒或5秒倒计时。这样有足够时间用读屏去点"开始K歌",伴奏和播报大概率能跟上(因为播报按歌曲时间戳计算,有前奏就会同步)。
还可以开启首句提醒。如果间奏比较长,App会在开始时提醒第一句(比如"窗外的麻雀"),等第一句真正到来前3秒再读一次,加深印象,让演唱更从容。
核心功能就这些。除此之外,还有:
· 音量键、摇一摇、接近传感器控制(暂停或继续、上一句、下一句等)
· 在线试听,确认是不是要唱的歌
· 点击某句歌词直接跳转到该句并试唱,唱完自动停止(有助于学歌)
注意:试听接口和歌词接口不是同一个,有时歌词版本和音频版本对不上,暂时没太好的办法。软件目前免费,我也拿不到好的第三方开源接口,也没有服务器。目前的接口是几位伙伴提供的,非常感激。
最值得讲的是,做这个项目让我对无障碍的思考加深了很多。一方面,无障碍优化和UI可以兼得:我打磨时把悬浮球适配了无障碍操作,用户可用屏幕阅读器的上下滑动手势来切换模式(移至右上角、移至右下角、暂停或继续、展开或收起等)。整个软件每一个按钮、边边角角都适配了无障碍操作,理论上屏幕阅读器交互完全无死角。我为此总结了一份无障碍适配案例,针对这个软件,希望特别是自定义控件的场景,能给大厂或个人开发者一些启发。这份案例的链接是:[无障碍适配案例](https://mp.weixin.qq.com/s/IBNGlqR_OMKnhZFU1Dw_fA)
无障碍优化真的不难,难的是没有真正站在视障用户的角度去想。不光要让它"可读",还要考虑"怎么读更好"。比如歌名与歌手之间用空格还是英文逗号加空格,停顿长度不同。只有考虑到这一步,才是真正的无障碍,而不是仅仅加个标签。
当然我也遇到了一些当前无法解决的无障碍问题:比如点开搜索框后,搜索历史外侧有一个巨大的无障碍焦点,修了好几轮都没修掉,应该是组件布局问题。想修得重构,代价太大(AI token也不便宜),小瑕疵暂且这样。类似情况还有设置页的"手风琴"模式,点击展开,但没有跳到二级页面。有视障用户反馈说二级页面更友好干净,但最初没采用这种设计,现在想改代价非常大。这让我意识到,很多时候还是站在自己的角度设计,没有真正站在更多视障用户的日常使用角度。哪怕我把无障碍优化放在开发之初、写第一行代码时就考虑了,依然会留下这类问题。更遑论大厂顾忌多、流程杂,一个无障碍问题可能排期到很久以后,甚至等到软件重构才能解决。这可以理解。但用户高频反馈的问题长期得不到解决,一定是态度问题,不是技术问题。
我冒昧地把整理的无障碍规范发给了大厂的朋友,希望能帮他们定义更完善的适配规范和案例,也希望网上能多些这样的参考,让新接触无障碍的开发者能快速找到资料、拿来就用,避免重复造轮子。希望这个项目能真正帮到视障者。
AI的能力真的很强大,用好了,真能帮到我们。
下载链接:[梦仔伴唱下载](https://www.guangyapan.com/s/1912795710143938564_aeWhjBu726g3wbT0)
QQ群:627298458(欢迎大家加群讨论)
此前我在社区发布过1.0版本,当时不够完善。这次2.0版本迭代了很多,可以日常使用了。只要在线搜索功能不坏,理论上就能一直用下去,永久免费(我没有服务器,没有任何收费可能)。即使未来在线接口坏了,也可以通过第三方导入带时间戳的LRC歌词(比如"音乐扒手"等工具复制),添加到本地歌词中继续演唱。希望有共建意愿的伙伴一起打磨。目前软件本身问题还好,最棘手的其实是歌词源不稳定,这才是最大的痛点。
还望大家海涵,不要嫌弃。
更新日志如下(梦仔伴唱 v1.0 至 v2.1.0 全部改动汇总)
## 新增功能
1. 歌词胶囊(悬浮球):屏幕悬浮控制面板,播报时随时控制,支持展开查看歌词、上一句或下一句、播放或暂停、从头开始、结束播报,可拖动调整位置,自动半隐藏到屏幕边缘,首次开启有使用引导
2. 多平台歌词搜索:支持QQ音乐、网易云音乐、酷狗音乐、酷我音乐、咪咕音乐,可切换歌词来源(浅念音乐搜索或LrcLib开源歌词库)和搜索平台
3. 微软Edge TTS在线语音合成:音质更自然,支持多种声音选择(晓晓、云扬等),每个声音可试听,失败自动回退本地TTS
4. 数据备份与恢复:支持导出和导入所有设置、搜索历史、播放历史和本地歌词,卸载重装后可恢复
5. 逐句试听学唱:点击歌词行听这一句,支持自由跳转和选段试听
6. 通知栏增强:显示当前歌词、歌曲信息、歌手名和播报状态,支持5个控制按钮(上一句、暂停或恢复、下一句、从头开始、结束播报)
7. 提前朗读歌词改为连续倍率调节(0.3倍到3.0倍),替代原来的4档固定选择,支持加减按钮和恢复默认
8. 摇一摇增强:改为总开关加子选项,新增动作选择(切换下一句、上一句、暂停或继续、停止播报)和震动反馈开关
9. 音量快捷键增强:新增双击功能,共可配置4个快捷操作,新增总开关,关闭时音量键恢复正常功能
10. 靠近耳朵暂停:新增震动反馈开关,文案改为更直观的表达
11. 手动模式倒计时:点击播放后延迟指定秒数再开始播报(1到5秒),方便切换到伴奏应用
12. 外观设置:主题模式切换(浅色或深色或跟随系统)、字体大小调节、跟随系统字体开关
13. 歌词选段播报和时间戳显示开关
14. 运行日志系统:自动记录运行行为,支持导出分享和清除,导出文件名自动包含设备信息,最大2MB自动裁剪
15. 隐私政策与用户协议:详细说明所有权限用途、第三方服务和数据安全
16. 新手引导页和歌词胶囊使用引导弹窗
17. 关于页面:版本信息、开发者信息、联系方式、微信公众号二维码、检查更新按钮
18. 权限配置页面:集中展示所有权限状态,一键跳转系统设置
19. 前奏阶段支持跳过:播报开始后可通过摇一摇、音量键或手动点击跳过前奏
20. 歌词高亮居中滚动:播报时当前高亮行自动滚动到屏幕中间
21. 播报时歌词渐变效果:非高亮歌词根据距离做透明度渐变,营造层次感
22. 播报时背景微调:浅色模式偏淡紫,深色模式偏深蓝
23. 自定义Toast样式:替换系统默认提示,与应用整体风格一致
24. 清空搜索内容按钮
25. 本地歌词长按新增"编辑"选项
26. 教程新增下载安装指引和在线更新说明
## 无障碍优化
27. 全面优化TalkBack体验:歌词卡片统一为一个焦点,封面和歌曲名合并,所有按钮热区加大(小按钮48dp,顶部栏按钮40dp),设置页所有开关和选项增加完整无障碍描述
28. 歌词行编辑改为长按触发,TalkBack提示"轻点两次并按住即可编辑",不影响逐字浏览
29. 批量编辑和本地歌词选中状态与歌词内容分开播报,点击切换时单独提示"已选中"或"未选中"
30. 勿扰弹窗复选框播报从英文改为中文"已勾选"或"未勾选"
31. 更多菜单选项聚焦时直接显示当前值,不用点进去才知道选的是什么
32. 搜索结果列表读屏播报格式优化,停顿更自然,信息更紧凑
33. 搜索结果筛选栏支持读屏自定义操作,可直接选择"全部"、"仅同步歌词"、"仅无同步歌词"
34. 教程、隐私政策、许可协议列表去掉圆点符号,消除多余焦点
35. 设置页搜索平台图标区域去掉多余大焦点框
36. 歌词高亮刷新改用局部刷新机制,不再丢失TalkBack焦点
37. 设置页折叠项目增加无障碍操作属性
38. 修复从搜索页面返回主页焦点丢失的问题
39. 修复退出编辑模式后触摸列表读到残留的"已选中"
40. 修复可以聚焦到首页顶部软件图标的问题
## 问题修复
41. 播报时机大幅优化:取消语音倒计时改为振动提示,播报和歌声对齐精度提升到毫秒级
42. 自动模式修复:排除TTS朗读被误判为"K歌开始了"的干扰
43. 歌词元数据识别优化:作词、作曲、编曲、混音等中英文混合格式正确识别
44. 歌词解析白名单扩充:新增混音工程师、母带工程师、古筝、笛等关键词,括号检测新增中文括号
45. 歌词源优化:lrc_lib逐字时间戳标记自动过滤,只保留纯文本
46. 修复播报预告和倒计时后歌词进度越来越提前的问题
47. 修复连续跳句或快速操作时播报卡住的问题
48. 修复停止播报后重新开始歌词进度不同步的问题
49. 修复摇一摇切歌和靠近传感器暂停时偶发卡顿或闪退
50. 修复纯文本歌词误触发播报功能
51. 修复音量键控制偶尔跳两句
52. 修复编辑歌词时同一秒多句歌词改错行,编辑后自动保存
53. 修复部分歌曲缺少歌词ID搜索结果不显示
54. 修复网络不稳定时搜索和获取歌词无重试
55. 修复试听功能多个问题:无加载状态、失败后按钮消失、出错界面卡死、退出后后台继续播放
56. 修复部分歌曲点进去显示"暂无歌词"(歌词获取走了需要登录的地址导致超时)
57. 修复酷狗歌曲试听点击报错
58. 修复从历史记录打开歌曲后试听按钮不可用
59. 修复网易云歌曲时长显示为空
60. 修复筛选切换时播报文案不及时更新
61. 修复不开读屏时点击筛选按钮没反应
62. 修复读屏使用媒体通道时自动检测功能被连续打断
63. 修复片段唱选择范围时两个播报互相打架
64. 修复Edge TTS中途停止时临时文件未清理
65. 修复设置页开关在无障碍模式下偶尔不提示状态变化
66. 修复悬浮球面板展开时返回键行为不合理
67. 修复本地歌词粘贴时歌名和歌手识别错误
68. 修复新建本地歌词页面按钮被文本框遮挡
69. 修复点击新建歌词保存按钮崩溃
70. 修复桌面双图标
71. 修复首次进入软件播报多余文字和窗口
72. 修复首次进入软件窗口时间显示过长
73. 修复返回主屏幕重新进入软件重新加载动画
74. 修复展开设置项后返回手势无法收起
75. 修复展开设置项后点击其他项目无法收起已展开项
76. 修复部分返回逻辑不一致或不生效
77. 修复华为鸿蒙3.0(Android 10)搜索和设置页面闪退
78. 修复部分小米10.0设备崩溃
79. 修复安卓9及以下设备崩溃和图标显示不一致
80. 修复日志文件无限增长、导出大文件卡住、崩溃日志写入不完整
## 稳定性优化
81. 应用启动时自动清理残留临时缓存文件,防止缓存越来越大
82. 优化软件内存占用,提升整体稳定性
83. 统一设置页开关控件,所有手机显示一致
84. 优化深色模式下APP图标显示
85. 酷狗和咪咕平台歌词接口暂不可用时直接提示,不再让用户白等
86. 搜索结果歌词全部提前加载,不再只处理前10首
87. 退出歌词页面更彻底释放资源,减少内存占用
也真难为你了,修复这么多。但是我只关心一点,如果用在声卡上,伴奏手机怎么能不让歌词的声音跑到直播间里。还有,我点开歌了,再来点这个,会不会手忙脚乱?或者你这个只是作为全民k歌的搭配使用。个人感觉,如果唱歌记不住歌词,歌肯定唱不好。其实天坛百宝箱上的歌词就挺好的。只不过他需要划着来。但是手动的话,跟随性也很好。我的角度都是从声卡直播唱歌上聊的。至于各大软件上录歌的话,可能简单一点吧。