IOS、MacOS、AppleTV端音乐app,添加群晖等nas源、飞牛音乐等音乐服务源、百度网盘等各类网盘源、webdav等网络文件源。apple music集成播放,自带刮削功能、CarPlay、mv播放,apple store已经上架,搜猿音或Primuse
See the code中文 · English
体验最新版本: 加入 TestFlight 公测
Primuse 是面向 Apple 生态的原生多源音乐播放器。它把本地文件、NAS、媒体服务器、云盘、网络电台和 Apple Music 汇入同一资料库与播放队列,并提供高保真解码、CUE 分轨、逐字歌词、智能推荐、跨设备同步以及完整的系统播放控制。
正式版已在 App Store 上架。在 App Store 搜索「Primuse」(旧名「猿音」同样可以找到),或使用上方按钮下载。
Mac 客户端采用原生桌面布局,并与 iPhone、iPad 和 Apple TV 共享资料库、音乐源、歌单与 iCloud 同步数据。
![]() 桌面资料库与播放 | ![]() 音乐源管理 |
![]() 电台文件夹与标签 | ![]() 小播放器、菜单栏与桌面歌词 |
![]() 全屏封面、歌词与沉浸画面 | ![]() 歌词编辑与逐字打轴 |
![]() 设备互传与 iCloud 同步 | |
Apple TV 客户端可以浏览整座曲库、直接连接多种音乐源,并通过 iCloud 或局域网从 iPhone 接收资料库、凭据和播放所需配置。
![]() 在电视上听自己的音乐 | ![]() 音乐源直连与扫码传输 |
![]() 收藏电台 | ![]() 封面与同步歌词 |
![]() 全屏封面与沉浸画面 | |
Apple TV 的可播放路径取决于来源类型、凭据和中继设置。tvOS 现已具备 FFmpeg 兼容解码,可播放 WMA、DTS、TrueHD 等系统原生解码器不支持的格式。
| 类别 | 当前支持 |
|---|---|
| NAS | Synology DSM、QNAP |
| 文件协议 | SMB/CIFS、WebDAV、FTP、SFTP、NFS、S3、UPnP/DLNA |
| 音乐服务器 | Subsonic、Navidrome、Airsonic、Gonic、飞牛音乐、道理鱼、Songloft、群晖 Audio Station |
| 媒体服务器 | Jellyfin、Emby、Plex |
| 云盘 | 123 云盘、115、百度网盘、阿里云盘、Google Drive、OneDrive、Dropbox、Drime、光鸭云盘 |
| Apple 与本地 | iPhone/iPad 文件导入、Mac 本地文件夹、Apple Music 资料库与目录 |
绿联 UGOS 与 fnOS 系统级文件 API 仍在等待厂商提供稳定公开接口,因此不作为已支持的 NAS 来源。飞牛音乐是独立的音乐服务直连,不依赖 fnOS 文件 API。
.cue,按 INDEX 01 将整轨镜像展开为带独立标题、序号、时间边界和 ReplayGain 的虚拟歌曲.dts / DTS-HD,以及 WAV 容器中的 DTS-CD 识别与兼容解码.lrc / .elrc / .lys / .yrc / .qrc / .vtt / .srt 歌词和同名 MVoffset、对唱、和声、译文与罗马音,能够点击跳转、手动浏览后自动跟随,并在 iOS/macOS/tvOS/Watch 多端显示| 组件 | 最低要求 |
|---|---|
| 开发工具 | Xcode 26.0+、Swift 6.0+、macOS 开发环境 |
| iPhone / iPad | iOS / iPadOS 18.0+ |
| Mac App | macOS 15.0+ |
| Apple TV | tvOS 17.0+ |
| Apple Watch | watchOS 10.0+ |
git clone git@github.com:chenqi92/primuse.git
cd primuse
open Primuse.xcodeproj
首次打开时,Xcode 会解析 Swift Package Manager 依赖和仓库内置的 FFmpeg XCFramework。
com.apple.developer.networking.multicast。也可以修改 project.yml 中的 DEVELOPMENT_TEAM,再通过 XcodeGen 重新生成工程。
cp Config/Secrets.local.xcconfig.example Config/Secrets.local.xcconfig
按需填入云盘 OAuth 和 Last.fm 配置。Config/Secrets.local.xcconfig 已被 Git 忽略;未配置某项内置 OAuth 凭据时,对应服务可能需要开发者自己的客户端配置。
# 通用 iOS 模拟器构建
xcodebuild -project Primuse.xcodeproj \
-scheme Primuse \
-destination 'generic/platform=iOS Simulator' \
build
# Apple TV 模拟器构建
xcodebuild -project Primuse.xcodeproj \
-scheme PrimuseTV \
-destination 'generic/platform=tvOS Simulator' \
build
# PrimuseKit 测试
swift test --package-path PrimuseKit
仓库提供统一的本地开发脚本:
# 交互式选择操作
scripts/primuse-dev.sh
# 查看可用的 iPhone / iPad
scripts/primuse-dev.sh devices
# 覆盖安装并保留 App 数据
scripts/primuse-dev.sh ios-overwrite
# 完全重装;脚本会要求输入 DELETE,设备上的 App 数据会被清除
scripts/primuse-dev.sh ios-clean
# 构建并启动 Mac App
scripts/primuse-dev.sh mac
真机构建前可运行 scripts/check-apple-signing.sh,提前检查证书私钥和 codesign 权限。
Primuse 可通过 JSON 配置描述搜索、详情、封面和歌词端点,并用 JavaScript 解析响应。导入前会显示域名、请求方式、能力、Cookie、TLS 信任域与敏感配置警告,确认后才保存。
{
"id": "my-source",
"name": "My Music Source",
"version": 1,
"icon": "music.note",
"color": "#FF6600",
"rateLimit": 500,
"headers": {
"User-Agent": "Primuse"
},
"capabilities": ["metadata", "cover", "lyrics", "lyricsWordLevel"],
"search": {
"url": "https://api.example.com/search",
"method": "GET",
"params": {
"q": "{{query}}",
"artist": "{{artist}}",
"album": "{{album}}",
"limit": "{{limit}}"
},
"script": "return (response.results || []).map(function (item) { return { id: String(item.id), title: item.title, artist: item.artist, album: item.album, durationMs: item.durationMs, coverUrl: item.coverUrl }; });"
},
"detail": {
"url": "https://api.example.com/tracks/{{id}}",
"method": "GET",
"script": "return response;"
},
"cover": {
"url": "https://api.example.com/tracks/{{id}}/covers",
"method": "GET",
"script": "return response.covers || [];"
},
"lyrics": {
"url": "https://api.example.com/tracks/{{id}}/lyrics",
"method": "GET",
"script": "return { lrcContent: response.lrc, wordLevelLrc: response.wordLevelLrc, plainText: response.text };"
}
}
脚本可使用:
response:已解析的 JSON 响应responseText:原始响应文本externalId:详情、封面和歌词端点的当前外部 IDlog(msg):调试日志返回值约定:
search:[{id, title, artist, album, year, durationMs, coverUrl, trackNumber, genres}]detail:{title, artist, albumArtist, album, year, trackNumber, discNumber, durationMs, genres, coverUrl}cover:[{coverUrl, thumbnailUrl}]lyrics:{lrcContent, wordLevelLrc, plainText}不要导入来源不明的配置。自定义脚本会处理远程响应;Cookie、请求头、TLS 信任域和本地 secrets 都属于敏感权限。
primuse/
├── Primuse/ # iOS 与 macOS 共用的主应用代码
│ ├── App/ # App 入口、依赖装配、CarPlay 与外接屏 Scene
│ ├── Services/
│ │ ├── AI/ # 可选智能服务、语义搜索与音频转写
│ │ ├── AppleMusic/ # MusicKit 目录、资料库与混合队列
│ │ ├── Audio/ # 播放引擎、原生/FFmpeg 解码、缓存与音效
│ │ ├── Cloud/ # CloudKit、家庭共享、跨端快照和凭据同步
│ │ ├── DLNA/ # UPnP/AV Renderer 与投送
│ │ ├── Library/ # GRDB 资料库、扫描、Spotlight 与维护工具
│ │ ├── Metadata/ # 标签、Sidecar、刮削器和歌词翻译
│ │ ├── Radio/ # 网络电台、清单订阅、台标与实时元数据
│ │ ├── Relay/ # iPhone 到 Apple TV 的局域网中继
│ │ ├── Sources/ # NAS、协议、服务器和云盘连接器
│ │ ├── Transfer/ # 局域网设备互传与网页文件管理
│ │ └── Watch/ # WatchConnectivity 桥接
│ ├── Views/ # iOS 与 macOS 界面
│ └── Resources/ # 16 种本地化、资源和隐私清单
├── PrimuseKit/ # 跨 iOS/macOS/tvOS 共享模型、策略与流解析
├── PrimuseTV/ # Apple TV App
├── PrimuseTopShelf/ # tvOS Top Shelf 扩展
├── PrimuseWatch/ # Apple Watch App
├── PrimuseWatchShared/ # Watch App 与复杂功能共享模型
├── PrimuseWatchWidgets/ # Watch 表盘复杂功能
├── PrimuseWidgetExtension/ # iOS/macOS 小组件与控制中心组件
├── Frameworks/FFmpeg/ # iOS/macOS/tvOS FFmpeg XCFramework
├── Config/ # Entitlements、xcconfig 与 Info 配置
├── scripts/ # 构建、安装、签名、FFmpeg 与截图工具
└── project.yml # XcodeGen 工程定义与统一版本号
| 包或框架 | 用途 |
|---|---|
| SFBAudioEngine | 高保真音频解码与 DSD 支持 |
| FFmpeg 8.1(仓库内动态 XCFramework) | DTS/DTS-CD、多声道降混和兼容格式解码 |
| GRDB.swift | SQLite 资料库持久化 |
| AMSMB2 | SMB/CIFS 客户端 |
| FileProvider | FTP 与 WebDAV 文件操作 |
| Citadel | SSH/SFTP 客户端 |
| NFSKit | NFS 客户端 |
| swift-crypto | 加密与签名操作 |
| swift-nio | 异步网络基础设施 |
| SwiftDraw | SVG 电台台标与矢量图像渲染 |
系统框架包括 MusicKit、CloudKit、AVFoundation、MediaPlayer、CarPlay、WidgetKit、WatchConnectivity、App Intents、Core Spotlight、Translation 和 Network.framework。
本地 / NAS / 协议 / 媒体服务器 / 云盘
→ SourceManager / StreamResolver / Range Fetcher
→ CUE Segment 与缓存/预热策略
→ NativeAudioDecoder(SFBAudioEngine)或 FFmpegAudioDecoder
→ AVAudioConverter
→ AVAudioEngine(Player → Mixer → EQ / Dynamics / Reverb → Output)
Apple Music
→ MusicKit ApplicationMusicPlayer
→ Primuse 混合队列与系统 Now Playing 状态协调
扫描来源
→ 文件标签 + Sidecar + CUE 展开
→ MetadataBackfillService
→ GRDB 资料库与 MetadataAssetStore
手动 / 自动 / 批量刮削
→ ScraperManager
→ 内置或 JSON + JavaScript 自定义刮削器
→ 标题/艺术家/专辑/时长候选排序
→ 本地缓存,或 SidecarWriteService 写回受支持来源
iPhone / iPad / Mac
↔ CloudKit:歌单、来源、设置、历史、统计、资料库快照
↔ iCloud Keychain / 加密凭据包
↔ Apple TV:CloudKit 同步或局域网二维码直传
↔ Apple Watch:WatchConnectivity 播放状态与控制命令
Primuse 不提供音乐内容或云存储。你需要使用自己的文件、服务器和第三方账号;各服务的可用性取决于提供商、地区、账号权限和 API 状态。请遵守内容来源的服务条款和适用法律。
Swift
77.9%
C
19.8%
IOS、MacOS、AppleTV端音乐app,添加群晖等nas源、飞牛音乐等音乐服务源、百度网盘等各类网盘源、webdav等网络文件源。apple music集成播放,自带刮削功能、CarPlay、mv播放,apple store已经上架,搜猿音或Primuse
See the code中文 · English
体验最新版本: 加入 TestFlight 公测
Primuse 是面向 Apple 生态的原生多源音乐播放器。它把本地文件、NAS、媒体服务器、云盘、网络电台和 Apple Music 汇入同一资料库与播放队列,并提供高保真解码、CUE 分轨、逐字歌词、智能推荐、跨设备同步以及完整的系统播放控制。
正式版已在 App Store 上架。在 App Store 搜索「Primuse」(旧名「猿音」同样可以找到),或使用上方按钮下载。
Mac 客户端采用原生桌面布局,并与 iPhone、iPad 和 Apple TV 共享资料库、音乐源、歌单与 iCloud 同步数据。
![]() 桌面资料库与播放 | ![]() 音乐源管理 |
![]() 电台文件夹与标签 | ![]() 小播放器、菜单栏与桌面歌词 |
![]() 全屏封面、歌词与沉浸画面 | ![]() 歌词编辑与逐字打轴 |
![]() 设备互传与 iCloud 同步 | |
Apple TV 客户端可以浏览整座曲库、直接连接多种音乐源,并通过 iCloud 或局域网从 iPhone 接收资料库、凭据和播放所需配置。
![]() 在电视上听自己的音乐 | ![]() 音乐源直连与扫码传输 |
![]() 收藏电台 | ![]() 封面与同步歌词 |
![]() 全屏封面与沉浸画面 | |
Apple TV 的可播放路径取决于来源类型、凭据和中继设置。tvOS 现已具备 FFmpeg 兼容解码,可播放 WMA、DTS、TrueHD 等系统原生解码器不支持的格式。
| 类别 | 当前支持 |
|---|---|
| NAS | Synology DSM、QNAP |
| 文件协议 | SMB/CIFS、WebDAV、FTP、SFTP、NFS、S3、UPnP/DLNA |
| 音乐服务器 | Subsonic、Navidrome、Airsonic、Gonic、飞牛音乐、道理鱼、Songloft、群晖 Audio Station |
| 媒体服务器 | Jellyfin、Emby、Plex |
| 云盘 | 123 云盘、115、百度网盘、阿里云盘、Google Drive、OneDrive、Dropbox、Drime、光鸭云盘 |
| Apple 与本地 | iPhone/iPad 文件导入、Mac 本地文件夹、Apple Music 资料库与目录 |
绿联 UGOS 与 fnOS 系统级文件 API 仍在等待厂商提供稳定公开接口,因此不作为已支持的 NAS 来源。飞牛音乐是独立的音乐服务直连,不依赖 fnOS 文件 API。
.cue,按 INDEX 01 将整轨镜像展开为带独立标题、序号、时间边界和 ReplayGain 的虚拟歌曲.dts / DTS-HD,以及 WAV 容器中的 DTS-CD 识别与兼容解码.lrc / .elrc / .lys / .yrc / .qrc / .vtt / .srt 歌词和同名 MVoffset、对唱、和声、译文与罗马音,能够点击跳转、手动浏览后自动跟随,并在 iOS/macOS/tvOS/Watch 多端显示| 组件 | 最低要求 |
|---|---|
| 开发工具 | Xcode 26.0+、Swift 6.0+、macOS 开发环境 |
| iPhone / iPad | iOS / iPadOS 18.0+ |
| Mac App | macOS 15.0+ |
| Apple TV | tvOS 17.0+ |
| Apple Watch | watchOS 10.0+ |
git clone git@github.com:chenqi92/primuse.git
cd primuse
open Primuse.xcodeproj
首次打开时,Xcode 会解析 Swift Package Manager 依赖和仓库内置的 FFmpeg XCFramework。
com.apple.developer.networking.multicast。也可以修改 project.yml 中的 DEVELOPMENT_TEAM,再通过 XcodeGen 重新生成工程。
cp Config/Secrets.local.xcconfig.example Config/Secrets.local.xcconfig
按需填入云盘 OAuth 和 Last.fm 配置。Config/Secrets.local.xcconfig 已被 Git 忽略;未配置某项内置 OAuth 凭据时,对应服务可能需要开发者自己的客户端配置。
# 通用 iOS 模拟器构建
xcodebuild -project Primuse.xcodeproj \
-scheme Primuse \
-destination 'generic/platform=iOS Simulator' \
build
# Apple TV 模拟器构建
xcodebuild -project Primuse.xcodeproj \
-scheme PrimuseTV \
-destination 'generic/platform=tvOS Simulator' \
build
# PrimuseKit 测试
swift test --package-path PrimuseKit
仓库提供统一的本地开发脚本:
# 交互式选择操作
scripts/primuse-dev.sh
# 查看可用的 iPhone / iPad
scripts/primuse-dev.sh devices
# 覆盖安装并保留 App 数据
scripts/primuse-dev.sh ios-overwrite
# 完全重装;脚本会要求输入 DELETE,设备上的 App 数据会被清除
scripts/primuse-dev.sh ios-clean
# 构建并启动 Mac App
scripts/primuse-dev.sh mac
真机构建前可运行 scripts/check-apple-signing.sh,提前检查证书私钥和 codesign 权限。
Primuse 可通过 JSON 配置描述搜索、详情、封面和歌词端点,并用 JavaScript 解析响应。导入前会显示域名、请求方式、能力、Cookie、TLS 信任域与敏感配置警告,确认后才保存。
{
"id": "my-source",
"name": "My Music Source",
"version": 1,
"icon": "music.note",
"color": "#FF6600",
"rateLimit": 500,
"headers": {
"User-Agent": "Primuse"
},
"capabilities": ["metadata", "cover", "lyrics", "lyricsWordLevel"],
"search": {
"url": "https://api.example.com/search",
"method": "GET",
"params": {
"q": "{{query}}",
"artist": "{{artist}}",
"album": "{{album}}",
"limit": "{{limit}}"
},
"script": "return (response.results || []).map(function (item) { return { id: String(item.id), title: item.title, artist: item.artist, album: item.album, durationMs: item.durationMs, coverUrl: item.coverUrl }; });"
},
"detail": {
"url": "https://api.example.com/tracks/{{id}}",
"method": "GET",
"script": "return response;"
},
"cover": {
"url": "https://api.example.com/tracks/{{id}}/covers",
"method": "GET",
"script": "return response.covers || [];"
},
"lyrics": {
"url": "https://api.example.com/tracks/{{id}}/lyrics",
"method": "GET",
"script": "return { lrcContent: response.lrc, wordLevelLrc: response.wordLevelLrc, plainText: response.text };"
}
}
脚本可使用:
response:已解析的 JSON 响应responseText:原始响应文本externalId:详情、封面和歌词端点的当前外部 IDlog(msg):调试日志返回值约定:
search:[{id, title, artist, album, year, durationMs, coverUrl, trackNumber, genres}]detail:{title, artist, albumArtist, album, year, trackNumber, discNumber, durationMs, genres, coverUrl}cover:[{coverUrl, thumbnailUrl}]lyrics:{lrcContent, wordLevelLrc, plainText}不要导入来源不明的配置。自定义脚本会处理远程响应;Cookie、请求头、TLS 信任域和本地 secrets 都属于敏感权限。
primuse/
├── Primuse/ # iOS 与 macOS 共用的主应用代码
│ ├── App/ # App 入口、依赖装配、CarPlay 与外接屏 Scene
│ ├── Services/
│ │ ├── AI/ # 可选智能服务、语义搜索与音频转写
│ │ ├── AppleMusic/ # MusicKit 目录、资料库与混合队列
│ │ ├── Audio/ # 播放引擎、原生/FFmpeg 解码、缓存与音效
│ │ ├── Cloud/ # CloudKit、家庭共享、跨端快照和凭据同步
│ │ ├── DLNA/ # UPnP/AV Renderer 与投送
│ │ ├── Library/ # GRDB 资料库、扫描、Spotlight 与维护工具
│ │ ├── Metadata/ # 标签、Sidecar、刮削器和歌词翻译
│ │ ├── Radio/ # 网络电台、清单订阅、台标与实时元数据
│ │ ├── Relay/ # iPhone 到 Apple TV 的局域网中继
│ │ ├── Sources/ # NAS、协议、服务器和云盘连接器
│ │ ├── Transfer/ # 局域网设备互传与网页文件管理
│ │ └── Watch/ # WatchConnectivity 桥接
│ ├── Views/ # iOS 与 macOS 界面
│ └── Resources/ # 16 种本地化、资源和隐私清单
├── PrimuseKit/ # 跨 iOS/macOS/tvOS 共享模型、策略与流解析
├── PrimuseTV/ # Apple TV App
├── PrimuseTopShelf/ # tvOS Top Shelf 扩展
├── PrimuseWatch/ # Apple Watch App
├── PrimuseWatchShared/ # Watch App 与复杂功能共享模型
├── PrimuseWatchWidgets/ # Watch 表盘复杂功能
├── PrimuseWidgetExtension/ # iOS/macOS 小组件与控制中心组件
├── Frameworks/FFmpeg/ # iOS/macOS/tvOS FFmpeg XCFramework
├── Config/ # Entitlements、xcconfig 与 Info 配置
├── scripts/ # 构建、安装、签名、FFmpeg 与截图工具
└── project.yml # XcodeGen 工程定义与统一版本号
| 包或框架 | 用途 |
|---|---|
| SFBAudioEngine | 高保真音频解码与 DSD 支持 |
| FFmpeg 8.1(仓库内动态 XCFramework) | DTS/DTS-CD、多声道降混和兼容格式解码 |
| GRDB.swift | SQLite 资料库持久化 |
| AMSMB2 | SMB/CIFS 客户端 |
| FileProvider | FTP 与 WebDAV 文件操作 |
| Citadel | SSH/SFTP 客户端 |
| NFSKit | NFS 客户端 |
| swift-crypto | 加密与签名操作 |
| swift-nio | 异步网络基础设施 |
| SwiftDraw | SVG 电台台标与矢量图像渲染 |
系统框架包括 MusicKit、CloudKit、AVFoundation、MediaPlayer、CarPlay、WidgetKit、WatchConnectivity、App Intents、Core Spotlight、Translation 和 Network.framework。
本地 / NAS / 协议 / 媒体服务器 / 云盘
→ SourceManager / StreamResolver / Range Fetcher
→ CUE Segment 与缓存/预热策略
→ NativeAudioDecoder(SFBAudioEngine)或 FFmpegAudioDecoder
→ AVAudioConverter
→ AVAudioEngine(Player → Mixer → EQ / Dynamics / Reverb → Output)
Apple Music
→ MusicKit ApplicationMusicPlayer
→ Primuse 混合队列与系统 Now Playing 状态协调
扫描来源
→ 文件标签 + Sidecar + CUE 展开
→ MetadataBackfillService
→ GRDB 资料库与 MetadataAssetStore
手动 / 自动 / 批量刮削
→ ScraperManager
→ 内置或 JSON + JavaScript 自定义刮削器
→ 标题/艺术家/专辑/时长候选排序
→ 本地缓存,或 SidecarWriteService 写回受支持来源
iPhone / iPad / Mac
↔ CloudKit:歌单、来源、设置、历史、统计、资料库快照
↔ iCloud Keychain / 加密凭据包
↔ Apple TV:CloudKit 同步或局域网二维码直传
↔ Apple Watch:WatchConnectivity 播放状态与控制命令
Primuse 不提供音乐内容或云存储。你需要使用自己的文件、服务器和第三方账号;各服务的可用性取决于提供商、地区、账号权限和 API 状态。请遵守内容来源的服务条款和适用法律。
Swift
77.9%
C
19.8%