MCPcopy
hub / github.com/go-musicfox/go-musicfox

github.com/go-musicfox/go-musicfox @v4.8.5 sqlite

repository ↗ · DeepWiki ↗ · release v4.8.5 ↗
2,059 symbols 5,949 edges 275 files 613 documented · 30%
README

go-musicfox | 另一个Spotify版 Spotifox

go-musicfox 是用 Go 写的又一款网易云音乐命令行客户端,支持各种音质级别、UnblockNeteaseMusic、Last.fm、MPRIS 和 macOS 交互响应(睡眠暂停、蓝牙耳机连接断开响应和菜单栏控制等)等功能特性,以及 DLNA 投送。

UI 基于 charmbracelet/bubbletea 进行了部分定制

GitHub repo size GitHub Last Tag GitHub last commit GitHub All Releases GitHub stars GitHub forks

logo

(The icon is based on kitty-icon)


预览

1. 启动

启动界面

2. 主界面

主界面

3. 通知

通知

4. 登录

登录界面

5. 搜索

搜索界面

6. Last.fm 授权

lastfm

7. macOS NowPlaying

NowPlaying

8. UnblockNeteaseMusic

UNM

9. macOS 歌词显示

LyricsX

[!IMPORTANT] 需要满足以下条件: 1. go-musicfox >= v3.7.7 2. 下载和安装 LyricsX 的 go-musicfox 的 fork 版本 3. 在 LyricsX 设置中,打开使用系统正在播放的应用

安装

macOS

1. 通过 Homebrew 安装

$ brew install anhoder/go-musicfox/go-musicfox  // 指定 --head 使用master代码编译安装

如果你之前安装过 musicfox,需要使用下列命令重新链接:

$ brew unlink musicfox && brew link --overwrite go-musicfox

2. 直接下载

Release 下载 macOS 的可执行文件。

Linux

1. 使用发行版软件包(推荐)

Arch Linux
AUR 安装
$ paru -S go-musicfox # 下载源代码编译安装
$ paru -S go-musicfox-bin # 下载安装预编译好的二进制
archlinuxcn 安装

首先添加 archlinuxcn 仓库到系统

# pacman -S go-musicfox
Fedora Linux
Copr 安装。
$ sudo dnf copr enable poesty/go-musicfox
$ sudo dnf install go-musicfox
Debian系发行版(Ubuntu、Deepin、UOS等)
星火商店 安装。
$ sudo aptss install go-musicfox  //二进制包部署,同步较慢
$ sudo aptss install go-musicfox-git  //从源码编译,请保持网络通畅
Gentoo Linux
gentoo-zh Overlay 安装
$ eselect repository enable gentoo-zh
$ emerge --sync
$ emerge -a media-sound/go-musicfox
NixOS
  1. flake support

下面是一个在nixos配置中使用它的例子

{
  description = "My configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    go-musicfox.url = "github:go-musicfox/go-musicfox";
  };

  outputs = { nixpkgs, go-musicfox, ... }:
    {
      nixosConfigurations = {
        hostname = nixpkgs.lib.nixosSystem
          {
            system = "x86_64-linux";
            modules = [
              {
                nixpkgs.overlays = [ go-musicfox.overlays.default ];
                environment.systemPackages = with pkgs;[
                  go-musicfox
                ];
              }
            ];
          };
      };
    };
}

临时运行:

$ nix run github:go-musicfox/go-musicfox
  1. 配置 configuration.nix 或使用 Home Manager(推荐)
# configuration.nix
environment.systemPackages = [
  pkgs.go-musicfox
];

# home manager
home.packages = [
  pkgs.go-musicfox
];
  1. Nixpkgs 安装

安装到本地 profile:

$ nix-env -iA nixos.go-musicfox

临时安装:

$ nix-shell -p go-musicfox
Void Linux

void-packages-zh 安装。

Termux(Android)
$ apt install go-musicfox

如果遇到卡顿,请切换到mpd播放引擎

2. 通过 Homebrew 安装

$ brew install anhoder/go-musicfox/go-musicfox  // 指定 --head 使用master代码编译安装

如果你之前安装过 musicfox,需要使用下列命令重新链接:

$ brew unlink musicfox && brew link --overwrite go-musicfox

3. 通过 Flatpak 安装

Download on Flathub

4. 直接下载

Release 下载 Linux 的可执行文件。

Windows

1. 通过 scoop 安装

scoop bucket add go-musicfox https://github.com/go-musicfox/go-musicfox.git

scoop install go-musicfox

