爱意满满的作品展示区。
andyiac

做了一个 iOS 本地音乐播放器: Wi-Fi 拖歌、FLAC/DSD、10 段参数 EQ ,发帖送一波永久 pro 送码

  •  
  •   andyiac ·
    andyiac · 10h 16m ago via Android · 1045 views

    利益相关:开发者本人。免费下载,Pro 国区 一次性买断,没有订阅、没有广告。发在分享创造,主要是想收真实反馈,不是求五星。

    一、为什么做

    我自己的曲库在电脑和 NAS 上,几千首,FLAC 为主,还有一些十几年前 rip 的 MP3 。用 iPhone 听这些歌一直很别扭:iTunes/Finder 同步看运气,Wi-Fi 同步经常卡;流媒体上要么没有版本,要么今天有明天没;试过几个本地播放器,传歌、曲库、播放总有一块是凑合的。

    后来想明白了,我要的东西其实很小:电脑浏览器把歌拖进去,手机上打开就能听,不要账号,不要云,不要订阅。于是就自己写了离音( Unstream )。

    二、传歌

    • App 里开「 Wi-Fi 传歌」,同一局域网下用电脑浏览器打开 App 显示的地址;
    • 文件和整个文件夹都可以直接拖进去,批量上传,重名自动跳过;
    • 网页端能浏览目录、搜索、按名称/大小/类型排序、试听、重命名、移动、删除;
    • 可以设上传密码(存 Keychain ),防止同网段的人往你手机里塞东西;
    • 服务只在局域网内跑,IPv6 监听也收在 loopback ,不开公网。

    三、曲库和播放

    • 格式:MP3 、M4A/MP4 、AAC 、ALAC ( m4a/caf )、WAV 、AIFF/AIF 、CAF 、FLAC 、OGG Vorbis 、Opus 、MP1/MP2 ,以及 DSD 的 DSF/DFF ( Pro )。APE 不支持,DST 压缩的 DFF 也不支持。
    • 曲库:搜索、A-Z 索引、排序、收藏、歌单、艺术家、文件夹。歌单存在 SQLite 里,支持拖拽排序。
    • 关联文件夹:可以把「文件」 App 里的文件夹链进来,原地引用不复制; iCloud Drive 里没下载的,点播放会先按需下载。
    • 文件改名或移动后,歌单按内容重新关联,不会整条失效。
    • AirDrop 、「用其他应用打开」、文件 App 都能批量导入; Documents 目录有外部改动时列表会刷新。
    • 后台播放、锁屏/控制中心、主屏和锁屏 Widget ( iOS 17+ 可以直接播放/暂停/切歌)。

    四、声音

    • 10 段参数 EQ:每段可调中心频率、增益、Q ,带 Preamp 、9 个预设和自定义曲线。免费能实时调,保存曲线和部分预设要 Pro 。
    • ReplayGain:读 ID3v2 TXXX 和 Vorbis Comment 的 track/album gain ,支持关/单曲/专辑,带防削波。
    • DSD:DSF/DFF 转 24-bit PCM ,实时流式解码,可拖进度( Pro )。
    • 蓝牙和 AirPlay 会协商采样率,尽量避免无谓重采样。
    • 播放页点格式徽标,能看到完整信号链:文件 → 解码 → 处理 → 输出,以及哪一步在重采样。编码按文件内容识别,不只看扩展名,AAC/ALAC/MP2 不会标错。
    • 歌词:.lrc 侧载,支持增强型 LRC 的逐字高亮,也能读内嵌歌词;锁屏和 Widget 显示当前行,也可以悬浮在封面上。

    五、外观和其它

    • 亮/暗/纯黑、强调色、多种唱片样式、默认封面、App 图标。
    • iPhone + iPad ,iOS 15 起,界面 16 种语言(含简繁中文)。
    • 安装包 12 MB 。

    六、技术栈

    • UIKit ,不是 SwiftUI 。要支持 iOS 15 ,而且播放页的布局和手势需要比较细的控制。
    • AVAudioEngine + AVAudioUnitEQ + AVAudioUnitTimePitch ;原生格式走 Core Audio ,加载失败回退 AVAudioPlayer/AVPlayer 。
    • OGG/Opus 用自编译的 libogg/libvorbis/libopus XCFramework ; MP1/MP2 用 vendored minimp3 软解; DSD 是自己写的 parser + PCM 转码。
    • 歌单用 SQLite (直接 C API ),设置走 UserDefaults ,上传密码和 Pro 状态放 Keychain 。
    • 内置 HTTP 服务基于 GCDWebServer ,patch 了 IPv6 只监听 loopback 。
    • 没有第三方分析或崩溃 SDK 。

    七、和同类怎么选

    不是来吊打谁的,取舍不同: 不是来吊打谁的,取舍不同:

    • VLC:万能,但它是播放器思维,不是曲库思维;传歌和歌单不是重点。
    • FileBrowser/Documents:文件管理强,播放是附属。
    • Doppler/Evermusic:设计和生态更成熟,但更偏 Apple Music 导入、云和订阅;我想要不登录、不碰云。
    • foobar2000 mobile:够硬核,但 UI 和传歌体验我不适应。

    如果你要的是「打开就是我的歌,传歌不用学」,这个方向大概对;如果你要 CarPlay 、网盘直连、自动刮削封面歌词,它现在还不够。

    八、不足

    • 暂时没有 CarPlay ,没有 Android 。
    • 不会自动匹配歌词和封面,要靠文件自带元数据或 .lrc 。
    • 没有 WebDAV/网盘直连,没有云同步。
    • Wi-Fi 上传要手动输地址,还没做扫码。
    • 睡眠定时、变速、保存 EQ 曲线、DSD 、部分主题/图标/唱片样式是 Pro 。
    • 闭源,个人项目,代码还没整理到能开源的程度。
    • 一个人做,更新节奏不快。

    九、收费

    免费下载。Pro 国区 ¥68 ,一次性买断,没有订阅、没有会员等级、没有广告。Pro 解锁 DSD 、EQ 曲线保存、0.75–2× 变速、睡眠定时、部分唱片样式/主题/图标、自定义封面图。

    十、想听的意见

    1. 传歌这一步,你现在的 workaround 是什么?除了扫码和手输 IP ,还有更顺的方案吗?
    2. 本地曲库你更在意「管理」还是「播放」?我现在两边都做了一点,可能都不够深。
    3. 有没有哪个格式/编码是你必须有、但我漏了的?
    4. 睡眠定时和变速放在 Pro 里,我自己也犹豫。你觉得这个拆法合理吗?

    App Store 国区: https://apps.apple.com/cn/app/id6767066746 美区: https://apps.apple.com/us/app/id6767066746 搜「离音」或「 Unstream 」也可以。

    截图我放在下面:传歌页 / 曲库 / 播放页 / EQ / 信号链。

    送十个码,大家轻喷,尽量回。

    4JLX8K3WM46T37N8R8
    X43R7EP7MKJHLLK73T
    MLRRPNPNEE3LMRNNPF
    RJJXJLYM46HK8LNK3W
    E6FM3L78K3MLJ6K8EW
    6YXXTY3R4JMXFWYJAP
    JHRHFWJKN84R7XNAKJ
    7EJFMYPJELFP3JWMJE
    86KNRT6JHWR6PMAPPT
    P8WEY8JFRXLYT34N6K
    

    https://www.v2ex.com/i/U8NEgC4k.webp https://www.v2ex.com/i/ohLm38k1.webp https://www.v2ex.com/i/Tk8uG25d.webp https://www.v2ex.com/i/XPTS29Hy.webp https://www.v2ex.com/i/7qS0DN8i.webp https://www.v2ex.com/i/vjT2ZSeZ.webp https://www.v2ex.com/i/6pBrSfLa.webp https://www.v2ex.com/i/xdtDy6T8.webp https://www.v2ex.com/i/45mgehz6.webp https://www.v2ex.com/i/3q9k3TR1.webp

    Supplement 1  ·  3h 43m ago
    没领到码的进群找小助手领取


    v2 好像不支持 webp 我又重新上传了一次截图










    25 replies  •  2026-11-05 21:12:57 +08:00
    emberzhang
    emberzhang
    9h 57m ago❤️1
    1
    86KNRT6JHWR6PMAPPT 用了一个谢谢。我目前用 plex+plexamp 离线。但除了 plexamp 好像其他 app 都不支持把音乐文件全部离线到本地
    saimax
    saimax
    9h 49m ago via iPhone
    2
    来晚了 求个码 谢谢

    c2NvdHR1azIwMjBAZ21haWwuY29t
    wagag
    wagag
    9h 48m ago via iPhone
    3
    eHU2MDI3MTVAZ21haWwuY29t
    求个码,谢谢了
    LianAn
    LianAn
    9h 29m ago
    4
    没有了,求个码,谢谢大佬
    bGVvbmFyZG93aXRodUBnbWFpbC5jb20=
    bizwenbo
    bizwenbo
    9h 23m ago
    5
    Ym8uaHN1QG91dGxvb2suY29t
    来晚了,大佬求码
    ganzhen
    ganzhen
    9h 0m ago
    6
    感谢 MTQyNTgxMzIxMUAxMzkuY29t
    error
    error
    8h 55m ago via iPhone
    7
    eGluY2h5QDE2My5jb20= 谢谢老板
    in211240520
    in211240520
    8h 41m ago via iPhone
    8
    NDQ0ODMzMEBnbWFpbC5jb20= 谢谢老板
    vopfly
    vopfly
    8h 4m ago
    9
    aHJqbGFuQHFxLmNvbQ== 求个码,正好有需求
    psm
    psm
    7h 53m ago
    10
    求个码

    邮箱:cGFuc2hpbWluMTExQDE2My5jb20=

    谢谢~
    congratulations
    congratulations
    7h 49m ago
    11
    求个码 邮箱 b25la2luZ25xdWVlbkBnbWFpbC5jb20=
    Shum1n
    Shum1n
    7h 47m ago
    12
    求个码, 感谢 OP
    NTQwODQyOTMwQHFxLmNvbQ==
    orange804072060
    orange804072060
    7h 45m ago
    13
    求个码,谢谢
    b3JhbmdlODA0MDcyMDYwQGdtYWlsLmNvbQ==
    NomiTang
    NomiTang
    7h 42m ago
    14
    Z3VhbmppMDFAZ21haWwuY29t
    求个码,感谢
    oliverlin96
    oliverlin96
    7h 28m ago
    15
    大佬给个码 感谢 eWFodWxjY0B5YWhvby5jb20=
    javaDo
    javaDo
    7h 11m ago
    16
    大佬给个码 感谢 MTgwMjQ2NDJAcXEuY29t
    andyiac
    andyiac
    OP
    6h 37m ago via Android
    17
    上面的码已经领完了 大家加群找离音小助手领码哈

    andyiac
    andyiac
    OP
    6h 5m ago via Android
    18
    发现 v2 自己图库的图没渲染出来重新上传了一个

    polarwolf
    polarwolf
    5h 27m ago❤️1
    19
    1 、传歌这一步,你现在的 workaround 是什么?除了扫码和手输 IP ,还有更顺的方案吗?
    做个类似 pairdrop 的网页发现服务?或者浏览器插件

    2 、本地曲库你更在意「管理」还是「播放」?我现在两边都做了一点,可能都不够深。
    我偏向管理,这块做的优秀的 app 比较少

    3 、有没有哪个格式/编码是你必须有、但我漏了的?
    ape ,如果是授权原因那也没办法了,但是原来很多镜像是 ape+cue

    4 、睡眠定时和变速放在 Pro 里,我自己也犹豫。你觉得这个拆法合理吗?
    睡眠定时算常用功能,砍部分放 pro 比直接全砍更合适吧,比如把自定义时长丢 pro
    变速放 pro 影响比较小,毕竟变速更多是听书之类的才会有需要
    ARs6371
    ARs6371
    3h 41m ago
    20
    NTUwNTAzODExQHFxLmNvbQ==
    求个码,感谢大佬
    andyiac
    andyiac
    OP
    3h 40m ago via Android
    21
    @emberzhang 全部离线到本地是啥意思,音乐文件本身是需要自己下载收集的,离音只是一个本地音乐播放器
    andyiac
    andyiac
    OP
    3h 38m ago via Android
    22
    @ARs6371
    @javaDo
    @oliverlin96
    @NomiTang
    @orange804072060
    @Shum1n
    @congratulations
    @psm
    @vopfly

    各位扫码进群找小助手领码哈
    emberzhang
    emberzhang
    3h 33m ago via iPhone❤️1
    23
    @andyiac #21 自己搭的 plex 服务,但是音乐 app 大多只支持自动缓存,不能强制把音乐离线下到本地。
    视频也类似,除了 infuse 其他播放器基本也不支持把视频离线到设备本地
    michaelzxp
    michaelzxp
    1h 41m ago
    24
    一直在玩 hifi 看到有 ios 的播放器心喜,申请一个 Pro 码,感谢楼主

    [email protected]
    andyiac
    andyiac
    OP
    49 mins ago
    25
    @michaelzxp #24 hello 进群找小助手要码哈
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2715 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 14:02 · PVG 22:02 · LAX 06:02 · JFK 09:02
    ♥ Do have faith in what you're doing.