· ツール

WezTermの中で音楽を聴きたくて、丸一日カスタマイズしていた

WezTermの中で、リトグリを聴きながら作業したい。
できればアルバムアートがかっこよく表示されて、音の波形も見えて、ターミナルなのに音楽プレイヤーっぽい画面になっていたら最高。

そう思って丸一日カスタマイズに費やしました。
結論から言うと、カバーアートは諦めることになったんですが、それでもいい感じの環境にはなりました。

r/unixpornで見た景色

きっかけはr/unixporn。

GlazeWMの記事でも触れたRicing文化のサブレディットなんですが、ここに投稿されているスクリーンショットには、ターミナルの中で音楽を再生している人がたくさんいます。
アルバムアートが表示されて、曲名やアーティスト名が並んで、下には音の波形がリアルタイムで動いている。

それがすごくかっこよくて、「これをWezTermでやりたい」と思いました。

WezTermはもともとMacで使っていたターミナルエミュレータで、Windowsでもそのまま使い続けています。
設定をLuaで書けるのが気に入っていて、newsboatの記事で書いたWSL2との接続もWezTerm経由です。

ターミナルで動く音楽プレイヤー

r/unixpornでよく見かけるターミナル音楽プレイヤーを調べてみると、MPDというバックグラウンドで動く音楽再生サーバーと、ncmpcppというターミナル上の操作画面を組み合わせて使うのが主流でした。

foobar2000の記事で書いたように、僕はローカルの音楽ファイルをfoobar2000で聴いています。
foobar2000はGUIのプレイヤーで、UIのカスタマイズが楽しいのは変わらないんですが、WezTermの中で完結する環境も作ってみたかった。
ターミナルの中で動くからこそ、タイリングWMやターミナル分割と相性がいいんですよね。

カバーアートとの6時間

ターミナル音楽プレイヤーにはいくつか種類があるんですが、最初に選んだのはrmpcというアプリでした。
ncmpcppにはないカバーアート表示ができるのが決め手で、リトグリのアルバムアートをターミナルにかっこよく表示したかった。

ところが、WezTerm + WSL2の組み合わせでは、カバーアートがどうしても表示できない。
WindowsのターミナルからWSL2に画像のサイズ情報がうまく伝わらない制約があって、画像を描画する手がかりがない状態でした。

ここから6時間の格闘が始まりました。

画像の表示方式を片っ端から試しました。
WezTermのベータ版も試したし、Windows Terminalなど別のターミナルでも検証しました。
全部ダメ。

唯一動いたのが、WSL2のGUIアプリとして別ウィンドウで起動する方法。
ただ、そのウィンドウのリサイズや移動がまともに効かないし、WezTermと別ウィンドウになるのも統一感がない。
実用にはほど遠かったです。

途中で、別のルートでサイズ情報を取得できることを見つけて、その情報をアプリに渡す仕組みを自作するところまでやりました。
サイズ情報自体は正しく渡せるようになったんですが、rmpc側の画像表示がどの方式でも崩れてしまう。

最終的に、ncmpcppに戻しました。
カバーアートは諦めるけど、WezTermの中で安定して動く方が実用的だという判断です。

仕組みを自作してまで粘ったのに動かなかったのは正直悔しかったです。
でも6時間やったからこそ「これは今の環境では無理だ」と納得できた気がします。

WezTermのレイアウトを考える

ncmpcppに落ち着いたところで、WezTermのタブ構成を考えました。

r/unixpornのスクリーンショットを参考にしたんですが、あちらは「見せる用」のレイアウトが大半です。
実際に毎日使う環境となると、もっとシンプルな構成が基本みたい。

僕の場合はウルトラワイドモニターなので、横幅に余裕があります。
そこで、使い方に合わせてタブを3つに分けました。

  • Tab1: 作業用 + ncmpcpp + cava(常時使うもの)
  • Tab2: newsboat + yazi(集中して使うもの)
  • Tab3: 一時作業用

ncmpcppの下にcavaというオーディオビジュアライザーを配置しています。
再生中の音をリアルタイムで波形表示してくれるアプリで、ncmpcppとの組み合わせはr/unixpornでよく見る鉄板レイアウト。
これを置くだけでRicing感がぐっと出ます。

カバーアートは諦めたけど、曲情報と波形が並んでいる画面は、十分かっこいい。
リトグリを流しながら作業していると、横で波形がぴょこぴょこ動いていて、それだけでちょっと楽しいです。

Last.fmをブログに載せようとしてやめた話

ターミナルで音楽環境を整えている流れで、もう一つやりたいことがありました。
ブログのサイドバーに、Last.fmの「最近聴いた曲」を表示すること。

Last.fmは最近使い始めた音楽の記録サービスで、foobar2000やMPDと連携して、聴いた曲を自動で記録してくれます。
そのデータを取得して、ブログに「今こんな曲を聴いています」と表示できたら面白いなと。

実際にサイドバーに組み込むところまで作りました。
でも、プライバシー設定を非公開にしているとデータが取得できない仕様だった。

それ以上に気になったのが、「今聴いてる曲」がリアルタイムで公開されると、在宅しているかどうかが推測できてしまうこと。
技術的な制約とは別に、そもそも載せたくないなと思いました。

実装はすべて元に戻しました。

「何を公開するか」は技術的にできるかどうかとは別の話でした。
共有したい気持ちと、知られたくない気持ちの間で、自分なりの線引きをした感じです。

foobar2000とncmpcpp、両方使っている

今はfoobar2000もncmpcppも両方使っています。
使い分けはまだ固まっていなくて、その日の気分で切り替えている状態。

foobar2000はGUIで操作できる安心感があるし、UIカスタマイズの楽しさは相変わらずある。
ncmpcppはWezTermの中で完結するのが心地よくて、作業中にシームレスに音楽を操作できる。

どちらかに統一する必要はないかなと思っています。
同じ音楽ファイルを両方から参照しているので、ライブラリは共通。
気分で使い分けられるのがちょうどいい。

自分の環境を作るのが好きなだけ

振り返ると、丸一日かけてやったのは「ターミナルで音楽を聴く環境を作る」ことでした。
カバーアート表示に6時間粘って結局諦めたり、ブログに載せようとした機能を自分でボツにしたり、遠回りばかりだった気もします。

でも、こういう時間が好きなんだと思います。

GlazeWMの記事でも書きましたが、僕は「自分だけの環境を作る」という行為が好きみたいです。
foobar2000のUIをいじっていた学生時代から、やっていることの本質は変わっていない。
場所がGUIからターミナルに移っただけ。

今はWezTermの中にncmpcpp、cava、newsboat、yaziが並んでいて、ターミナルなのに自分の部屋みたいな感じがしています。
リトグリのカバーアートは表示できなかったけど、曲名がスクロールして、波形が動いている画面を眺めているだけで、けっこう満足しています。

「ツール」の他の記事

「ツール」の記事をすべて見る →

この記事を書いた人

coppi

coppi

日々の暮らしで見つけた好きなものや感じたことを書いています。

プロフィールを見る →

よかったらRSSで読んでもらえると 嬉しいです。

RSSで購読する