2. 直接下载

Release 下载 Windows 的可执行文件。

手动编译

注:需要 Go v1.22 及以上版本

前往 下载 Go 页面选择适合你的 Go 安装包体。

在 Linux 上编译

Linux 需要 libFLAC-dev 开发套件

请根据你的发行版,选择适合你的安装命令:

  • APT (Debian, Ubuntu)
$ sudo apt install software-properties-common build-essential
$ sudo add-apt-repository ppa:longsleep/golang-backports //ubuntu默认go语言版本为1.18,需要更新到1.21
$ sudo apt install libflac-dev libasound2-dev golang-go
  • pacman (Arch)
$ sudo pacman -S flac
  • DNF (Fedora)
$ sudo dnf install flac-devel

其他发行版请根据相应文档寻找 libflac-dev 开发套件安装说明。

开始编译

$ git clone https://github.com/go-musicfox/go-musicfox
$ go mod download
$ make # 编译到 bin 目录下
$ make install # 安装到 $GOPATH/bin下

使用

$ musicfox

注意事项

  • 请务必使用等宽字体,或将配置项 doubleColumn 设为 false,否则双列显示排版可能会混乱
  • 如果在使用时出现莫名奇妙的光标移动、切歌或暂停等现象,请将配置项 enableMouseEvent 设置为 false
  • 本应用不对 macOS 原生终端和 Windows 的命令提示符(CMD)做兼容处理(#99

    macOS 用户推荐使用 iTerm2Kitty

    Linux 用户推荐使用 Kitty

    Windows 用户推荐使用 Windows Terminal,使用体验更佳

  • 如果在执行文件时遇到以下错误,说明你的操作系统内不包含 libFLAC.so.8./musicfox: error while loading shared libraries: libFLAC.so.8: cannot open shared object file: No such file or directory 例如 Ubuntu 23.10 及它的衍生版系列,libFLAC.so.12 已经将 libFLAC.so.8 替换。

遇到这种问题,你可以: * 找到已安装的新版 libFLAC.so,将其软链为libFLAC.so.8: ln -s /xxx/libFLAC.so /xxx/libFLAC.so.8推荐) * 自行安装 libflac8 (不推荐) * 参照手动编译一节自行编译。

这里之所以使用 FLAC8,主要是为了兼容大部分系统,因为FLAC是向前兼容的(也就是说 ≥ 8 的FLAC都可以使用) - wsl 环境下使用 beep 须安装 libasound2-plugins,见 issues - XDG 支持

#453 起,提供了完整的 XDG 支持,部分文件路径变更,见 XDG 支持说明 - 配置文件格式 自 #484 起,配置文件格式已由 INI 更换为 TOML

DLNA 投送

