我用AI手搓的歌词播报APP梦仔伴唱更新啦

11 今梦 1天前 152次点击

Hello大家!

又来打扰大家了,梦仔伴唱又双叒叕迎来了一次正式版本。

这次主要给大家带来的功能是本地音乐导入。起初的想法是导入本地伴奏,因为在线音乐播放有时候放不出来,而且大家平时可能也有导入本地伴奏跟着学唱的需求。既然已经做了点击某句歌词单独播放的功能,那顺带把本地音乐也一起支持了,也算顺理成章。

在首页点击本地音乐资源,进入后顶部有两个Tab,默认选中本地音乐。点击导入按钮会自动扫描手机里的音频文件,默认过滤掉1分钟以下的碎片文件。理论上支持大部分音乐格式,不过我没全都试过,不太确定。导入过程遇到问题欢迎反馈,有机会我会修。

导入后点击更多按钮,可以一键匹配歌词和封面。网上能爬到的话一般都能对上。如果匹配不到或者匹配有误,也可以手动编辑。通过双击长按某首歌,可以打开操作菜单,里面有删除和编辑;也可以通过无障碍操作,用搓擦手势把导航切到“操作”,单指上滑或下滑听到“编辑”或“删除”,双击执行就可以了。

编辑页面提供了两种模式。一种是自由编辑,所有歌词放在一个编辑框里。另一种是逐句编辑,每一行歌词都是一个单独的编辑框,屏幕阅读器可以单独摸到某一行进行修改,回车换行。大家按自己习惯选择就好。

如果歌词没有时间戳,编辑页面右上角的更多菜单里有个自动匹配时间戳的功能,会根据歌曲时长自动分配好,不用先播放,方便后续调起歌词播报。右上角更多里还能补充发行时间等拓展信息,都是可选项,稳定性我也不敢保证,按需使用。

在本地音乐列表里,摸到一首歌双击即可播放。如果想进入歌词演唱页面,同样用搓擦手势把导航切到“操作”,单指下滑听到“进入详情”,点开就能进去,进行歌词播报等功能。这个无障碍操作属性在很多地方都有用,比如编辑歌词的Tab、本地歌词的Tab,以及搜索出来的歌曲列表。

另外在搜索结果页面,如果不开屏幕阅读器,只需要点击每一首歌右侧那个三角形的播放按钮即可。因为我觉得,如果每一首歌都要单独独立出一个播放和暂停的试听按钮,可能会增加大家滑动焦点的频率,体验不太好。所以我把试听功能都收纳到了无障碍操作属性里面,尽可能减少无障碍焦点的同时,操作起来也比较优雅。代码里对Android 12及以下不支持无障碍操作属性的设备,做了单独适配,应该是能够单独获取到播放按钮的,不过我没有低版本真机验证过,如果不行后续再调整。

这次还写了一个迷你播控栏。播放歌曲后它会出现在屏幕底部,默认是迷你状态,只显示封面、歌名、播放按钮和展开按钮,不占空间。展开后约占屏幕底部三分之一,包含封面、歌名歌手、歌词、进度滑块、快进快退、复制歌词、上一曲、暂停播放、下一曲、进入详情。播放器背景色会根据封面主色动态变化,带一点光晕,圆角也还算好看,无障碍和美观可以共存。

播控栏的展开和收起也支持无障碍操作,通过搓擦菜单来操作。我把封面、歌手和歌名合并成了一个焦点,防止焦点穿透或者焦点过多。歌词没有合并,单独独立出一个焦点,这样大家在唱的过程中,屏幕阅读器就会自动读出歌词的文本变化。

进度滑块支持无障碍操作,单指摸到后上滑或下滑调整进度,有细腻的震动反馈。暂停播放、收起展开、上一曲下一曲也都有震动反馈,增强操作手感,也为后续可能做的本地播放器打个底。

这个播控栏会一直悬浮在应用内。暂停播放超过一分钟,它会自动隐藏。

另外还做了一些无障碍优化,包括焦点合并、不规范标签修正、点击按钮后焦点跑偏的问题,以及部分UI重新梳理。

本来是个简单的歌词播报应用,做着做着把本地音乐和在线听歌都加进来了。确实不太稳定,毕竟没什么经验,还有很多奇怪的bug,比如搜索出来的歌第一次点播放偶尔没反应,需要再点一次,我也还没找到原因。整体勉强可用,大家多包涵。有朋友跟我说,他反而更多拿这个应用来听歌,而不是用来唱歌,有点本末倒置的感觉。

下载链接:

https://www.guangyapan.com/s/1916034436354117642_aeWhjBu726g3wbT0

备选 QQ邮箱中转站:

https://iwx.mail.qq.com/s?k=tzzK_GgAYbwzEFF7ap

对项目感兴趣的伙伴也可以加群讨论

627298458

v2.2.0 正式版更新日志

【新增功能】

1. 底部播控栏 — 首页常驻,背景色随封面变化,迷你/展开两种模式

2. 本地音乐 — 扫描设备音乐,播放试听,一键匹配歌词,文件夹导入,本地搜索

3. 歌曲编辑页 — 独立页面,逐句编辑、批量操作、时间戳开关

4. 自动算时间轴 — 纯文本歌词一键分配时间戳,无需先播放

5. 在线补充元数据 — 查询 MusicBrainz 获取发行日期和专辑类型

6. 数据备份重建 — 导出/导入 zip,包含设置、历史和歌词

7. 耳机中键自定义 — 单击/双击/三击独立配置

8. 拔出耳机自动暂停

