本文也发在了我的新个人博客上了,可以点击下面的链接获取更好的阅读体验:
60行Shell代码实现在命令行中优雅地听歌
0. 起因
起因就是对探索新歌失去了兴趣,并且觉得各种音乐播放软件都不怎么好用,而且懒癌发作,觉得写代码的时候想要换歌还要切换到音乐播放器再切回来实在太烦了。于是我把自己喜欢听的歌都下载下来了,放到一个文件夹里,准备用终端播放。整个过程非常简单,我所需要的只是一个想法和几行代码,迭代几次就搞定了。
1. 几次迭代
查了一下网上所谓的终端音乐播放器,似乎都不怎么样,有些还写了巨丑无比的UI,在命令行里画UI是个需要taste的事,画不好就会很丑,显然我不需要这些东西。找着找着,发现macOS上本来就有个命令行播放器,叫afplay,用法也很简单afplay后面加文件名就OK了,我想了想就用它了吧。
一开始想要的功能很简单,我需要方便地随机播放文件夹下的所有歌曲。我想了想,在.zshrc
里写下了如下代码:
BYel='\e[0;33m'; function m() { m_path=~/Music/ song_num="$(ls $m_path | wc -l)" # Total number of songs timestamp=$(date +%s) # Timestamp as millsecond, e.g. 1523305473 song_index=$(($timestamp%$song_num+1)) # Generate a random song index song="$(ls $m_path | sed -n "$song_index"p)" # Get the name of the certain song echo -e "${BYel}$song" afplay "$m_path$song" # Play it! }
这样的话