DLNA 引擎允许你将音乐投送到兼容 DLNA 的设备(如智能电视、音响、游戏机等)。

  1. 获取设备 URL
  2. 安装 gupnp-toolsbrew install gupnp-tools(macOS)或 sudo apt install gupnp-tools(Linux)
  3. 运行 gupnp-universal-cp,扫描并复制设备的描述 URL(形如 http://192.168.1.100:49152/description.xml

  4. 配置config.toml 中设置: ```toml [player] engine = "dlna"

[player.dlna] deviceUrl = "http://你的设备IP:端口/description.xml" localIP = "本机局域网IP" # 例如 192.168.1.50 ```

  1. 播放 启动应用后,选择歌曲即可自动投送到 DLNA 设备。

快捷键

应用内快捷键

不可自定义操作 (内置)

这些是程序核心框架提供的基础操作,其快捷键通常无法通过配置文件修改。

配置标识符 操作说明 默认按键
rerender 重新渲染UI r, R
moveLeft h, H, Left
moveRight l, L, Right
moveUp k, K, Up
moveDown j, J, Down
moveToTop 上移到顶部 g
moveToBottom 下移到底部 G
enter 进入 n, N, Enter
goBack 返回上一级 b, B, Esc
search 搜索当前列表 /, ,
quit 退出 q, Q
可自定义操作

你可以在配置文件的 [keybindings] 部分修改这些操作的快捷键。

配置标识符 操作说明 默认按键
help 帮助信息 ?,
pageUp 上一页 Ctrl+u, PgUp
pageDown 下一页 Ctrl+d, PgDown
playortoggle 播放/暂停 Space, ,
toggle 切换播放状态 (无)
previous 上一首 [,
next 下一首 ],
backwardOneSec 快退1秒 x
backwardFiveSec 快退5秒 X
forwardFiveSec 快进5秒 v
forwardTenSec 快进10秒 V
downVolume 减小音量 -, ,
upVolume 加大音量 =,
switchPlayMode 切换播放模式 p
intelligence 心动模式 P
clearSongCache 清除音乐缓存 u, U
logout 注销并退出 w, W
curPlaylist 显示当前播放列表 c, C
appendSongsToNext 添加为下一曲播放 e
appendSongsAfterCurPlaylist 添加到播放列表末尾 E
delSongFromCurPlaylist 从播放列表删除选中歌曲 \,
likePlayingSong 喜欢播放中歌曲 ,,
dislikePlayingSong 取消喜欢播放中歌曲 .,
trashPlayingSong 标记播放中歌曲为不喜欢 t
addPlayingSongToUserPlaylist 将播放中歌曲加入歌单 `
removePlayingSongFromUserPlaylist 将播放歌曲从歌单中删除 ~,
downloadPlayingSong 下载播放中歌曲 d
downloadPlayingSongLrc 下载当前播放音乐歌词 Ctrl+l
openAlbumOfPlayingSong 播放中歌曲的所属专辑 a
openArtistOfPlayingSong 播放中歌曲的所属歌手 s
openPlayingSongInWeb 网页打开播放中歌曲 o
simiSongsOfPlayingSong 与播放中歌曲相似的歌曲 f
likeSelectedSong 喜欢选中歌曲 <, , , , «
dislikeSelectedSong 取消喜欢选中歌曲 >, , , , »
trashSelectedSong 标记选中歌曲为不喜欢 T

Extension points exported contracts — how you extend this code

Sharer (Interface)
Sharer 定义了提供可分享项目的行为。 任何实现了此接口的类型(通常是 Menu),都表明其内容支持分享功能。 [6 implementers]
internal/composer/share.go
PlayMode (Interface)
PlayMode 播放模式策略接口 定义不同播放模式的行为策略 [6 implementers]
internal/playlist/interfaces.go
Model (Interface)
(no doc) [9 implementers]
internal/storage/model.go
Player (Interface)
(no doc) [6 implementers]
internal/player/player.go
SongsMenu (Interface)
(no doc) [14 implementers]
internal/ui/menu.go
ManagerOption (FuncType)
ManagerOption 是用于配置 Manager 的函数类型。
internal/track/manager.go
Fetcher (Interface)
Fetcher defines the behavior for retrieving structured lyric data for a song.
internal/lyric/fetcher.go
Service (Interface)
(no doc) [1 implementers]
internal/reporter/reporter.go

Core symbols most depended-on inside this repo

Error
called by 78
internal/netease/error.go
String
called by 64
internal/types/player.go
Run
called by 63
internal/macdriver/cocoa/nsapplication.go
String
called by 57
internal/macdriver/core/nsstring.go
Close
called by 45
internal/player/player.go
Error
called by 44
utils/slogx/slog.go
Error
called by 42
internal/playlist/errors.go
ID
called by 39
internal/macdriver/cocoa/nsuser_notification_delegate.go

Shape

Method 1,109
Function 620
Struct 270
TypeAlias 27
Interface 26
FuncType 7

Languages

Go100%
TypeScript1%

Modules by API surface

internal/ui/player.go42 symbols
internal/player/dlna_player.go38 symbols
utils/struct/structs.go36 symbols
internal/player/mpv_player.go34 symbols
internal/player/beep_player.go27 symbols
internal/player/mpd_player.go26 symbols
internal/ui/login_page.go25 symbols
internal/remote_control/remote_command_handler_darwin.go24 symbols
internal/ui/kitty/image.go23 symbols
internal/track/manager.go23 symbols
internal/macdriver/mediaplayer/mpremotecommandcenter.go23 symbols
internal/ui/operate.go22 symbols

Dependencies from manifests, versioned

github.com/adrg/xdgv0.5.3 · 1×
github.com/anhoder/foxful-cliv0.5.0 · 1×
github.com/atotto/clipboardv0.1.4 · 1×
github.com/aymanbagabas/go-osc52/v2v2.0.1 · 1×
github.com/bogem/id3v2/v2v2.1.4 · 1×
github.com/charmbracelet/bubblesv0.16.1 · 1×
github.com/cnsilvan/UnblockNeteaseMusicv0.0.0-2023031008381 · 1×
github.com/cocoonlife/goflacv0.0.0-2017021014290 · 1×

For agents

$ claude mcp add go-musicfox \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact