V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
TaylorZ
V2EX  ›  分享创造

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

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

    之前一直用网易云音乐,用着用着很多歌就没了,于是用 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
    很不错
    AlexShui
        4
    AlexShui  
       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  
       312 天前
    目前安卓手机上的首选了,会弄 mac 版么?
    目前没有好用的播放 app
    Ccf
        35
    Ccf  
       310 天前
    @TaylorZ
    能实现管理多个服务器地址么?
    现在默认只能添加一个。
    TaylorZ
        36
    TaylorZ  
    OP
       309 天前
    @Ccf
    暂时没有计划支持 Mac ,后续可能会支持。
    管理多个服务器地址,这个可以有。
    Ccf
        37
    Ccf  
       280 天前
    顺便加一个随机播放吧,自动生成几十首临时歌单之类的
    TaylorZ
        38
    TaylorZ  
    OP
       279 天前
    @Ccf
    最新版( 1.3.0 )已经有这个功能了
    no13bus
        39
    no13bus  
       108 天前
    真棒,有可以学习的项目了。最近想用 compose 写一个小的项目,之前用 react native ,感觉没有原生的好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3308 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 13:00 · PVG 21:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.