7个版本
0.1.6 | 2024年3月29日 |
---|---|
0.1.5 | 2024年2月4日 |
0.1.4 | 2023年8月6日 |
0.1.3 | 2023年2月18日 |
0.1.2 | 2022年5月14日 |
#37 在 音频
218 每月下载量
用于 spotify_player
15KB
200 行
spotify_player
目录
简介
spotify_player
是一个快速、易于使用且可配置的终端音乐播放器。
特性
- 具有直观的分页和弹出系统的简约UI。
- 高度 可配置
- 与官方Spotify应用具有相同的功能。
- 支持使用 Spotify Connect 远程控制。
- 支持从终端直接 流媒体 播放歌曲。
- 支持大多数歌曲的 歌词。
- 支持 跨平台媒体控制。
- 支持 图像渲染。
- 支持 桌面通知。
- 支持以 守护进程 的形式运行应用程序。
- 提供广泛的 命令行命令。
示例
在 youtube 或 asciicast 上查看 spotify_player
v0.5.0-pre-release
的演示。
查看 examples/README.md 以获取更多示例。
安装
默认情况下,应用程序安装的二进制文件是 spotify_player
。
要求
需要 Spotify Premium 账户。
依赖关系
Windows 和 MacOS
- 作为构建依赖项安装 Rust 和 cargo
Linux
- 作为构建依赖项安装 Rust 和 cargo
- 安装
openssl
、alsa-lib
(streaming
功能)、libdbus
(media-control
功能)。-
例如,在基于Debian的系统上,运行以下命令安装应用程序的依赖项:
sudo apt install libssl-dev libasound2-dev libdbus-1-dev
-
二进制文件
应用程序的预构建二进制文件可以在发布页面找到。
注意:要运行应用程序,Linux系统需要安装如依赖性部分中指定的附加依赖项。
Homebrew
运行brew install spotify_player
来安装应用程序。
Scoop
运行scoop install spotify-player
来安装应用程序。
Cargo
运行cargo install spotify_player
从crates.io安装应用程序。
AUR
运行yay -S spotify-player
将应用程序作为AUR包安装。
或者,运行yay -S spotify-player-full-pipe
安装一个具有完整功能支持和Pulseaudio/Pipewire而不是rodio的AUR包。
Void Linux
运行xbps-install -S spotify-player
来安装应用程序。
FreeBSD
运行pkg install spotify-player
从FreeBSD端口安装spotify_player
二进制文件。
NetBSD
使用包管理器,运行pkgin install spotify-player
从官方仓库安装。
从源码构建
cd /usr/pkgsrc/audio/spotify-player
make install
Docker
注意:当使用Docker镜像时,流功能被禁用。
您可以通过运行以下命令下载最新构建的二进制镜像:
docker pull aome510/spotify_player:latest
然后运行
docker run --rm -it aome510/spotify_player:latest
来运行应用程序。
您还可以在运行Docker镜像时使用您本地的配置文件夹来配置应用程序,或使用您本地的缓存文件夹来存储应用程序的缓存数据。
docker run --rm \
-v $APP_CONFIG_FOLDER:/app/config/ \
-v $APP_CACHE_FOLDER:/app/cache/ \
-it aome510/spotify_player:latest
特性
Spotify Connect
要启用完整的Spotify connect支持,用户需要在配置文档中描述的配置文件中注册Spotify应用程序并指定应用程序的client_id
。
有关注册Spotify应用程序的更多详细信息,请参阅官方Spotify文档。
当spotify_player
使用您的自己的client_id
运行时,按D
(默认快捷键为SwitchDevice
命令)以获取可用设备的列表,然后按enter
(默认快捷键为ChooseSelected
命令)连接到所选设备。
流媒体
spotify_player
支持流,需要带有streaming
功能(默认启用)以及音频后端(默认为rodio-backend
)进行构建/安装。流功能允许spotify_player
直接从终端播放音乐。
应用程序使用librespot库在运行时创建一个集成的Spotify客户端。集成客户端将在spotify-player
名称下注册一个Spotify扬声器设备,该设备可以在Spotify connect设备列表中访问。
音频后端
spotify_player
使用 rodio 作为默认的 音频后端。可用的音频后端列表
alsa-backend
pulseaudio-backend
rodio-backend
portaudio-backend
jackaudio-backend
rodiojack-backend
sdl-backend
gstreamer-backend
用户可以在构建/安装应用程序时通过指定 --features
选项来更改音频后端。例如,要使用 pulseaudio-backend
安装 spotify_player
,请运行
cargo install spotify_player --no-default-features --features pulseaudio-backend
注意:
- 需要在这里指定
--no-default-features
,因为rodio-backend
是默认功能之一。 - 用户将需要根据所选音频后端安装额外的依赖项。更多详细信息可以在 Librespot 文档 中找到。
可以通过运行以下命令禁用安装时的 streaming
功能
cargo install spotify_player --no-default-features
歌词
要启用歌词支持,spotify_player
需要使用 lyric-finder
功能(默认情况下是禁用的)构建/安装。要包含 lyric-finder
功能安装应用程序,请运行
cargo install spotify_player --features lyric-finder
用户可以通过调用 LyricPage
命令来查看当前播放的曲目歌词。为此,需要将 spotify_player
构建为带有 lyric-finder
功能。
在底层,spotify_player
使用 Genius.com 获取歌曲的歌词。
媒体控制
要启用媒体控制支持,spotify_player
需要使用 media-control
功能(默认启用)并设置 通用配置文件 中的 enable_media_control
配置选项为 true
。
媒体控制支持在 Linux 上使用 MPRIS DBus 实现,在 Windows 和 MacOS 上使用 OS 窗口事件监听器。
图像
要启用图像渲染支持,spotify_player
需要使用 image
功能(默认禁用)构建/安装。要包含 image
功能安装应用程序,请运行
cargo install spotify_player --features image
spotify_player
支持在 Kitty 或 iTerm2 上运行时以全分辨率渲染图像。否则,图像将以 块字符 显示。
spotify_player
还支持在 sixel
功能标志下渲染图像,这也会启用 image
功能
cargo install spotify_player --features sixel
注意事项:
- 由于
spotify_player
依赖于一个用于图像渲染的第三方库,因此并非所有由 libsixel 支持的终端都由spotify_player
支持。可能支持的终端列表可以在 此处 找到。 sixel
渲染的图像可能具有 奇怪的 缩放比例。建议调整cover_img_scale
配置选项以获得最佳效果,因为缩放与不同的终端和字体不同。
图像渲染示例
- iterm2
- 小猫
- Sixel(
foot
终端,cover_img_scale=1.8
)
- 其他
通知
要启用桌面通知支持,需要将 spotify_player
构建或安装带有 notify
功能(默认情况下是禁用的)。要安装包含 notify
功能的应用程序,请运行
cargo install spotify_player --features notify
注意:与 Linux
相比,MacOS
和 Windows
中的通知支持相当有限。
鼠标支持
目前,鼠标的唯一支持用例是通过在播放进度条中左键单击到当前位置来查找当前播放的位置。
守护进程
要启用 守护进程 支持,需要将 spotify_player
构建或安装带有 daemon
功能(默认情况下是禁用的)。要安装包含 daemon
功能的应用程序,请运行
cargo install spotify_player --features daemon
您可以通过指定 -d
或 --daemon
选项来以守护进程运行应用程序: spotify_player -d
。
注意事项:
-
daemon
功能在 Windows 上不受支持 -
daemon
功能需要启用streaming
功能,并且需要与应用程序一起构建 音频后端 -
由于操作系统的限制,
daemon
功能与 MacOS 上的media-control
功能不兼容,该功能默认为 启用。换句话说,如果您想在 MacOS 上使用daemon
功能,您必须使用没有media-control
功能的应用程序进行安装 禁用cargo install spotify_player --no-default-features --features daemon,rodio-backend
模糊搜索
要启用 模糊搜索 支持,需要将 spotify_player
构建或安装带有 fzf
功能(默认情况下是禁用的)。
CLI 命令
spotify_player
提供了几个 CLI 命令来与 Spotify 交互
get
:获取 Spotify 数据(播放列表/专辑/艺术家数据、用户数据等)playback
:与播放交互(开始播放、播放/暂停、下一首等)connect
:连接到 Spotify 设备like
:喜欢当前播放的曲目authenticate
:验证应用程序playlist
:播放列表编辑(新建、删除、导入、分支等)
有关更多详细信息,请运行 spotify_player -h
或 spotify_player {command} -h
,其中 {command}
是 CLI 命令。
注意事项
- 首次使用 CLI 时,您需要先运行
spotify_player authenticate
以验证应用程序。 - 在底层,CLI 命令通过向运行在端口
client_port
上的spotify_player
客户端套接字发送请求来处理,这是一个通用应用程序配置,默认值为8080
。如果没有运行应用程序的实例,在处理 CLI 命令时将创建新的客户端,这会增加命令的延迟。
命令
要访问快捷键帮助页面,请按 ?
或 C-h
(默认快捷键用于 OpenCommandHelp
命令)。
提示:
- 您可以使用
Search
命令在快捷键帮助页面(以及一些其他页面)中搜索。 RefreshPlayback
可用于手动更新播放状态。RestartIntegratedClient
在用户想要在不重新启动应用程序的情况下切换到另一个音频设备(耳机、耳塞等)时很有用,因为集成客户端将使用新设备重新初始化。
支持命令列表
命令 | 描述 | 默认快捷键 |
---|---|---|
NextTrack |
下一曲目 | n |
PreviousTrack |
上一曲目 | p |
ResumePause |
根据当前播放状态恢复/暂停 | space |
PlayRandom |
在当前上下文中播放随机曲目 | . |
Repeat |
循环重复模式 | C-r |
ToggleFakeTrackRepeatMode |
切换假曲目重复模式 | M-r |
Shuffle |
切换随机模式 | C-s |
VolumeUp |
增加播放音量5% | + |
VolumeDown |
减少播放音量5% | - |
Mute |
在0%和之前级别之间切换播放音量 | _ |
SeekForward |
向前搜索5秒 | > |
SeekBackward |
向后搜索5秒 | < |
Quit |
退出应用程序 | C-c ,q |
ClosePopup |
关闭弹出窗口 | esc |
SelectNextOrScrollDown |
选择列表/表格中的下一项或向下滚动 | j ,C-n ,down |
SelectPreviousOrScrollUp |
选择列表/表格中的上一项或向上滚动 | k ,C-p ,up |
PageSelectNextOrScrollDown |
选择列表/表格中的下一页项或向下滚动一页 | page_down ,C-f |
PageSelectPreviousOrScrollUp |
选择列表/表格中的上一页项或向上滚动一页 | page_up ,C-b |
SelectFirstOrScrollToTop |
选择列表/表格中的第一项或滚动到顶部 | g g ,home |
SelectLastOrScrollToBottom |
选择列表/表格中的最后一项或滚动到底部 | G ,end |
ChooseSelected |
选择所选项 | enter |
RefreshPlayback |
手动刷新当前播放 | r |
RestartIntegratedClient |
重新启动集成librespot客户端(仅限 streaming 功能) |
R |
ShowActionsOnSelectedItem |
打开一个弹出窗口,显示所选项的操作 | g a ,C-space |
ShowActionsOnCurrentTrack |
打开一个弹出窗口,显示当前曲目的操作 | 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 |
LyricPage |
转到当前曲目歌词页面(仅限lyric-finder 功能) |
g L ,l |
LibraryPage |
转到用户库页面 | g l |
SearchPage |
转到搜索页面 | g s |
BrowsePage |
转到浏览页面 | g b |
Queue |
转到队列页面 | z |
OpenCommandHelp |
转到命令帮助页面 | ? ,C-h |
PreviousPage |
转到上一页 | 退格 ,C-q |
OpenSpotifyLinkFromClipboard |
从剪贴板打开Spotify链接 | O |
SortTrackByTitle |
按曲目标题排序曲目表(如果有) | s t |
SortTrackByArtists |
按曲目艺术家排序曲目表(如果有) | s a |
SortTrackByAlbum |
按曲目专辑排序曲目表(如果有) | s A |
SortTrackByAddedDate |
按曲目添加日期排序曲目表(如果有) | s D |
SortTrackByDuration |
按曲目时长排序曲目表(如果有) | s d |
ReverseOrder |
反转曲目表(如果有)的顺序 | s r |
MovePlaylistItemUp |
将播放列表项目向上移动一个位置 | C-k |
MovePlaylistItemDown |
将播放列表项目向下移动一个位置 | C-j |
CreatePlaylist |
创建一个新的播放列表 | N |
要添加新快捷键或修改默认快捷键,请参阅配置文档中的键映射部分。
动作
有一个一般动作列表可用;然而,并非所有Spotify项目(曲目、专辑、艺术家或播放列表)都实现了每个动作。要获取项目上的可用动作列表,请调用ShowActionsOnCurrentTrack
命令或ShowActionsOnSelectedItem
命令,然后按回车(默认绑定到ChooseSelected
命令)以启动选定的动作。一些动作可能不会出现在弹出窗口中,但可以绑定到快捷键。
可用动作列表
GoToArtist
GoToAlbum
GoToRadio
AddToLibrary
AddToPlaylist
AddToQueue
AddToLiked
DeleteFromLiked
DeleteFromLibrary
DeleteFromPlaylist
ShowActionsOnAlbum
ShowActionsOnArtist
ToggleLiked
CopyLink
Follow
Unfollow
这些动作也可以绑定到快捷键。要添加新快捷键,请参阅配置文档中的动作部分。
搜索页面
首次进入搜索页面时,应用程序将焦点放在搜索输入上。用户可以输入文本,使用退格
删除一个字符,或使用回车
搜索文本。
要使焦点从搜索输入移动到其他窗口,例如曲目结果、专辑结果等,请使用FocusNextWindow
或FocusPreviousWindow
。
配置
默认情况下,spotify_player
将在 $HOME/.config/spotify-player
中查找应用程序的配置文件。这可以通过指定 -c <FOLDER_PATH>
或 --config-folder <FOLDER_PATH>
选项来更改。
如果找不到应用程序配置文件,将使用默认值创建一个。
有关配置选项的更多详细信息,请参阅配置文档。
缓存
默认情况下,spotify_player
将在 $HOME/.cache/spotify-player
中查找应用程序的缓存文件,包括日志文件、Spotify 的授权凭据、音频缓存文件等。这可以通过指定 -C <FOLDER_PATH>
或 --cache-folder <FOLDER_PATH>
选项来更改。
日志
应用程序将日志存储在 $APP_CACHE_FOLDER/spotify-player-*.log
文件中。对于调试或提交问题,用户还可以参考 $APP_CACHE_FOLDER/spotify-player-*.backtrace
中的回溯文件,该文件包含应用程序的回溯,以处理崩溃或意外错误。
spotify_player
使用 RUST_LOG
环境变量来定义应用程序的 日志级别。默认情况下,RUST_LOG
是 spotify_player=INFO
,它只显示应用程序的日志。
致谢
spotify_player
使用 Rust 编写,并建立在如 tui-rs、rspotify、librespot 以及许多其他库之上。它深受 spotify-tui 和 ncspot 的启发。
lib.rs
:
lyric_finder
此包提供了一个 Client
结构体,用于检索歌曲的歌词。
它利用 Genius 网站及其 API 来获取歌词数据。
示例
#
let client = lyric_finder::Client::new();
let result = client.get_lyric("shape of you").await?;
match result {
lyric_finder::LyricResult::Some {
track,
artists,
lyric,
} => {
println!("{} by {}'s lyric:\n{}", track, artists, lyric);
}
lyric_finder::LyricResult::None => {
println!("lyric not found!");
}
}
依赖关系
~5–16MB
~241K SLoC