🎵

Subsonic APIサーバ(Navidrome)のススメ

2023/12/14に公開

この記事について

初めましての人もそうでない方もこんにちは。
みすてむずの幽霊部員、サンドリヨン鈴木(@alice37th@misskey.systems)です。

さて、不幸にもこの記事を開いてしまった皆さん、音楽は好きですか?

私はほどほどでございます。

この記事は、サブスクもいいけど手元に音楽メディア資産があるならそれを活かして、ネットワーク越しでも自身のライブラリを楽しめる環境を作ってみよう、という記事です。
Zennでは初記事になりますが、エンジニア要素は申し訳程度です。

鈴木 is 誰

あまり頻繁に顔出しているわけではなく書く機会もそれほどなくて謎のおじさんと化しているので、簡単な経歴なんかを書いておきます。忙しい方は読み飛ばして頂いて構いません。

  • 肩書はフロントエンジニア
    • 初期投資のかからないモノ作りという消極的な理由でWeb制作を独学で始める
    • エンジニア歴13年くらい
      • フロントといいつつ今はデザインは全く触っていません
      • 普段はJS/TSやPHPを書いたり、API生やしたりシェルスクリプトを弄ったりしてます
        • Vue2、Nuxt2の頃までは割とやれてた気がしますが、Vue3からはちょっと疎遠
      • 動きのある表側をやっているより裏側やフロントエンド環境構築をしてたりするほうが好きです
  • みすてむずは技術の知見を広げるために参加
過去の話や業務以外など(蛇足なので暇で死にそうな人用です)

経歴

  • 元々はゲーム業界出身
    • 新卒で入社
    • PS3/XBOX360/PSPで商業タイトルを2作品ほど担当
      • スクリプト(一部)、UIデザイン、ロゴデザイン、劇伴制作、Webを担当
    • PC向けR18タイトル(小規模)を担当
      • 所謂ロープライスや企業同人ってやつです
      • ディレクション・進行管理、スクリプト、UIデザイン、劇伴制作、Webを担当
      • 要は企画と絵とテキストと声優以外全部
      • ストレスで一度倒れる程度には辛かった
    • 退職を申し出てから1年引き伸ばされた後にゲーム業界からは離脱
  • 以降はずっとWeb制作関連の会社に勤務
    • 2社目:フルリモート
      • 1社目で関わりのあった方が独立した先に声がけ頂いて入社
      • エンジニア3人全員が超人しかいなかったのでとても勉強になった
      • 取引先の性質上、超短納期・ほぼ24時間業務が発生する可能性があったのが体力的にきつかった
      • 色々あって業務縮小することになり、コードを書く機会が減りそうということで離脱
    • 3社目:フル勤務
      • 前職のせいで自分以外のエンジニアは超人という認識で転職したら肩透かしを食らった
      • 技術力のある人から辞めていくような職場だった
      • 上司が炎上芸人で、いくらアラートあげても燃えてからじゃないと動かないタイプだったので精神的にきつかった
      • 元々骨を埋める先を探すまでの繋ぎというつもりだったので、同僚が独立した際に離脱
    • 4社目:現職・半リモート
      • 3社目の同僚が立ち上げた会社に誘われて転籍

音楽との関わり

  • 幼少期〜小学校はピアノ(ヤマハのジュニア専門コース在籍)
  • 中高では吹奏楽部(フルート)、趣味レベルでバンドでドラムなど
    • 吹奏楽部時代に突如電子音楽に目覚め、先輩をキレさせる
    • 3年時に方向性の違い(演奏技術の向上よりコンクール入賞を主軸とするスタンスに相容れなかった)で退部
    • 以降は演奏からは離れ、作曲に傾倒
  • フリーゲーム制作サークル(解散済み)のBGM担当
    • 確か2003年くらい結成。
    • YAMAHAのQY70[1]とかいう32000音しか扱えないハードに無茶振りをさせる
    • 8タイトルくらいに参画
      • 世に出たのは4作品くらい?
  • 友人と2人で立ち上げたユニットで同人活動
    • この頃から完全DTMに移行、Ableton Live信者になる
    • なんやかんやで確か10作リリース
      • ハードコアやEDMが流行る中、逆行するかのように低速4つ打ちとかばかり作っていたため、一部の奇特な方以外には全くウケなかった
      • 何故かロシアの人からやたら応援メールがきた
    • 調子に乗って別サークルを立ち上げ東方アレンジにも参戦
      • 捻くれたアレンジのノンボーカル作品をリリースしたところ、オリジナルより売れてしまった(当社比)ため悔しくて3作で活動停止
    • 年数回、DJイベントに出演
      • 練りに練ったセットリストよりも他メンバーの爆音プリキュアメドレーのほうが盛り上がっていたので敗北感を味わう
      • 10回目開催後、主催がオーガナイザー引退のためDJ活動停止
    • ある程度やりたかったことをやれたのとお互いライフステージが変わったのを機に事実上活動停止

このアドカレ記事の発端にもなったみすてむずこと、「みすてむず いず みすきーしすてむず」はこちら。
https://misskey.systems/

IT関係の職業に従事している・または目指している方のためのmisskeyサーバです。ITサーバらしく、極稀にITの話題で盛り上がっておりますので、興味があるようでしたら是非。

メディアサーバ構築に至るまでの経緯

お忙しい方はここもスキップしてこちらへ。

略歴まで見ていただいた奇特な方にはおわかりかもしれませんが、大分音楽に依存した半生になります。特に作曲を始めてからは引き出しの量を増やすべくとにかく音楽を聞きまくっていてインプットするのが習慣化していたこともあり、社会人になってからもプライベート・リモート勤務中や通勤中はもちろん、現職はオフィスでも音楽OK[2]なので、音楽に触れない日はほぼ皆無といった状態です。

インプットの量を増やすということは、必然的に音楽にアクセス出来る環境が身近である必要があります。現在はスマホ1台あれば何とでもなるのですが、過去には出先で音楽を聞く環境を用意するのが比較的面倒だった時代もありました。カセットテープから始まりCD、MDと媒体を変え続けたのち、iPodを始めとするDAPの登場までは音楽を持ち運べるようになるまでに一手間も二手間もかかったものです。


こんなのを持ち歩いていた時代もありました(Wikipedia[3]より)

スマホが普及してからはスマホへ同期すれば良いだけになったのでかなり手間は軽減されてきたものの、常に容量制限との戦いでもありました。デバイスが多機能になった分本体の自由になるストレージ容量も減ったため、持ち歩ける音楽の量は逆に減り出先で「今あれが聞きたいけど入ってない」という場面が増え、頭を悩ませることになります。

Google Play Music

そんな折、Googleが「Google Play Music」というサービスを始めました。


何故か残っていたスクショ。今見ても全然イケるUIでした。

所謂音楽ロッカーサービスというもので、手持ちの音源をGoogleのサーバにアップロードしてストリーミング再生出来る、というものです。これにより通信量と引き換えに端末のストレージ圧迫という悩みからは解放されることとなり、数千曲のライブラリをネットワークさえあれば常に利用可能な環境に置くことが出来るようになります。他にも類似サービスはあったかもしれませんが、当時からAndroidユーザだったということもあり自分には非常にマッチしていて重用していました。動作も非常に軽快でPCブラウザ限定にはなりますがメディアのID3タグ編集機能まで提供されており、現在でも充分通じる機能を有していました。

Androidには一時期プリインストールされている時期もあり、純粋にメディアプレイヤーとしてもそれなりに重要な位置付けにあったのではないかと思います。

が、その日はやってきます。

Youtube Musicへの転換

2020年4月、Googleがいつものサービス断捨離病を発動し、Google Play Musicの終了・Youtube Musicへの移行を発表します。

発表当時は「まぁ名前変わるだけかー」くらいに考えていましたがそんなわけはなく

  • ライブラリのUX低下
    • アルバムリストを一括でなくスクロール時に非同期で一定件数ずつ読み込む方式になったため、ソート末尾あたりにあるアルバムへの到達が困難に
    • ジャンルの廃止
  • 検索結果にライブラリ外のYoutube動画が混在する
    • オフィシャルでない動画も混在してくるようになった
  • ID3タグ編集機能撤廃
  • バックグラウンド再生、オフライン再生がPremium限定
  • アップローダツールの廃止、ブラウザアップロードのみに限定
  • アップロードしたライブラリのダウンロード機能廃止

という中々ロックな仕様変更がされます。


ここから下にスクロールすると続きのアルバムリストのレスポンス待ちが発生します…

ローンチ直後だしなと思って最初のうちは我慢して使っていましたが、その後も改善される気配もないのでGoogle的には恐らく役目は終えたと判断されているんだろうなと思い、使うのを辞めてしまいました。

サブスクリプションサービスの難点

今日ではSpotifyやApple Musicなどのサブスクリプションサービスが充実してきています。正直なところ、音楽を聞くだけであればこれで大体事足ります。普段聞かなかったアーティストへのリーチがしやすくなりましたしURLを共有するだけでオフィシャルな音源にアクセス出来るというのは合法的な布教活動が容易になったため良い時代になったなと思う反面、サブスクリプションサービスも残念ながら幾つか難点があります。

ない音源はない

そもそも聞きたい曲が配信されていなければ始まりません。こればっかりはアーティストの意向もあるのでどうしようもありません。権利問題などで配信したくとも出来ない、というケースもあろうかと思います。


何故かSpotifyにこれだけ配信されていないBT先生によるエレクトロニカの名盤、This Binary Universe。当時DivX Stage6とのタイアップで話題になった映像作品のDVDも付属。

そんな中でもサブスクに特に厳しいジャンルとしては:

  • アルバムには収録されなかった過去のシングルのカップリング曲
  • 隠しトラック、ボーナストラック
  • レーベル・レコード会社が消滅、または解散・活動が途絶えているアーティスト[4]
  • 流通経路が特殊なアーティスト[5]
  • ゲーム音楽
  • アニメソング、声優
  • インディーズ・同人・自主制作音源

あたりが依然辛い状況ではないかと思います。この傾向は古い楽曲ほど顕著であると感じており、ダウンロード販売やCDのみが入手経路となるケースも珍しくありませんし、配信がされているアーティストでも最近の曲だけ、というのも珍しくありません。海外はまだこのあたり多少の積極性があるように感じますが、国内の音源は少なくとも私の守備範囲内ではまだまだ渋い、というイメージがかなり強いです。

中でも00年代の初頭頃はアマチュア作曲家が個人サイトやmuzie[6]といった音楽配信サービスで楽曲を配布していたインターネット音楽の時代があり、その頃の音源は今となっては失われた遺産となりつつあります。まれにニコニコやYoutubeなどで動画として残っているケースもありますが、正規の手段では入手手段が消失しているものも多数あり、すでに活動を停止されているアーティストも少なくありません。これらの音源は、今手元にあるものだけが頼りといった状態です。


(記憶が正しければ)REASON使いとして名を馳せたNarimi氏の楽曲も、今では聞くのが難しくなってしまいました

配信の永続性が担保されない

サブスクリプションサービス自体が停止した場合はもちろんですが、それより身近な事象としては既に配信されている音源でもある日突然配信停止となる可能性は考えて置く必要があります。その要因は事件だったり契約だったりと様々ですが、事例としては電気グルーヴ(後に復活しましたが)や安室奈美恵[7]の音源配信停止は記憶に新しいかと思います。


諸般の事情で消えそうで消えないAmetsub。
和製エレクトロニカの新星として期待されていたのに…。

電子書籍もそうですが、所有権でなく視聴権利を与えられているだけという性質上、致し方ない問題ではあります。

サービスによって配信内容が異なる

サブスクリプションサービスによって配信されている音源に差があるというのも個人的には結構ストレスで、聴きたい曲によって使うサービスを変えるというのは極力避けたいという思いもあります。 たまに聞きたいアーティストが特定のサービスでのみ配信されていて、それらが積み重なってくるとその分サブスクリプション費用も嵩み、聞けるうちの大半は重複しているのにそれぞれに課金している状況と言うのは些か納得感に欠けるものがあります。(かといって専用ストリーミングサービスを自前で持っている[8]のを歓迎するかと言われるとそれはそれで難しい話ではあるのですが…)

またアクセスする国によって配信内容が異なる、所謂おま国といったケースも存在します。物としてはある状態なだけに、がっかり感もひとしおです。


作品の登録自体はあるBladeのサウンドトラックも国内からはこれ。
本盤には古参DDRerには「ビジステップ」「マイケッシャ」でお馴染みのStrictly Businessが収録。

音質問題

サービスの性質上、大量にユーザを抱えた状態でハイレゾはおろか320kbpsなどで配信していてはトラフィックがマッハですので、どこもそれなりな音質に押さえてきていると思います。
私は割と耳がぽんこつな上に、出先+無線イヤホンな環境で聞く際に過度に音質を気にしても…という思いもあるのでこの問題の優先度は個人的にはそこまで高くはないのですが、マイ電柱を持っているような人によっては音質が最重要ポイント、となることもあるでしょう。

readonlyである

これに関しては完全に私の我儘なので大多数の人はこんなことを気にしないとは思うのですが、個人的に気に入らない点としてはタグ情報の編集が許容されない点があります。一例を挙げると、(ゲーム音楽くらいかとは思いますが)アーティストがコンポーザ名でなくユニット名やサウンドチーム名義で一括クレジットされていることがあります。色々な事情[9]があってこのような表記になっているのだとは思いますが、個々の楽曲にはそれぞれ作曲者がいて私は出来る限りそれを尊重したいタイプなので、見た目上だけでも表示の編集が出来ない、というのは少し気になるポイントです。


モヤモヤする例。ちなみにストIII3rdの楽曲はチームといいつつ奥河英樹氏一人の作品。


バンナムもこれ。この曲はRESONATE1794やリッジレーサーシリーズでもお馴染み高橋コウタ氏の作品。

ここまでのまとめ

というわけで、ざっくりまとめると:

  • Google Play Musicに依存した生活をしていたが、Youtube Musicへの移行は難しいと判断
  • サブスクそのものは非常に素晴らしいサービスではあるが、それのみでは個人的な要件を満たせない
  • 外出中に突如「あれが聞きたくなっちゃった」がない状態にしたい

が課題となります。なんかいっぱい書いた気がしますが3行で終わってしまいました。

と、とにかく理想はGoogle Play Musicの代替が出来る環境が手に入ることなので、クローンプロジェクトのようなものを探して自分でメディアサーバを建ててみよう、と考えました。

本題:サーバとクライアント

まずは、メディアサーバって言ってるけどそれが何なのかというのと、実際に利用するサーバの考察についてです。

Subsonic API

今回紹介するものは、Subsonicというプロジェクトが根幹となっています。

http://www.subsonic.org/pages/api.jsp

Subsonicはメディアストリーミングとライブラリ管理を主眼として設計・開発されたサーバです。サーバからクライアントに対して、メディア再生に関する様々なAPIを提供します。大まかにはストリーミングやライブラリ、メタ情報(ID3タグ)の他、歌詞管理・ユーザ管理・プレイリスト管理機能などを備えており、現在も互換のサーバやクライアントが複数存続しています。
Subsonicそのもの自体は開発がクローズドに移行してしまっているのですが、APIについてはforkされたLibreSonicを経て、AirSonicやOpenSubsonicといった後継が登場しています。

Subsonic APIは大本の開発が途絶えたといっても既に基本的な機能は概ね完成されていて、派生APIも大半が後方互換性を有しているように個人利用の範疇ではそれ程支障が出ていないというのが実情のようで、拡張がなされていても「Subsonic API互換」という呼ばれ方をしているケースが大半です。提供されているのがSubsonic API互換であれば、クライアントは組み合わせは自由というのも柔軟性に富んでいます。

表題に掲げている割にこれ以上知識を持ち合わせていないのでもう書けることがないのですが、今回は直接これらを触ることはありませんので一旦概要としてはここまでとして、この技術を用いたサーバを建てるフェーズへ進みます。

サーバ選定

世界には有志で開発がされているSubsonicAPI互換サーバが複数存在しており、それぞれニーズに合わせた独自の進化を遂げています。今回はGoogle Play Musicの代替という目的のもと、サーバの選定をします。簡単に検索してみたところ、次に紹介するようなサーバが開発されていることがわかります。

JellyFin

https://jellyfin.org/


JellyFinのデモUI

  • Github Star: 26.2k
  • 複数ライブラリを同時に管理出来る
  • 動画なども管理可能

https://www.navidrome.org/


NavidromeのデモUI

  • Github Star: 8.1k
  • 音楽特化

Funkwhale

https://www.funkwhale.audio/


Funkwhaleの公開サーバUI

  • Gitlabホスティング
  • ActivityPubを喋る
    • GooglePlayMusic代替というよりはSoundCloud代替に近く、複数人でそれぞれの自前の音源をシェアし合うといった思想みたい

Ampache

https://ampache.org/


AmpacheのデモUI

  • Github Star: 3.3k
  • 動画なども管理可能

検討

いずれも内包されているWebクライアントのデモが公開されています。そちらを見たところAmpacheのUIが好みからは外れていたのと、Funkwhaleは私が求めているものからは少し外れていたので候補からは除外し、JellyFinとNavidromeに絞って検討を進めました。

比較表
項目 JellyFin Navidrome 備考
ライブラリ 用途・ファイルタイプごとに作成。ライブラリを跨いだ検索は出来ない。 単一ライブラリにて管理。 音楽のライブラリ1つだけで運用すれば実質同等
ID3タグエディタ あり
MusicBrainz準拠、強力だが誤操作すると死ぬ
なし
Webプレイヤー所感 クリッカブルな箇所が分かりづらく直感的ではない印象 良好だがページャ無効化が出来ない 後述しますがSubsonicAPI互換クライアントを使うのであればあまり関係ない
アーティスト検索 あり あり
アルバム検索 あり あり
楽曲検索 あり あり
ジャンル検索 あり なし[10]
再生回数計測 なし? あり
インスタントミックス あり なし[10:1] 特定のアルバムや楽曲から、ランダムに再生を開始する機能。Spotifyなどにも実装されている
スマートプレイリスト なし あり[11] 特定の条件に基づいた楽曲を収集してプレイリストの中身を生成出来る(2000年代の楽曲、といった形)
評価制度 お気に入りのみ お気に入り/5-Star
歌詞表示対応 なし あり[12] SubsonicAPIは同期歌詞には対応していないため非同期表示のみ
管理画面 提供あり
ユーザごとの操作状況や、再生・停止指示などが実行可能
なし
ユーザの追加は管理者権限でログインするとユーザパネルが使用可能
DLNA対応 あり なし
LDAP対応 プラグインにて対応 なし
ライブラリのスキャン あまり早くない?進捗率が%表示なのは親切 高速
進捗状況がスキャン済みアルバム数だけなので全体像は把握し辛い
(体感)
ライブラリ変更検知 あり あり ライブラリ内のファイル増減・タグ編集などを検出した場合に自動反映される
拡張 公式・サードパーティ製プラグインの提供あり[13] なし
last.fm プラグインにて対応 あり
Androidクライアント あり なし[10:2]
iOSクライアント あり なし[10:3]
PWA あり あり

機能面を見るとJellyFinの方が多機能ではありましたが、動画のライブラリは必要なく音楽メディアのみを取り扱いたい点、UIが直感的に扱えるかどうかという点、扱いもシンプルそうなNavidromeの採用を決めました。

公式にはRaspberry Pi ZEROでも動作するほど動作が軽快との記載があります。動作に必要なのはffmpegのみです。 Ubuntuへの導入方法は公式にも記載があり、手順通り導入を行いサービスとして登録するだけですので、この記事では簡単にだけ紹介します。この辺りまで読み進めていただいている方であれば余ってたり生えてきたラズパイやミニPCがあると思いますので、そちらを利用されるのが良いかと思います。ちょっとどんなものか見てみたい、というのであればDockerイメージも用意されているのでそちらを利用されると良いでしょう。

折しもみすてむずに参加した頃にMacbook Airを簡易サーバ代わりにするなという助言を頂いていたこともあって、勉強がてらミニPCを購入してUbuntu Serverを建てていたので、私はそちらへ建て直すことにしました。

https://misskey.systems/notes/9islor6xqj
セールで12000円くらいだったGMKtec NucBox3。勿論N100とかではありませんが、初心者のおもちゃとしては充分でしょう

ffmpegの導入

もう入れている方はスキップして頂いて大丈夫です。

sudo apt update
sudo apt upgrade
sudo apt install vim ffmpeg

ディレクトリの用意

<user><group>は自身の環境に合わせて読み替えて下さい。専用のユーザを作成するでもいいかもしれません。

sudo install -d -o <user> -g <group> /opt/navidrome
sudo install -d -o <user> -g <group> /var/lib/navidrome

ファイルの取得と展開

これを書いている2023/11/17時点ではv0.50.0がリリースされていました。リリースページから最新版と自身の環境のアーキテクチャに合わせたものを取得してください。取得したら先程作成したディレクトリに展開して、所有者を更新しておきます。

wget https://github.com/navidrome/navidrome/releases/download/v0.XX.X/navidrome_0.XX.X_linux_amd64.tar.gz -O Navidrome.tar.gz
sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
sudo chown -R <user>:<group> /opt/navidrome

コンフィグファイルの作成

コンフィグファイルの配置はサンプルでは下記になりますが、特にどこでも構いません。

touch /var/lib/navidrome/navidrome.toml

コンフィグ出来る項目等については後ほど別途補足を設けていますが、最低限メディアを格納しているディレクトリへのパスを記述したMusicFolderの定義があれば機能します。

navidrome.toml
MusicFolder = '/mnt/music'

Systemdユニットファイルの作成

touch /etc/systemd/system/navidrome.service

<user><group>がServiceの項にありますので、環境に合わせて書き換えます。コンフィグファイルの配置がマニュアルと異なる場合も同様に書き換えておきます。他にも弄ったほうがいいのかもしれませんが、これに関してはあまり理解出来ていないのでそのまま使用しています。

navidrome.service
[Unit]
Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome

[Install]
WantedBy=multi-user.target

[Service]
User=<user>
Group=<group>
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome

# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes

# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full

# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true

# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"

サービスの実行

設定が出来たら、とりあえず動かしてみます。

sudo systemctl daemon-reload
sudo systemctl start navidrome.service

active表記になっていればOKです。

ステータス
sudo systemctl status navidrome.service
● navidrome.service - Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
     Loaded: loaded (/etc/systemd/system/navidrome.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-11-17 23:12:25 JST; 10min ago
   Main PID: 1197989 (navidrome)
      Tasks: 36 (limit: 9198)
     Memory: 869.9M
        CPU: 6min 1.264s
     CGroup: /system.slice/navidrome.service
             └─1197989 /opt/navidrome/navidrome --configfile /var/lib/navidrome/navidrome.toml

サービスの自動起動有効化

サーバ再起動時に起動するようにしておきます。

sudo systemctl enable navidrome.service

一応、ちゃんと出来たかも確認しておきます。

sudo systemctl is-enabled navidrome.service
enabled

enabledが返ってくればOKです。

FW

デフォルトではポート4533が使用されるので、開けておきます。

sudo ufw allow 4533
sudo ufw reload
sudo ufw status
To                         Action      From
--                         ------      ----
...
4533/tcp                   ALLOW       Anywhere
...

動作確認

ブラウザでサーバのプライベートIP:4533にアクセスすれば初期ユーザ登録画面が出ます。


初回は管理者アカウントを作る画面になります

Navidromeの管理者ユーザは特権があまり多くなく、ライブラリの手動再スキャン(簡易・フル)とユーザ管理、トランスコーダの編集のみです。ライブラリは自動スキャンが走っているので、メディアファイルを追加した際も少し待てば自動で反映出来るので、あまり手動スキャンを行う機会は多くありません。私は何となく管理者ユーザのままで利用するのは気が引けたので、普段遣い用として一般ユーザも作っておきました。

ユーザの作成が出来たらスマホからもLAN経由でアクセス出来るか、この時点で一度確認しておきましょう。
無事アクセス出来たら、今度は宅外からもアクセス可能かを確認します。ポートフォワーディングについてはルータごとにやり方が異なるでしょうからこの場では割愛します。あまりインフラには明るくないので、本職の方はもっと違う方法でやっているかもしれません。とにもかくにも宅外から自宅のIPへアクセスして、Wifi環境下と同様に閲覧出来ればOKです。

その他

DDNS

自宅の回線は一般向けの戸建て用NURO回線(2G)[14]です。一般用のNURO回線には固定IPの割当サービスがないため、外出時はDDNSで自宅のサーバを叩いています。DDNSサービスは探せばいくらでも見つかると思いますが、うちでは下記を利用しています。

https://ddns.kuku.lu/

SSL対応

手元の環境では何となく格好いいからという理由で申し訳程度にCaddy2でHTTPS環境を作っていたので導入手順については割愛しますが、Navidromeの利用にあたってはリバースプロクシをlocalhost:4533に対して別途設定するだけでHTTPS接続が出来るようになりました。

caddyfile
...
music.***.f5.si {
        reverse_proxy localhost:4533
}
...

NAS上のライブラリを利用する

ライブラリは流石にミニPCのストレージで賄うには無理があるので、外部のストレージをマウントすることになるかと思います。私の場合は自宅のLAN上にいるBuffaloのLinkStation(LS210D0201G)でメディアファイルを管理していたので、そちらをUbuntu上でマウントして読み込んでいます。一応思い出せる限りで自分用のメモとしても手順を残しておきます。

sudo apt install cifs-utils
sudo mkdir /mnt/media
sudo mount -t cifs -o username=hogehoge,password=fugafuga vers=2.0 //192.168.1.222/Media /mnt/media

マウントが問題なく出来ることを確認したら、一旦解除して自動マウント対応をします。

sudo umount /mnt/media

fstabに自動化内容を記述します。

sudo vim /etc/fstab

<user>、<group>はお手元の環境に併せて読み替えてください。

fstab
//192.168.1.222/media /mnt/media cifs username=hogehoge,password=fugafuga,vers=2.0,uid=<user>,gid=<group>,file_mode=0755,dir_mode=0755 0 0

編集後サーバを再起動した際に、自動で指定したドライブがマウントされていればOKです。

これによって、Google Play Music時代にあった「ライブラリの多重管理」という問題も解消されることとなりました。

設定ファイルの配置は公式の手順に沿ったのであれば/var/lib/navidrome/navidrome.tomlに作成したことと思います。設定可能な項目はこちらに一覧があり、外観やコア機能、UIに関する設定が行えます。最低限設定しなければならないのはMusicFolderなので、お急ぎの方はこちらだけ設定してあればどうにでもなります。

それ以外で私が設定しているものに関しては下記に抜粋しましたが、必要がなければデフォルト値のままでも特段問題ありません。後から変更するというのも問題ないので、適時調整をするのが良いかと思います。なお後述するサードパーティ製クライアントを利用する場合、これらの設定を尊重してくれるかどうかはクライアント次第になってしまうので、その点は留意が必要です。

Key Default Value Description
MusicFolder "./music" 任意 必須。ライブラリディレクトリの指定。NASをマウントしてる場合は"/mnt/media/"とか。
Port 4533 任意 使用するポートの指定。
CoverArtPriority "cover.*, folder.*, front.*, embedded, external" "embedded, cover.*, folder.*, front.*, external" 楽曲のアルバムアートを使用する際の優先順位を指定します。古くからライブラリ管理していてディレクトリにfolder.jpgを配置している場合、メディアファイル内に埋め込まれているアルバムアートより優先して使用します。個人的にはfolder.jpgの役目はもう終えたと思っているので、embeddedを優先するようにしています。
RecentlyAddedByModTime false true メディアの追加順序をインポート順(false、デフォルト)か、更新日時順(true)にするかを指定します。好みの問題かと思いますが、ライブラリ構築後にタグ再整理などを頻繁に行い、整理後の結果を最新のアルバムとして扱いたい場合は有効化します。
SubsonicArtistParticipations false true アーティストページに表示するアルバムを、アルバムアーティストが一致する場合のみ(false、デフォルト)か、アルバムに内包するトラックのアーティスト名が一致する場合(true)を選択します。クラブ音楽や音ゲーのサントラなどを保有していて、アーティストが様々なコンピに参加しているといったことが多い場合は有効化したほうがアーティスト名からの楽曲を引きやすくなると思います。
Prometheus.Enabled false true Prometheusのメトリクスを利用可能にします。メトリクスパスはPrometheus.MetricsPathで指定できます(初期値は/metrics)。prometheus.ymlのサンプルはこちらで、Grafanaのダッシュボードサンプルはこちら。リソースモニタリングはもちろんですが、ライブラリのメディア総数・アルバム総数の変遷もウォッチ出来ます。

設定し終わったら、サービスをリスタートすれば反映されます。ログインしてメディアのスキャンが終われば、ライブラリに次々とアルバムが並びます。


楽しい瞬間

あとは再生したいものを選択し、問題なく再生が行えるかを確認しましょう。ロガーサービスを利用されている方は、右上のユーザアイコンから「Personal」を選択するとlast.fm[15]またはListenBrainz[15:1]との連携設定が出来ます。言語設定やテーマ切り替えも同様です。

より快適にメディアライブラリを楽しむために

ここまででサーバはどうにかなったと思いますので、実際に利用していくことを考えていきます。この項では標準搭載のUIではカバーしきれない部分を拡張対応しているサードパーティ製のクライアントと、ライブラリの整理について記載します。

サードパーティクライアント

デスクトップ、スマートフォンそれぞれで開発が継続しているクライアントがありますので、いくつか紹介します。NavidromeはWebクライアントを標準搭載しているため必須ではありませんが、よりUIが洗練されていたり利便性が良くなったりしますので、手元で使っているものを紹介します。


ちなみに「聞ければ何でもいい」という人は、標準WebクライアントのPWAでも事足ります

Feishin

https://github.com/jeffvli/feishin


Feishin 0.5.1

Windows/Mac/Linuxで利用出来るElectron製デスクトップクライアント。SonicXDという名称のクライアントをリライトした現行版であり、複数サーバへの接続も可能。最近ようやく待望のDiscord RichPresenceの対応も始まったため、大分前身の機能に追いついてきた感があります。UIは至ってシンプルですが、NavidromeのWebクライアントで扱えないジャンル単位での再生が出来るのが意外と重宝してます。まだまだ開発途上でhomebrewからも取得出来ませんが、その分伸び代はあるクライアントだと思っています。使ったことがないのですがオンラインで歌詞の取得も出来る様子。


Discordへの通知が表示されているときの図。
現時点では最低限の情報は表示出来ている、といったところでしょうか。

再生にはmpvが要求されますが、拘りがなければWebプレイヤーに切り替えて使うのが楽です。

Symfonium

https://symfonium.app/


Symfonium 5.9.0

Androidで利用可能なPaidクライアント。1ヶ月くらい体験期間があったような。お気に入り指定した楽曲やプレイリストをローカルにキャッシュしてオフラインでも再生可能にできたり、メディアのビットレートをキャッシュファイルまたはWifi接続時のみ高音質(あるいはオリジナル音質)にそれぞれ切り替えができたりと、ニーズに合わせた設定が事細かにできます。ウィジェットにも対応しているのでデスクトップにも配置可能なので、これ一つあればどうにかなるといった優秀なクライアントです。

設定出来る項目が多すぎて慣れるまでは理想の挙動をさせるのが難しいのと、長時間再生しているとたまに再生の出だしでドタるのが玉に瑕。

CDの取り込み

個人的にあまりリッピングという単語は好きではないのですが、何はともあれCDを取り込むにはリッピング作業が必要です。昨今だとCDドライブが搭載されていない、または外付けのCDドライブを所持していないという方が多いのでは、という気もしてきましたがとりあえず…。

Exact Audio Copy

https://www.exactaudiocopy.org/

Windows対応。
昔はCDexなるソフトを利用していた記憶がありますが、現在はこちら。外部パッチでUIを日本語化出来ます。名前の通り正確性を何よりも重視しており、読み取りスピードを自動調整しながら可能な限り正確にリッピングを行います。FLACロスレスでのライブラリを構築しているユーザに愛好家が多いみたいです。高機能なリッピングツールとしても知られておりオフセットや楽曲間ギャップも考慮したリッピングが出来ますが、その分作業時間は少し長め(ドライブ性能によるかもしれませんが1枚取り込むのに20分程度)なので、一度に大量のCDをリッピングしようとすると結構な覚悟が必要です。Lameを始めとする外部エンコーダと連携して、直接MP3のエンコードまで処理させることも出来ます。

Windows Media Player

Windows対応。
Win11になって、リッピング機能が搭載されたのでWMPでもリッピングが出来るようになったみたいです。未使用。

iTunes

Windows/Mac対応。
iTunesでもリッピング出来ます。Macbookはいわずもがなですが、iMacもCD/DVDドライブが搭載されなくなって久しい認識なので、Macユーザほどリッピングに使用したことがある人は実は少ないかもしれません。

タグの整理

ある意味こちらのほうが今回のメインコンテンツかもしれません。

快適にとかいいつつある意味苦行なセクションにはなるのですが、今更な大前提として今回紹介するメディアサーバにおいては所持しているライブラリのタグが整理されていないとまともに機能しません。聞くだけという観点で見れば何とかなるかもしれませんが、ライブラリとして見た際に 「新しいアルバム」の「不明なアーティスト」さんの「トラック1」が大量発生している状態が快適、という方は中々いないでしょう。

iTunesを始めとする現代のリッピングツールには、リッピング時にこれの入力の手間を削減出来るようCDDB[16]への問い合わせ機能が大体ついています。基本的にはこれに倣えば最低限の入力は行ってくれますが、取得できる情報には限りがありますし、意図した形式で取得出来るとは限りません。データベースへの登録がなかったり、英語のタイトルが全角英数で登録されたり、カタカナで登録されるといったことも普通に起こり得ます。

メディアファイルの楽曲データは、ID3タグというものがメタデータとして埋め込まれており、これを用いて楽曲情報の管理が行われます。ID3タグには大まかにはv1とv2があり、項目や文字数制限が厳しくUnicodeやアルバムアートワーク埋め込みにも未対応なv1は今となってはレガシーなメディアプレイヤー以外ではほぼ目にすることはなく、v2(主にv2.3/v2.4)が主流となります。これらのタグ情報はメディアファイルに埋め込まれているため直接編集するのは現実的ではありませんので、何かしらのGUIを使って編集するというのが主になるかと思います。

メディアライブラリの管理は、このID3タグとの終わらない戦いとも言えます。CDDBからの情報は必ずしも利用する側にとっては正ではなく、自分が満足できる状態が正となるため、時間が経つと書き換えたくなる、ということも多々あります。というわけで、この項ではタグ編集に有用なソフトウェアをいくつか紹介しておきます。


よく聞くアルバムはジャケットで認識してることも多いです。師匠は凄い目立つ。

なお、ダウンロード販売で買った音源に関してはこの点はある程度クリアされていることが多いです。私の場合はBeatport[17]でよく買い物をしていましたが、このサイトで購入した音源はほぼタグの編集は不要でした。当時は毎月のように100曲前後の音源を買っていたので、これを全部タグ整理していたら多分発狂していたことと思います。

MusicBrainz Picard

https://picard.musicbrainz.org/

使い所:とりあえず一回これに放り込んでみて後からどうするか考えるとき


MusicBrainz Picard 2.10

Windows/Mac/Linux対応。
MusicBrainzという音楽データベースを活用するタグエディターです。楽曲のメタデータのみならず、音楽そのものに関するウィキペディアを目指したオープンプロジェクトであり、近年ではWikipediaからも典拠管理として参照されているようです。

使い方に少し癖はあるものの、慣れれば大量のライブラリを一括でタグ付けが行えます。取り込んだ音源のフィンガープリントを用いて、タグ情報が不足しているメディアを割り出してタグ付けが出来るため、取り込んだはいいけど違うCDのタグ付けがされた!という事故が起きづらいです。
データ量が膨大で、リリース違い(国によって収録曲やボーナストラックに差異があるのを吸収してくれる)やアルバムアートワークの取得はもちろん、他CDDBには登録されていないカタログナンバーなんかも取得出来るマニア仕様。クラスタリング・タグ付け時にライブラリのファイル移動・リネームも行えるので、上手く使うとこいつで取り込むだけでライブラリ整理の大半がカバー出来ることもあります。

ぱっと見のUIのとっつきづらさはありますが、大体の操作方法は下記ページの解説が大変参考になりました。
https://scrapbox.io/mizdra/音楽データの運用方針%2Fメタデータの紐付け方法

後述するエディタで固有に設定したタグがある場合は、CDDBから取得し直した情報で上書きせず特定のタグだけ残す、といった使い方もできます。強力なツールではありますがそれ故に一度に大量のタグを書き換えてしまうため、更新された内容については保存前に必ず確認をしておくのが良いです。

MP3Tag

https://www.mp3tag.de/en/

使い所:アルバムアートワークの編集や一括でアルバムアーティストなどを更新したいとき


MP3Tag v3.14

Windows対応。Mac版は残念ながら開発が終了してしまったようです。
Picardで取り込んだはいいけど、アルバムアートワークだけ差し替えたいなどという時に使っています。扱えるカラムが他のエディタよりも比較的多く、またアートワークを複数同時に扱えるという点も素敵。意図しないアートワークが表示される、というときは大体こいつで埋め込まれているアートワーク欄を覗くと解決するかもしれません。セルから移動する際に保存がされてしまう点は他のエディタと少し挙動が異なるため、その点は慣れが必要です。

このエディタ自体もCDDBへの問い合わせ機能を有しています。freedbを始めMusicBrainzも利用できますので、Picardがどうしても使いづらい、という場合はこちらのエディタの利用もおすすめです。ジャンルに偏りはありますがDiscogsという音楽データベースも利用できるため、洋楽やクラブミュージックへの対応力もあり、アルバムアートワークのみ取得するといったことも可能です。メディアファイルの読み込み時に解析に少し時間を要するため、まとめて大量のアルバムをタギングするには少し厳しく、ある程度数を絞って読み込みをするのが良いかと思います。

あまり普通の運用ではないと思いますが、私の場合ゲームのサウンドトラックに関してはアルバムアーティストをパブリッシャーにするという自分ルールがあるため、そういうときに出番が多いです。

SuperTagEditor(STEP_J)

https://github.com/jarupxx/STEP_J

使い所:CDDBに情報がなかったCDのタグを1から埋めるとき


STEP_J v1.04

Windows対応。
色々魔改造をされ続けて、本家→STEP→STEP_M→STEP_Kと開発が受け継がれてきた経歴を持つタグエディターの5世代目に当たります。近年のメディアライブラリ管理に利用するにあたってはアルバムアートワークが扱えないという欠点はありますが、tabやEnterでセルの移動といったエクセルライクな操作が出来るため、直感的に扱えます。動作が非常に軽量な点もとてもベネ。

CDDBに問い合わせも何も出てこない場合は致し方ないので1から自分でタギングすることになるため、こちらを使います。現行バージョンでも出来るか試せてなくて少し自信ないですが、複数行まとめてコピーしたものをペースト出来るので、CD頒布元のサイトなどを参照しトラックリストを探します。テキストエディタやスプレッドシートを開いて、トラック番号を消して行単位にしたものを貼り付ければ一番面倒な箇所はクリア出来るので、そのような利用方法が主です。

iTunesほか

iTunesでもある程度のタグ編集やアルバムアートワークの更新が出来ます。基本的なことであればこれで事足りるので、その他のID3タグエディタを使ったことがない、という人のほうが多いかもしれません。コンピレーションタグ[18]という問題点はあるものの、アルバムアートワークの埋め込みを含む基本的なタグ編集は少量であればこれでも充分です。

メディアプレイヤーを使っていれば、iTunesに限らず簡易的なタグ編集機能は大体備わっているかと思います。中でもfoobarはメディアプレイヤー付随のタグ編集機能としては中々強力な部類になると思います。


foobar2000のメディアプロパティ画面。
何のタグが埋め込まれているのかチェックするのにたまに開きます

アルバムアートワークの取得

アルバムによっては、期待しているアルバムアートワークが問い合わせ時に取得できない場合があります。

  • 解像度が低い
  • 色味がオリジナルのものと異なる
  • スキャンされた画像が取得され、そのスキャンの精度が低い

誤った、あるいは意図しないアルバムアートワークが登録されるのは、まずCDDB上に登録されているアートワークがそもそも期待しているものではないことが大半です。特に解像度不足についてはタグ整理中には気が付きづらく、実際に利用を始めた後スマートフォンから見た際に、再生画面やアルバム詳細画面で大きく表示された際に気がつく、といったことが出てくるかと思います。個人的には目安としては500px四方程度を超えていれば、見ていてそこまで気にはならないかなと思います。


発覚した例。高田雅史氏のkiller7サウンドトラック。
本作はGC版のディスク内に「IceCube Pf.」原曲が未使用データとして存在することでも有名(サントラには未収録)。

そういった場合は、自分でアートワーク画像を探してきて手で差し替えることになります。主な取得ソースとしては:

  • amazon
    • 製品詳細ページで使用されている画像をクリックすると、登録されている場合は高解像度のものが取得できます
  • アーティスト公式サイトのディスコグラフィーページ
    • 第二の選択肢として、アーティスト自身のサイト上に掲載されているものを利用出来るか確認します
    • 拡大用に高解像度の画像が用意されていることもあります
  • Googleの画像検索
    • 過度な期待はできませんが、フィルタで画像サイズを指定するといい感じのサイズの画像が引っかかることがあります

あたりでしょう。スキャナがあれば、自分でスキャンしてしまう、というのも手です。

手元に差し替え用画像の準備が出来たら、後は対象のアルバムのアートワークを地道に差し替えていきます。iTunesでもいいですし、MP3Tagなどアートワークを扱えるソフトウェアを利用しても構いません。こういった地味な作業は出来れば自動化したいところですが、取得した画像の良し悪しの判断については個人の目レベルで判断するしかないので、ここは根性で黙々と作業を進めましょう。

総括

というわけで、サーバ構築とライブラリ編集手順をざっと紹介しました。一度サーバを構築してしまえば後は使い込むだけですので、やることとしては:

  • CDから音源を取り込む
  • タグ情報を整理する
    • MusicBrainz Picardで一度雑にタグ付けをする
    • Mp3Tagで直したいところを治す
  • いっぱい聞く

を無限に繰り返すだけです。あとはSpotifyやApple Musicと併用すればこれで無敵です。好きなだけCDを買ったりレンタルしたり、実家に置いてきたCDをサルベージしてきたりして、さらにライブラリを拡充させてより良い音楽ライフを送りましょう。


なお通信量については充分お気をつけください(或る日の記録)

終わりに

お疲れ様でした。ここまでお付き合い頂きありがとうございました。当初はもっと短いはずだったのですが、サーバ爆破したときのこと考えたら一度まとめておくのもいいかなと思ってしまったがために自分で自分の首を締めました。怪しい部分も多々あると思うのですが、見返すたびにあれこれ追記修正したくなってしまうので、この辺で一旦区切りをつけておきます。年寄りの話は長くてよろしくありませんね。

結局全然技術的でも何でも無い記事になってしまいましたが、出先から自分のライブラリを楽しめるのは存外満足度が高く、配信サービスの都合に振り回されるストレスから解放されるため個人的にはなくてはならない存在となっています。昔買い漁ったCDや昔取り込んだ音源をHDDに眠らせている方、ライブラリをちくちく修正して完成形を目指す作業に悦を覚えられるような方は年末年始やお暇なときに構築してみるのも楽しいのではないでしょうか。

明日は港さん、あぐれいさん、yutaroさん、staniさんが記事を書いてくださる予定です。
それでは、ヨナ43巻が出たら起こして頂ければと思います。:neko_neru_nya:

脚注
  1. 当時BMS界隈を賑わせていたOnoken氏やParaoka氏が使っているという理由で購入を決めた ↩︎

  2. 始業時にBlueToothスピーカーに繋がった人が作業BGMを流すという謎のガチャルールがあります ↩︎

  3. Alex Jones, Public domain, via Wikimedia Commons ↩︎

  4. 例:PierrotやΛucifer、Transtic Nerveなど。V系にありがち? ↩︎

  5. 例:主にJASRAC脱退後の平沢進 ↩︎

  6. ここからデビューしたアーティストとしては知ってる限りでfripSideや志方あきこ、霜月はるかなど。後期には太鼓の達人の楽曲コンテストなども行われていた ↩︎

  7. Yahoo Japan - 安室奈美恵さん楽曲のサブスク削除、困惑続出「何かあった?」 エイベックスからは回答得られず ↩︎

  8. 例:https://p.eagate.573.jp/game/2dx/mobile/help/service.html ↩︎

  9. コナミの矩形波倶楽部やSNKの新世界楽曲雑技団、タイトーのZUNTATAなど、サウンドチーム名義でのクレジットはゲーム業界的には割とあるあるだったりはするのですが ↩︎

  10. SubsonicAPI互換クライアント使用する場合は対応あり ↩︎ ↩︎ ↩︎ ↩︎

  11. サーバ上にプレイリストを配置する方式(記法は現状当該issueにのみ記載されている)。サンプルはredditにも。 ↩︎

  12. 要歌詞埋め込み対応 ↩︎

  13. Jellyfin - Plugins ↩︎

  14. 開通に1ヶ月かかった以外は比較的平和です。10Gは来そうにないですが…。 ↩︎

  15. 聞いた楽曲を記録していってくれるロギングサービスの一種。Spotifyとも連携出来る。要はmixiミュージック、といえば伝わる人もいるかもしれない(老人会) ↩︎ ↩︎

  16. 楽曲情報データベースの総称。対応するアプリケーションからCDに収録された楽曲をオンラインでトラック名やアーティスト等を参照出来る。Gracenoteやfreedb、後に記述するMusicBrainzなど。 ↩︎

  17. DJ御用達のクラブミュージック音源販売サイト。特化サイトらしくトップメニューがジャンル、楽曲カードにはレーベル(クラブミュージックにおいては、レーベルで楽曲の方向性がある程度定まるのでレーベル単位でdigれば同系統の楽曲にリーチしやすいため重要な情報)が併記されている。これまでいくら使ったかはあまり考えたくありません。 ↩︎

  18. 指定しないと複数アーティストからなるアルバムがアーティストごとに散らばる。Appleの独自拡張? ↩︎

GitHubで編集を提案

Discussion