9. 朗读歌词音频闪避 — 播报时自动降低伴奏音量

10. 引导页重构 — 图标+标题+描述风格,无障碍焦点优化

11. 文档更新 — 使用许可/隐私政策/使用帮助新增目录导航和 MusicBrainz 声明

【修复】

1. 文件夹导入歌曲被误删(严重)

2. 试听本地音频误删原始文件(严重)

3. 本地歌曲详情页封面丢失

4. Android 10+ 提取封面崩溃

5. 播控栏页面切换时消失或不恢复

6. 详情页返回后歌曲无法继续播放

7. 切后台回来播控栏背景变白板

8. 搜索结果误显示本地音乐播放状态

9. 设置页返回播控栏没歌名和封面

10. 深色封面下播控栏歌词看不清

11. 检查更新弹窗日志过长按钮被挤出

12. 音频焦点:来电/闹钟时不暂停

13. 引擎切换卡 30 秒

14. 切换语速/音色后预合成缓存不刷新

15. 无障碍焦点消失

16. 目录跳转后按返回直接退出

17. 本地歌词/音乐复选框选中状态朗读异常

18. 搜索按回车后键盘不收起

19. 屏幕阅读器长按本地音乐无法直接删除

【优化】

1. 切歌:防连点保护+自动重试+高亮跟随

2. 无障碍:音源切换焦点不丢失、编辑独立入口、搜索平台只播选中项

3. 顶部标签:药丸感样式,深色模式适配

4. 播控栏:按钮间距加大防误触,暂停超 60 秒自动隐藏

5. 歌词过滤:补全营销/改编编曲/录音工程师/混音母带等版权行

6. 安装包体积:引导页截图改用矢量图标。

点击加入梦仔伴唱交流群
共 14 条评论
AI的高级用法,做小工具、小程序,低级用法,纯粹应答机器人
我好奇那个无障碍属性是怎么添加上去的呀?就是对于一个按钮,可以用读屏的操作功能进行操作
今梦 [楼主] 1天前
0 
Perform Accessibility Actions 快速指南 ### 核心原理 TalkBack 用户聚焦到 View 后,上滑/下滑可在操作菜单中切换,双击执行。开发者通过 `AccessibilityDelegate` 注册自定义操作,让视障用户无需长按菜单即可访问所有功能。 ### 实现三步 **1. 声明 Action ID**(`res/values/ids.xml`) ```xml ``` **2. 注册操作**(`onInitializeAccessibilityNodeInfo`) ```kotlin ViewCompat.setAccessibilityDelegate(view, object : AccessibilityDelegateCompat() { override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) { super.onInitializeAccessibilityNodeInfo(host, info) info.addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat( R.id.accessibilityActionEdit, "编辑" )) } }) ``` **3. 处理执行**(`performAccessibilityAction`) ```kotlin override fun performAccessibilityAction(host: View, action: Int, args: Bundle?): Boolean { if (action == R.id.accessibilityActionEdit) { doEdit() return true // 必须返回 true,否则事件继续传递 } return super.performAccessibilityAction(host, action, args) } ``` ### 关键技巧 - **动态标签**:根据状态变化,如 `if (isPlaying) "暂停" else "播放"` - **低版本兼容**:Android 12 以下不支持自定义 action,让按钮单独 `isFocusable = true` - **操作后播报**:`view.announceForAccessibility("已展开")` 告知用户结果 - **重命名默认操作**:`ViewCompat.replaceAccessibilityAction()` 把默认点击改成"播放"/"暂停" - **列表项索引**:`info.setCollectionItemInfo()` 让 TalkBack 念"第X项,共Y项" ### 项目实战位置 - 搜索结果试听:`SongAdapter.kt:136-169` - 本地音乐三项操作:`LocalMusicFragment.kt:930-962` - 悬浮球八项操作:`FloatingBallView.kt:282-352` - 设置页折叠/展开:`SettingsActivity.kt:153-169` - 播控栏展开/收起:`SearchPlaybackBar.kt:1521-1594`
谢谢
请问一下你这个买open一个月花费大概多少呢?这不快放暑假了,然后我看一下能不能弄点钱我也来玩一下,
今梦 [楼主] 1天前
0 
大概要两三百的样子哎
有点压力了hh
暑假一个月最多只能弄200多

好一个浅念歌词搜索啊。

今梦 [楼主] 15小时前
0 
哈哈哈,不过真的很感谢浅念提供的,所以就署名了一下
EthanBrown 15小时前
0 
谢谢楼主给我们开发的这么好用的歌词播报软件开发辛苦了。
今梦 [楼主] 9小时前
0 

v2.3.0更新

【修复】

· 修复 Android 10+ 系统下部分本地音乐无法播放的问题(Scoped Storage 权限限制导致文件可读性误判)

· 修复搜索结果列表点击播放或试听时跳转至错误歌曲的问题

· 修复播放状态机在 MediaPlayer 为空时状态异常的问题

【无障碍优化】

· 修复设置页开关状态播报缺失或重复朗读的问题

· 优化开关聚焦与点击时的播报文本,精简冗余信息

· 修复搜索平台选择状态不读“已选中/未选中”的问题

【其他优化】

· 修复部分场景下动画在后台持续运行导致的性能开销

· 统一平台配置管理,简化后续新增平台接入流程

https://www.guangyapan.com/s/1916399131896406100_aeWhjBu726g3wbT0
历史狂粉 8小时前
0 
入群申请已发送,同意一下就可以了。
历史狂粉 8小时前
0 
OK,已经进去了。
添加一条新评论

登录后可以发表评论 去登录