用 Compose 写了一个 Android 音乐播放器 SubTune - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
TaylorZ
V2EX    分享创造

用 Compose 写了一个 Android 音乐播放器 SubTune

  •  
  •  
    TaylorZ 2023-03-07 13:11:44 +08:00 4137 次点击
    这是一个创建于 953 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前一直用网易云音乐,用着用着很多歌就没了,于是用 Navidrome 搭建了离线音乐库。在用过几个 Android 客户端后,萌生了自己写一个的想法。

    SubTune UI 全部基于 Compose 开发,适用于 Subsonic API ( 1.13.0 或更高版本)兼容服务器(SubsonicNavidromeAirsonic 等)。

    界面截图:

    目前支持的功能:

    • 浏览专辑和歌单
    • 搜索专辑和歌曲
    • 缓存播放过的歌曲
    • 设置最大比特率
    • 动态颜色

    计划支持的功能:

    • 浏览和搜索歌手
    • 显示歌词
    • 缓存播放进度

    项目地址:SubTune

    39 条回复    2023-12-30 18:24:32 +08:00
    danRen
        1
    danRen  
       2023-03-07 13:33:33 +08:00
    测试了一下,好用
    Rrrrrr
        2
    Rrrrrr  
       2023-03-07 13:36:49 +08:00
    离线?
    whyrookie
        3
    whyrookie  
       2023-03-07 13:57:45 +08:00
    很不错
    neoshui
        4
    neoshui  
       2023-03-07 14:01:28 +08:00 via Android
    xiaoliang
        5
    xiaoliang  
       2023-03-07 14:24:00 +08:00
    做的不错
    TaylorZ
        6
    TaylorZ  
    OP
       2023-03-07 14:44:21 +08:00
    @Rrrrrr 这里的 [离线] 是指把音乐文存储在自己的 Nas 上,不依赖如网易云音乐等音乐平台,数据在自己手上,不用担心歌曲下架的问题
    TaylorZ
        7
    TaylorZ  
    OP
       2023-03-07 14:51:15 +08:00
    @danRen 感谢支持
    TaylorZ
        8
    TaylorZ  
    OP
       2023-03-07 14:54:30 +08:00
    @whyrookie
    @AlexShui
    @xiaoliang
    感谢大家的支持
    azhangbing
        9
    azhangbing  
       2023-03-07 15:02:17 +08:00
    楼主的执行力可以 厉害厉害, 我是看了很多 demo 自己懒得写,Compose 可以的 绘制效率杠杠的 写起来也非常爽 因为项目里有 DSL 非常像 ,就是跨平台要完善 ,ios 还有问题
    加油吧 Google
    xujinkai
        10
    xujinkai  
       2023-03-07 15:13:56 +08:00
    试了一下,不错。
    提几个我自己的痛点给 op 参考:
    - 长按桌面图标的快捷方式:随机播放所有歌曲,歌手,自建的歌单等,一键播放对开车等场景很有用
    - 缓存:可以设置最大缓存大小,以及缓存目录
    - 桌面小组件
    TaylorZ
        11
    TaylorZ  
    OP
       2023-03-07 15:29:26 +08:00
    @azhangbing 是的,Compose 写起来很爽,跨平台短时间应该不太行,比 Flutter 进度慢了很多
    TaylorZ
        12
    TaylorZ  
    OP
       2023-03-07 16:10:56 +08:00
    @xujinkai
    - 随机播放,可以再具体描述下吗?
    - 设置最大缓存大小,这个后面会加的
    - 自定义缓存目录,目前项目里用的是 ExoPlayer 自己的缓存,缓存数据不是一个完整的音乐文件,只能由 ExoPlayer 才能解码播放,所以目前自定义缓存目录的意义不是很大
    - 桌面小组件,这个可以有
    xujinkai
        13
    xujinkai  
       2023-03-07 17:05:36 +08:00
    @TaylorZ
    不是安卓开发哈,我尽量描述的详细一些。
    长按桌面上的支付宝图标,不是有扫一扫、付钱这些快捷方式么,进一步可以通过长按拖动这些快捷方式把功能添加到桌面上。这样点击这个图标,可以一键进入扫一扫功能。
    对于自建曲库来说,有时候并不在意播放特定的歌曲,因为都是自己整理放进去的,比如开车时,就想快速听个响。也有时候会自己整理一些歌单,或者想按歌手之类的去播放。
    所以需求就是可以快速的开始随机播放所有歌曲,或者快速的开始播放某歌单、某歌手。

    我能想到的做法就是:
    - 长按桌面图标,有随机播放所有歌曲的快捷方式
    - 歌单列表以及歌手列表有右键菜单,可以选择把歌单 pin 到桌面上。

    这样本来需要进入软件中选择歌曲再播放,现在只要点一下屏幕上的图标就开始播放了。
    superedlimited
        14
    superedlimited  
       2023-03-07 17:18:32 +08:00
    那个公鸡头的专封好有趣,等下下班听一听。
    abcd191898105
        15
    abcd191898105  
       2023-03-07 19:58:37 +08:00 via iPhone
    我真在用 compose 仿开眼,正封装下啦刷新和上滑加载很多呢,来活了
    justincnn
        16
    justincnn  
       2023-03-07 19:59:56 +08:00
    简洁大气,比以前大厂做的还要养眼,lz 厉害啊
    TaylorZ
        17
    TaylorZ  
    OP
       2023-03-07 21:49:36 +08:00   1
    @xujinkai
    - 长按桌面图标,有随机播放所有歌曲的快捷方式,这个可以有,目前 Subsonic API 没有提供获取全部歌曲的接口,只有一个获取随机歌曲的接口,最大返回 500 首歌曲,500 首应该够了
    - 歌单 pin 到桌面上,这个可以有
    - 歌手 pin 到桌面上,目前 Subsonic API 没有提供获取歌手全部歌曲的接口,只能获取歌手 Top 歌曲,这个暂不考虑
    TaylorZ
        18
    TaylorZ  
    OP
       2023-03-07 21:53:27 +08:00
    @superedlimited
    截图是 Navidrome 提供的 Demo 帐户里面的数据
    服务器地址:demo.navidrome.org
    用户名:demo
    密码:demo
    TaylorZ
        19
    TaylorZ  
    OP
       2023-03-07 22:07:08 +08:00
    @justincnn 感谢支持,UI 是基于 Material 3 风格开发的
    of2
        20
    of2  
       2023-03-08 09:03:47 +08:00
    可以有歌词吗? navidrome 网页版都可以读到 tag 里面歌词的,可是 subsonic 客户端没见到支持的~
    TaylorZ
        21
    TaylorZ  
    OP
       2023-03-08 09:28:34 +08:00
    @of2 这个可以有
    washbrain
        22
    washbrain  
       2023-03-08 10:45:40 +08:00
    还没下下来使用,想问一下支持无缝播放吗?
    TaylorZ
        23
    TaylorZ  
    OP
       2023-03-08 14:18:33 +08:00
    @washbrain 目前不支持无缝播放
    TaylorZ
        24
    TaylorZ  
    OP
       2023-03-08 14:48:27 +08:00
    @of2
    Subsonic API 歌词接口拿到的歌词是去除了时间点,只能静态展示所有歌词,不能实现根据播放进度显示当前歌词,估计这也是很多 Subsonic 客户端不支持歌词的原因

    Navidrome 使用的是自己实现的接口,如果要实现根据播放进度显示当前歌词,那么只能单独适配 Navidrome
    suyuyu
        25
    suyuyu  
       2023-03-08 14:49:09 +08:00
    水果只能看着吗
    of2
        26
    of2  
       2023-03-09 14:23:27 +08:00
    @TaylorZ 就算静态歌词也算个好事了,不过看 navidrome 是有歌词的 api 的: https://github.com/navidrome/navidrome/issues/1840
    viazure
        27
    viazure  
       2023-03-12 00:51:50 +08:00
    蛮不错的,让我又将 navidrome 重新用了起来
    viazure
        28
    viazure  
       2023-03-12 01:04:24 +08:00
    希望主界面的播放控制栏可以优化一下,现在需要进入到歌曲播放界面才能切换上一曲下一曲,有点不太方便。
    Ccf
        29
    Ccf  
       2023-03-12 17:04:05 +08:00
    挺好用,期待楼主接手 subpetal
    TaylorZ
        30
    TaylorZ  
    OP
       2023-03-13 11:11:38 +08:00
    @viazure 好的,下一个版本就加
    TaylorZ
        31
    TaylorZ  
    OP
       2023-03-13 11:22:37 +08:00
    @Ccf 是这个吗? https://github.com/alexiscn/SubPetalApp ,这个是 iOS App
    TaylorZ
        32
    TaylorZ  
    OP
       2023-03-13 15:07:51 +08:00
    @of2 静态歌词功能已上线,Navidrome 内部接口使用的是另一套认证方式,与 Subsonic API 不兼容,无法单独适配 Navidrome
    TaylorZ
        33
    TaylorZ  
    OP
       2023-03-16 13:43:45 +08:00   2
    @viazure 播放控制栏优化已上线
    Ccf
        34
    Ccf  
       2023-06-09 18:44:06 +08:00
    目前安卓手机上的首选了,会弄 mac 版么?
    目前没有好用的播放 app
    Ccf
        35
    Ccf  
       2023-06-11 17:01:37 +08:00
    @TaylorZ
    能实现管理多个服务器地址么?
    现在默认只能添加一个。
    TaylorZ
        36
    TaylorZ  
    OP
       2023-06-12 00:14:10 +08:00
    @Ccf
    暂时没有计划支持 Mac ,后续可能会支持。
    管理多个服务器地址,这个可以有。
    Ccf
        37
    Ccf  
       2023-07-11 11:17:21 +08:00
    顺便加一个随机播放吧,自动生成几十首临时歌单之类的
    TaylorZ
        38
    TaylorZ  
    OP
       2023-07-12 19:48:26 +08:00
    @Ccf
    最新版( 1.3.0 )已经有这个功能了
    no13bus
        39
    no13bus  
       2023-12-30 18:24:32 +08:00
    真棒,有可以学习的项目了。最近想用 compose 写一个小的项目,之前用 react native ,感觉没有原生的好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3436 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 10:39 PVG 18:39 LAX 03:39 JFK 06:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86