aome510/spotify-player

GitHub: aome510/spotify-player

一款基于 Rust 开发的高性能终端 Spotify 播放器,提供与官方客户端功能对等的命令行音乐播放与控制体验。

Stars: 6477 | Forks: 334

# spotify_player ## 目录 - [简介](#introduction) - [示例](#examples) - [安装](#installation) - [功能](#features) - [Spotify Connect](#spotify-connect) - [流媒体播放](#streaming) - [音频可视化](#audio-visualization) - [媒体控制](#media-control) - [图像](#image) - [通知](#notify) - [鼠标支持]( | 16x16 | 32x32 | 64x64 | 要临时禁用像素化,请将 `cover_img_pixels` 设置为一个较高的值(例如 `512`)。 ### 通知 要启用桌面通知,请使用 `notify` 功能进行构建(默认禁用): ``` cargo install spotify_player --features notify ``` **注意**:与 Linux 相比,macOS 和 Windows 上的通知支持有所限制。 ### 鼠标支持 鼠标支持:您可以通过左键单击进度条来定位到播放中的某个位置。 ### Daemon 要启用 daemon 模式,请使用 `daemon` 功能进行构建(默认禁用): ``` cargo install spotify_player --features daemon ``` 使用 `-d` 或 `--daemon` 作为 daemon 运行:`spotify_player -d`。 **注意**: - Windows 不支持 daemon 模式。 - Daemon 模式需要流媒体播放功能和音频后端。 - 在 macOS 上,daemon 模式不兼容媒体控制(默认启用)。要在 macOS 上使用 daemon 模式,请禁用媒体控制: cargo install spotify_player --no-default-features --features daemon,rodio-backend ### 模糊搜索 要启用[模糊搜索](https://en.wikipedia.org/wiki/Approximate_string_matching),请使用 `fzf` 功能进行构建(默认禁用)。 ### CLI 命令 `spotify_player` 提供了几个用于与 Spotify 交互的 CLI 命令: - `get`:获取 Spotify 数据(播放列表/专辑/艺术家数据、用户数据等) - `playback`:与播放交互(开始播放、播放/暂停、下一首等) - `search`:搜索 spotify - `connect`:连接到 Spotify 设备 - `like`: liking 当前播放的曲目 - `authenticate`:验证应用程序 - `playlist`:播放列表编辑(新建、删除、导入、派生等) 有关更多详细信息,请运行 `spotify_player -h` 或 `spotify_player {command} -h`。 **注意** - 首次使用时,请运行 `spotify_player authenticate` 来验证应用程序。 - CLI 命令通过端口 `client_port`(默认:`8080`)上的客户端 socket 进行通信。如果没有实例在运行,则会启动一个新的客户端,这可能会增加延迟。 #### 脚本编写 命令行界面非常易于编写脚本。使用 `search` 子命令以 JSON 格式检索 Spotify 数据,然后可以使用 [jq](https://jqlang.github.io/jq/) 等工具进行处理。 示例:开始播放搜索查询中的第一首曲目: ``` read -p "Search spotify: " query spotify_player playback start track --id $(spotify_player search "$query" | jq '.tracks.[0].id' | xargs) ``` ## 命令 按 `` 或 `C-h` 打开快捷键帮助页面(`OpenCommandHelp` 的默认设置)。 **提示**: - 使用 `Search` 命令在快捷键帮助页面和其他页面中进行搜索。 - `RefreshPlayback` 手动更新播放状态。 - `RestartIntegratedClient` 可用于切换音频设备而无需重启应用程序。 支持的命令列表: | Command | Description | Default shortcuts | | ------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------ | | `NextTrack` | 下一首曲目 | `n` | | `PreviousTrack` | 上一首曲目 | `p` | | `ResumePause` | 根据当前播放状态恢复/暂停 | `space` | | `PlayRandom` | 在当前上下文中播放随机曲目 | `.` | | `Repeat` | 循环切换循环模式 | `C-r` | | `Shuffle` | 切换随机播放模式 | `C-s` | | `VolumeChange` | 按偏移量更改播放音量(默认快捷键使用 5%) | `+`, `-` | | `Mute` | 在 0% 和先前音量之间切换播放音量 | `_` | | `SeekStart` | 跳至当前曲目开头 | `^` | | `SeekForward` | 按秒数快进(默认为 `seek_duration_secs`) | `>` | | `SeekBackward` | 按秒数快退(默认为 `seek_duration_secs`) | `<` | | `Quit` | 退出应用程序 | `C-c`, `q` | | `ClosePopup` | 关闭弹出窗口 | `esc` | | `SelectNextOrScrollDown` | 在列表/表中选择下一个项目或向下滚动(支持 vim 风格的计数:5j) | `j`, `C-n`, `down` | | `SelectPreviousOrScrollUp` | 在列表/表中选择上一个项目或向上滚动(支持 vim 风格的计数:10k) | `k`, `C-p`, `up` | | `PageSelectNextOrScrollDown` | 在列表/表中选择下一页项目或向下滚动一页(支持 vim 风格的计数:3C-f) | `page_down`, `C-f` | | `PageSelectPreviousOrScrollUp` | 在列表/表中选择上一页项目或向上滚动一页(支持 vim 风格的计数:2C-b) | `page_up`, `C-b` | | `SelectFirstOrScrollToTop` | 在列表/表中选择第一个项目或滚动到顶部 | `g g`, `home` | | `SelectLastOrScrollToBottom` | 在列表/表中选择最后一个项目或滚动到底部 | `G`, `end` | | `ChooseSelected` | 选择当前高亮的项目 | `enter` | | `RefreshPlayback` | 手动刷新当前播放状态 | `r` | | `RestartIntegratedClient` | 重新启动集成客户端(仅限 `streaming` 功能) | `R` | | `ShowActionsOnSelectedItem` | 打开一个弹出窗口,显示针对所选项目的操作 | `g a`, `C-space` | | `ShowActionsOnCurrentTrack` | 打开一个弹出窗口,显示针对当前曲目的操作 | `a` | | `ShowActionsOnCurrentContext` | 打开一个弹出窗口,显示针对当前上下文的操作 | `A` | | `AddSelectedItemToQueue` | 将所选项目添加到队列 | `Z`, `C-z` | | `FocusNextWindow` | 聚焦到下一个可聚焦的窗口(如果有的话) | `tab` | | `FocusPreviousWindow` | 聚焦到上一个可聚焦的窗口(如果有的话) | `backtab` | | `SwitchTheme` | 打开一个用于切换主题的弹出窗口 | `T` | | `SwitchDevice` | 打开一个用于切换设备的弹出窗口 | `D` | | `Search` | 打开一个用于在当前页面中搜索的弹出窗口 | `/` | | `BrowseUserPlaylists` | 打开一个用于浏览用户播放列表的弹出窗口 | `u p` | | `BrowseUserFollowedArtists` | 打开一个用于浏览用户关注的艺术家的弹出窗口 | `u a` | | `BrowseUserSavedAlbums` | 打开一个用于浏览用户保存的专辑的弹出窗口 | `u A` | | `CurrentlyPlayingContextPage` | 转到当前正在播放的上下文页面 | `g space` | | `TopTrackPage` | 转到用户热门曲目页面 | `g t` | | `RecentlyPlayedTrackPage` | 转到用户最近播放的曲目页面 | `g r` | | `LikedTrackPage` | 转到用户喜欢的曲目页面 | `g y` | | `LyricsPage` | 转到当前曲目的歌词页面 | `g L`, `l` | | `LibraryPage` | 转到用户资料库页面 | `g l` | | `SearchPage` | 转到搜索页面 | `g s` | | `BrowsePage` | 转到浏览页面 | `g b` | | `Queue` | 转到队列页面 | `z` | | `OpenCommandHelp` | 转到命令帮助页面 | `?`, `C-h` | | `PreviousPage` | 转到上一页 | `backspace`, `C-q` | | `OpenSpotifyLinkFromClipboard` | 从剪贴板打开 Spotify 链接 | `O` | | `SortTrackByTitle` | 按曲目标题对曲目表(如果有的话)进行排序 | `s t` | | `SortTrackByArtists` | 按曲目的艺术家对曲目表(如果有的话)进行排序 | `s a` | | `SortTrackByAlbum` | 按曲目的专辑对曲目表(如果有的话)进行排序 | `s A` | | `SortTrackByAddedDate` | 按曲目的添加日期对曲目表(如果有的话)进行排序 | `s D` | | `SortTrackByDuration` | 按曲目的时长对曲目表(如果有的话)进行排序 | `s d` | | `SortLibraryAlphabetically` | 按字母顺序对资料库进行排序 | `s l a` | | `SortLibraryByRecent` | 按最近添加的项目对资料库(播放列表和专辑)进行排序 | `s l r` | | `ReverseOrder` | 反转曲目表(如果有的话)的顺序 | `s r` | | `MovePlaylistItemUp` | 将播放列表项目向上移动一个位置 | `C-k` | | `MovePlaylistItemDown` | 将播放列表项目向下移动一个位置 | `C-j` | | `CreatePlaylist` | 创建一个新的播放列表 | `N` | | `JumpToCurrentTrackInContext` | 跳转到上下文中的当前曲目 | `g c` | | `JumpToHighlightTrackInContext` | 跳转到上下文中当前高亮显示的搜索结果 | `C-g` | 要添加或修改快捷键,请参见 [快捷键映射部分](https://github.com/aome510/spotify-player/blob/master/docs/config.md#keymaps)。 ### 操作 并非所有操作都适用于每个 Spotify 项目。要查看可用操作,请使用 `ShowActionsOnCurrentTrack` 或 `ShowActionsOnSelectedItem`,然后按回车键触发操作。某些操作可能不会出现在弹出窗口中,但可以绑定到快捷键。 可用操作列表: - `GoToArtist` - `GoToAlbum` - `GoToRadio` - `AddToLibrary` - `AddToPlaylist` - `AddToQueue` - `AddToLiked` - `DeleteFromLiked` - `DeleteFromLibrary` - `DeleteFromPlaylist` - `ShowActionsOnAlbum` - `ShowActionsOnArtist` - `ShowActionsOnShow` - `ToggleLiked` - `CopyLink` - `Follow` - `Unfollow` 操作也可以绑定到快捷键。要添加新的快捷键,请参见 [操作部分](https://github.com/aome510/spotify-player/blob/master/docs/config.md#actions)。 ### 搜索页面 进入搜索页面时,焦点位于搜索输入框中。输入文本,使用 `backspace` 删除,按 `enter` 进行搜索。 要将焦点从搜索输入框移动到其他窗口(曲目结果、专辑结果等),请使用 `FocusNextWindow` 或 `FocusPreviousWindow`。 ## 配置 默认情况下,配置文件位于 `$HOME/.config/spotify_player`。使用 `-c ` 或 `--config-folder ` 更改此路径。 如果找不到配置文件,将使用默认值创建一个。 有关可用选项的详细信息,请参见 [配置文档](https://github.com/aome510/spotify-player/blob/master/docs/config.md)。 ## 缓存 默认情况下,缓存文件存储在 `$HOME/.cache/spotify-player`(日志、凭据、音频缓存等)。使用 `-C ` 或 `--cache-folder ` 更改此路径。 ### 日志 日志存储在 `$APP_CACHE_FOLDER/spotify-player-*.log` 中。如需调试或遇到问题,请检查 `$APP_CACHE_FOLDER/spotify-player-*.backtrace` 中的回溯文件。 设置 `RUST_LOG` 环境变量以控制[日志级别](https://docs.rs/log/0.4.14/log/enum.Level.html)。默认为 `spotify_player=INFO`。 ## 致谢 `spotify_player` 使用 [Rust](https://www.rust-lang.org) 编写,并基于 [ratatui](https://github.com/ratatui/ratatui)、[rspotify](https://github.com/ramsayleung/rspotify)、[librespot](https://github.com/librespot-org/librespot) 等库构建。它的灵感来源于 [spotify-tui](https://github.com/Rigellute/spotify-tui) 和 [ncspot](https://github.com/hrkfdn/ncspot)。
标签:CLI, Rust, Spotify, Spotify Connect, TUI, WiFi技术, 可视化界面, 媒体控制, 媒体播放器, 媒体流传输, 守护进程, 开源, 桌面歌词, 桌面通知, 模糊搜索, 流媒体, 终端应用, 网络流量审计, 通知系统, 音乐播放器, 音频可视化