目次
PySpaアドベントカレンダーの12/15のエントリーです。昨日はtaichiさんでした。 今年はDIYではなく、PCにまつわる話を。
仕事中はBGMが基本
フリーランスを始めて(2020年初頭)からすぐに、自宅で仕事をする情勢になりました。 打合せをしていないとき、カンファレンスの発表などの動画を見ていないときは基本的にBGMをかけて作業をしています。 音源としては、CDなどから音楽ファイルにしたり、AmazonやSonyのサイトで購入した音楽ファイルなどがNASにあります。
今年10月までの環境
2020年の後半に次のような環境を構築して今年の10月まで使っていました。
LibreELECをラズパイ4に入れて、Kodiのリモコンをスマホに入れたら快適になった
— Jun Ohtani (@johtani) October 20, 2020
KODIと呼ばれるマルチメディアセンター?のようなソフトで、それを動かす最小限のOSとして、LibreELECが公開されています。 これをラズパイ4に入れて、NASからファイルをSSDにコピーしてそれをラズパイに接続して音楽を聞いていました。 毎回ラズパイの画面を見に行くのも面倒なので、再生などの操作にはAndroid用のKodiのリモコンアプリを使っていました。
場所も取らないのでよかったのですが、使っているといくつか問題点が。
- 時々調子悪(音が出ない、リモコンからつながらない、無反応など)くなって、ラズパイ再起動
- 音楽ファイルを購入して増えた時に、外付けSSDを取り外してPCでコピーしたり
- スマホじゃないと再生できない(PCのクライアントもあったのかもだけど調べてなかった)
Ubuntu on Mac mini
10月に模様替えをして、2012年製のMac Miniが宙ぶらりんになりました。 さすがに古いしメインマシンがWindowsになっているのもあり、macOSである必要も特にないので、Ubuntu 22.04を入れて何かに使えるのでは?と。 また、1TBのSSDに内臓ディスクを乗せ換えていたのもあり、音楽再生に使ってみようということに。 なので、Kodiの環境で困っていた点も考慮して、ほしい機能を元にちょっと探してみました。
音楽再生 on Ubuntu
音楽再生でほしい要件としては次のようなものです。
- Ubuntuで音楽再生できるソフト(あたりまえ)
- PCから操作したい(できればブラウザ)
- 音楽ファイルの更新(ローカルでもいいけどNASからもってきたり)
- 日本語の曲情報も表示
- 対象音楽ファイルが豊富(そんなに制限があるものはないだろうなぁ)
上記の要件をもとに適当にググって見つけてきたのがOwnToneというソフトでした。
OwnTone
OwnToneの説明は公式サイトを見ていただくとして、OwnToneにしてよかったなというのが以下の点です。
- インストールが簡単(apt-getでインストールできる)
- サポートフォーマットが豊富
- Web UIがついてる(ブラウザで見えるし、スマホでもOK。どのブラウザから見ても今の状況も分かる)
- 簡単だけど検索できる
- プレイリスト対応(ファイルパスを入れるだけ)
- サムネイルとかも出てくる(どうやってんだろう?w)
- AirPlayで再生できる(AVアンプを利用しており、そこにAirPlayで再生できてる)
- OSS(まだソースは見たことないですがw)
再生画面例
やっぱ検索も気になるよね?
日本語も検索できるな。 pic.twitter.com/EF6WHkJKli
— Jun Ohtani (@johtani) October 19, 2022
とりあえず、インストールして画面もすぐに出て操作も簡単で、便利な世の中になったなーと感動しましたw
ただ、音がヘッドフォン端子に刺したアナログ出力先のスピーカーではなく、本体のスピーカーで最初はなってしまいましたww
Linuxの音周りが全然わかってない問題が発覚。
幸い、先週のPyspa Advent Calendarのエントリーを書いていたaodag先生に助言をいただき、alsamixerで音の設定を見たところ、ヘッドフォン端子がミュートされていたので、ミュートを外して無事再生できました。 インストール当初はYAMAHAのアクティブスピーカーにJust Mixer経由でヘッドフォン端子(アナログ)で出力して音楽再生をしていました。 今は(この記事を書いてる現時点で)、AVアンプのAirPlayにOwnToneから音を流している形で聞いています(便利なんだけど、当初の想定とは異なる、理由は後述)。
ファイルのコピーとか
さて、上にも書きましたが、NASにバックアップもかねて音楽ファイルを保存してあります。 新しく買ったファイルもここに置くようになっています。 OwnToneのMac MiniからNASをネットワーク経由で見に行くのもいいのですが、できればローカルにあったほうがネットに影響も出ないなと。
ということで、定期的にNASをウォッチしてMac Miniにファイルをコピーするようなプログラム(Bashスクリプト)を書いてみました。 毎回購入後に手で実行もめんどくさいので毎日夜中にcron実行するような設定になっています。
スクリプトの中身は次のような感じです。
- findコマンドで特定の日時(最近コピーしたファイルの日付)以降(
-newermt
オプション)のファイルのリスト(音楽ファイルの拡張子に限定)を取得 - 取得したリストをもとに以下の操作
- ファイルをコピー
- コピーしたファイルをコピーした日付のプレイリストを作って入れる(プレイリストはパスだけ書けばOK)
mp4
形式だと聞けない端末もあるので、soundconverter
コマンドでmp3
に変換してNASに戻す- 最新のファイルの日付を保存(次回のfindコマンド)
- ファイルがあったら、OwnToneの再読み込みのエンドポイントを
curl
でキック
NASはSambaでマウントして、見えるようにしてあります。 やっぱり、自動化便利ですねぇ。 気に入った曲を買ってNASに入れとけば聞けるようになるのは本当に便利。
他にもスマートプレイリストとかもあるので、活用しないとな。
今後の課題
さて、すごく便利になったのですが、課題も残っています。
音声出力問題
アナログ出力はaodag先生の助言ですぐに解決したのですが、takabowから譲り受けたAVアンプを導入してから実は音の出力がうまくいっていません。
HDMI、光端子出力でAVアンプにつなごうとしたのですが、私のUbuntu力(Linux力?)が全然不足しているのでうまくいっていません。ググりつつ、HDMI、光出力でamixer
というコマンドで音声ファイルを鳴らすところまでは行ったのですが、OwnToneに設定するとうまくいかない状況です。
結局、解決してないのですが、AVアンプのAirPlayのレシーバー経由で音楽再生ができてしまったので、とりあえずAirPlayで運用することにしました。時間を見つけてaodag先生の記事を読み直して再チャレンジしないとな(けど、鳴ってるしなぁ、音w)。
文字化け問題
これは、OwnToneというよりはもともとあった問題です。 古い音楽ファイルだったり、Wav形式のファイルなど、様々な形式のファイルを持っています。 音楽サーバーとは別に、音楽ファイルの検索をできるようにしつつ、付加的な情報(Wikimediaなどのデータとか)を付与して、検索できるようにしてみようと思い、音楽ファイルからメタデータを抜き出して、ElasticのApp Searchにいれるデータを作るツールを書いたりしています。 この時にも文字化けに遭遇しました。
様々な音楽ファイルにはメタデータを付与することができる仕様が決まっています(ID3タグ - Wikipediaなど)。 ただ、文字コードの情報が入っていなかったり、デフォルトとは違う文字コードでデータを付与したファイルがあったり、いろいろな原因で文字化けしているものがあります。 昨年Amazonで購入したmp3の中にも文字化けしているものもあったりします。Wavファイルに付与されたタグなどは、容赦なくShift-JISだったりしますが、読み込むソフトはUTF-8で読もうとしたり。。。
検索サーバーにデータを抜き出して入れるツールを書いているときは、元のファイルを変更することなく、抜き出す時点でいくつかの文字化けに対応した処理を書いたのですが、今回のOwnToneで曲を流すと結局、元のファイルをきれいにしないとダメだということに気づきました(すぐわかるだろ。。。)
ということで、書いている途中のツールをもとに、根本的な文字化けのファイルのメタデータをきれいにするプログラムを書かないといけないなぁと。
ちなみに、メタデータの抜き出しにはJavaでプログラムを書いており、JAudiotaggerというライブラリを利用しています。 Pythonや他のJavaのライブラリを試そうとしたのですが、文字コードが決め打ちで抜かれているものが多く、ライブラリから読みだした時点ですでにどうしようもない状態のものが多いといった問題からこのライブラリにたどり着きました(まぁ、まだちゃんとしたものができていないんですけどね)。
検索サーバー
OwnToneのUIはブラウザでうごきます。 検索窓もついています。 が、先ほども書いたように、他にもデータを追加して、いろんな検索をしてみたいなぁと(ドラマに使われてたとか、CMにつかわれてたとかとか)。 検索が好きでいろいろとやってるので、その辺も遊んでみたいなぁと思っているところです(実際、ElasticのApp SearchにWikidataから生成した類義語を入れてみたりしている)。
こうやってブログにしてしまったので、課題をつぶしていなかったら、Twitterなどでつついてくださいw
まとめ
構成図とかは書かなかったですが、OwnToneを使うと簡単にWeb UIが入った音楽サーバーが使えるようになって、仕事がはかどりますよという記事でした。 他にもこれに関するネタを募集してますので、コメントもらえるとうれしいです(Twitterでメンションも大歓迎)。
comments powered by Disqus
See Also by Hugo
- GoでSlackのボットを作った話
- Slackボットで音楽検索&再生
- ブログ移行日記(その4) - 検索機能(Algolia)の導入
- AI活用しきれていない話
- 今年のDIYキーボードとコントローラーラック