https://moc.daper.net/
MOC はCUI の音楽プレイヤーです。

MOC の設定ファイル(~/.moc/config)にはID3v1TagsEncoding, UseRCC, EnforceTagsEncoding等のID3 タグの文字エンコーディング指定用の設定項目がありますが、ストリーミングの曲名の文字エンコーディングについては無効なようで、文字化けしてしまうようです。そのため、暫定パッチを作成しました。

MOC の簡単な使い方は以下。
http://ktkr3d.github.io/2012/05/31/moc-music-on-console/

パッチ作成の経緯

https://moc.daper.net/node/682
過去に別の方が汎用パッチを作成されていたようなのですが、パッチファイルが見つからなかったのでSJIS 専用の修正をしました。

コードの修正

  • ソースを取得します。以下が選択肢と思います。
  • io.c が修正対象です。
  • vscode でコード修正して、ステージ、コミットします。

パッチの作成

  • 今回はgitg でパッチファイルを生成しました。

作成したパッチ

0001-convert-tag-encoding-sjis-to-utf8.patch
diff --git a/io.c b/io.c
index c9762e6..8c17264 100644
--- a/io.c
+++ b/io.c
@@ -44,6 +44,10 @@
# include "io_curl.h"
#endif

+#if 1
+#include "utf8.h"
+#endif
+
#ifdef HAVE_CURL
# define CURL_ONLY
#else
@@ -836,7 +840,12 @@ void io_set_metadata_title (struct io_stream *s, const char *title)
LOCK (s->metadata.mtx);
if (s->metadata.title)
free (s->metadata.title);
+#if 1
+ iconv_t cd_sjis_to_utf8 = iconv_open ("utf8", "sjis");
+ s->metadata.title = iconv_str (cd_sjis_to_utf8, title);
+#else
s->metadata.title = xstrdup (title);
+#endif
UNLOCK (s->metadata.mtx);
}

--

前提環境設定、ビルド、インストール

完全なタイトルの確認

MOC ではタイトルの表示が途中で切り詰められます。完全なタイトルを取得するには、以下で、

$ watch -n 5 "mocp -Q %title"