Featured image of post Spotify Tui

Spotify Tui

对于使用Spotify作为主力音乐流媒体的人来说,Spotify官方的桌面app体验并不是很好,无法看歌词,而且UI水平对于我个人审美来说感觉并不是很好看。

spotify_desktop


Spotify 第三方客户端

Spotify webUI

这时候就要选择第三方的Spotify客户端了,或者也可以使用Spotify的webUI然后使用美化插件,我webUI使用的Arc浏览器搭配上Gallery美化,其实最后的效果还可以,而且很轻量化,除了没法看歌词都很完美。

spotify_web

Spotify TUI

但是webUI到底还是官方的UI而且没法看歌词,而且作为重度终端使用者,还是希望在终端上使用Spotify。我选择使用的是spotify_player一个用rust开发的开源的Spotify TUI,使用vim的键位并且在iTerm2中可以显示专辑封面,同时也可以在配置文件~/.config/spotify-player/app.toml中进行自定义。

spotify_tui_playback

Spotify Lyrics

接下来要解决官方客户端无法看歌词的问题,我们可以使用sptlrx这个开源的终端歌词同步软件,搭配spotify_player使用可以看当前歌曲的歌词。

sptlrx

Custom Your TUI

这样我们就实现了在终端上使用Spotify并且显示滚动歌词,同时搭配cava(一个Audio Visualizer,依赖backgroud Music实现),最后使用tty-clock为整个布局点缀一下,就可以实现封面的效果了。

Spotify

Optimization

虽然这样布局很不错,但是每次都要手动分屏很麻烦,能不能实现在终端敲一个命令自动分屏布局并且每个pane自动执行对应的命令呢,当然是可以的啦。

我一开始选择使用tmuxtmuxp这样就可以用yml配置文件写好tmux session布局并且在对应的pane执行不同的命令,但是研究了一下tmuxp发现好像无法实现封面那样的复杂布局,只有几个预设的布局,而且tmux无法显示超过1M大小的图片所以spotify_player无法显示图片。

所以最后另辟蹊径,使用AppleScript直接对iTerm2进行布局。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
tell application "iTerm"
	tell current window
		tell current session of current tab
			split vertically with default profile
			split vertically with default profile
		end tell
		tell third session of current tab
			split horizontally with default profile
		end tell
		tell first session of current tab
			write text "spotify_player"
		end tell
		tell second session of current tab
			write text "sptlrx"
		end tell
		tell third session of current tab
			write text "tty-clock -c -s"
		end tell
		tell fourth session of current tab
			write text "cava"
		end tell
	end tell
end tell

这样将AppleScript保存为scpt文件,只需要在终端中用osascript scpt文件路径执行AppleScript脚本就可以实现一键布局啦。如果嫌每次输osascript命令很麻烦,在~/.zshrc中用alias映射一下命令或者写个shell脚本添加到环境变量就可以啦。

这就是最后的效果啦。


  • 如果要使用本教程需要会一点Unix-like系统的操作,最基础的ls cd这些需要会使用,如果是Mac则要安装Homebrew作为包管理器,方便管理和安装。
  • 如果要使用spotify_player需要一个Spotify的会员账号,并且去dev spotify申请一个client id
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy