平台 App
只管理自己的歌单和曲库,很难把多平台歌曲放进同一个播放队列。
关于名字
"管乐" 是中文里对吹奏乐器(长笛、单簧管、小号等)的统称——它们音色各异,却能在同一份曲谱下合奏。"Tutti" 是意大利语乐谱中的术语,意为"全员齐奏",指挥示意所有乐手一起演奏的那一瞬间。
把网易云、QQ 音乐、酷狗、哔哩哔哩看作不同的乐器,按同一份"曲谱"——你的播放队列——依次合奏,就是这个应用想做的事。我们不替换任何乐器,只递交曲谱、切换节拍。
另:管字本身也带有"管理"之意,是工程层面的一个小小双关。
核心定位
Tutti 不播放、不下载、不缓存任何音乐。它通过深度链接打开官方 App,让你继续使用原平台会员和曲库。
只管理自己的歌单和曲库,很难把多平台歌曲放进同一个播放队列。
通常依赖逆向接口或抓取音频数据,维护成本高,也容易触碰平台限制。
统一管理跨平台歌单,播放时调起官方 App,自动衔接下一首。
工作方式
我们把复杂流程拆成四件事:识别歌曲、保存队列、委托播放、监听状态。用户看到的是一份统一歌单,底层仍按各平台自己的播放规则运作。
从音乐 App 分享链接或直接粘贴,LinkParser 会解析短链接、平台 ID、标题和艺术家,再由对应平台的处理器补齐元数据。
歌曲以“平台 + 平台歌曲 ID”为唯一标识写入本地 Room 数据库,可以混排进同一个播放列表。
播放时生成网易云、QQ 音乐、酷狗或 B 站的目标链接,唤起对应官方 App 完成实际播放,保留会员权益。
通过 Android MediaSession 与通知访问权限读取播放状态和进度,在接近结尾时自动切到队列里的下一首。
功能特点
把网易云、QQ 音乐、酷狗音乐和 B 站的内容当作统一的元数据来管理,不会把音频文件搬进应用本身。
把远程歌单关联到本地歌单,按同步源增量更新,同时保留手动添加的歌曲。
播放前先检测可用性,失败时自动跳过;切歌时也会处理上一首平台没停掉、新一首启动较慢等情况。
在任意 App 上方查看当前歌曲、控制播放、拖动进度,可以在完整窗口和迷你浮球之间随意切换。
汇总排行榜、分类歌单和已登录平台的每日推荐,支持一键加入跨平台队列。
播放端在本机开放 HTTP/WebSocket 控制接口,控制端实时同步状态并发送操作指令。
借助 Shizuku 把音乐 App 启动到 freeform 窗口里,并放到屏幕之外,让 Tutti 的浮球持续显示在前台。
长按歌曲为它设置自定义的 mm:ss 时长,跳过冗长的开场或片尾,到点自动切到下一首。
把歌曲、歌单和同步源导出为 JSON 文件,方便跨设备迁移,备份之后也可以一键还原。
首次启动时通过引导页面,带你依次完成悬浮窗、通知访问、无障碍等 6 项权限的授权。
歌单数据保存在设备本地数据库里,不需要账号服务器,也不会把播放记录上传到任何地方。
在音乐 App 的分享面板里把链接发送到 Tutti,自动识别平台、歌曲 ID 和元数据。
安装前说明
Tutti 把播放委托给官方 App,这种架构本身就有边界。下面把需要的权限,以及目前还没有完美解决方案的问题都列了出来,希望你在试用之前心里有数。
如果你已经在设备上启用了 Shizuku 并允许 Tutti 使用,那么以下权限会在每次启动时由 Tutti 通过 Shizuku 自动批量授予,不需要手动一个一个点开系统设置。完成时会弹一条可滑动关闭的通知,列出本次新增的授权项目。可以在"设置 → 启动模式 → 通过 Shizuku 自动授予所需权限"里关掉。
am start --windowingMode 5。不安装则只能使用前台模式(切歌时官方 App 会跳到前台)。
寻求帮助
Tutti 完全开源,目前由一位非 Android 出身的开发者在维护。下面列出的每一项都不是我们故意这么做,而是暂时还没找到解决方案的实际问题。如果你在其中任何一项上有经验,欢迎在 GitHub 上提 Issue、发 PR,或者只是分享一些思路。
setLaunchWindowingMode 只对持有签名级权限的 App 生效,目前我们只能借助 Shizuku 调用 am start --windowingMode 5。如果你知道有什么办法能让一个普通 App 把音乐 App 放到后台或画中画窗口里,请告诉我们。
酷狗的 songlist 接口在未登录状态下全部返回 4xx,我们目前只能抓取服务端渲染的 HTML。如果你熟悉这几家平台的公开 API、登录签名或合作伙伴接入方式,可以帮我们摆脱抓取页面的做法。
所有 playFromMediaId / playFromUri / playFromSearch 调用都会被网易云和 QQ 音乐忽略;actions 字段虽然声明了对应能力,实际却是空操作。我们想知道有没有 MediaBrowserService 或厂商私有指令可以真正触发切歌。
我们希望把酷我、咪咕、Apple Music 中国区等平台也接入进来。只要实现 PlatformHandler 接口(链接解析、元数据获取、深度链接生成),就能加入跨平台队列。欢迎提 PR。
HyperOS 会在重装应用后悄悄解绑 NotificationListenerService,手势导航也会把 freeform 窗口吸附回主屏。如果你在自己的设备上发现 Tutti 表现异常,欢迎附上 logcat 和复现步骤。
目前文档主要支持中文和英文。如果你愿意帮忙翻译界面、撰写权限设置教程,或者把疑难解答整理成文章,欢迎直接向 site/ 或 README.md 提 PR。
Android 下载
下载 APK 后在 Android 8.0 及以上设备安装。首次使用需要按提示授予悬浮窗、通知和无障碍相关权限。