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

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

  •  
  •   TaylorZ · 92 天前 · 1705 次点击
    这是一个创建于 92 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    界面截图:

    目前支持的功能:

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

    计划支持的功能:

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

    项目地址:SubTune

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

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

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

    Navidrome 使用的是自己实现的接口,如果要实现根据播放进度显示当前歌词,那么只能单独适配 Navidrome
    suyuyu
        25
    suyuyu  
       91 天前
    水果只能看着吗
    of2
        26
    of2  
       90 天前
    @TaylorZ 就算静态歌词也算个好事了,不过看 navidrome 是有歌词的 api 的: https://github.com/navidrome/navidrome/issues/1840
    viazure
        27
    viazure  
       88 天前
    蛮不错的,让我又将 navidrome 重新用了起来
    viazure
        28
    viazure  
       88 天前
    希望主界面的播放控制栏可以优化一下,现在需要进入到歌曲播放界面才能切换上一曲下一曲,有点不太方便。
    Ccf
        29
    Ccf  
       87 天前
    挺好用,期待楼主接手 subpetal
    TaylorZ
        30
    TaylorZ  
    OP
       86 天前
    @viazure 好的,下一个版本就加
    TaylorZ
        31
    TaylorZ  
    OP
       86 天前
    @Ccf 是这个吗? https://github.com/alexiscn/SubPetalApp ,这个是 iOS App
    TaylorZ
        32
    TaylorZ  
    OP
       86 天前
    @of2 静态歌词功能已上线,Navidrome 内部接口使用的是另一套认证方式,与 Subsonic API 不兼容,无法单独适配 Navidrome
    TaylorZ
        33
    TaylorZ  
    OP
       83 天前   ❤️ 2
    @viazure 播放控制栏优化已上线
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   906 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 19:35 · PVG 03:35 · LAX 12:35 · JFK 15:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.