NextCloud+CloudBeatsで出先から自宅の音楽データを再生 (6)CloudBeatsへのm3uプレイリストインポート

前回までに,CloudBeatsを使って自宅内に構築したNextCloudの音楽を再生できる環境を整えました.


今回は,CloudBeatsに既存のm3uプレイリストをインポートする方法について記載します.

CloudBeatsのプレイリスト画面では,左上に"インポートm3u"というメニューがあります.こちらから,クラウドストレージ上に置いたm3uファイルをプレイリストとしてインポートすることが可能です.

20220101_225601352_iOS.jpg

m3uファイルというのは,プレイリストのファイルフォーマットで,複数の楽曲などのメディアファイルのパスをテキストで記述したものです.
M3U - Wikipedia

Windows Media PlayeriTunes, foobar2000など多くのメディアプレイヤーがサポートしており,PCやプレイヤーを変更する場合にプレイリストを移行するために利用できます.
しかしながら,正式なファイルフォーマット仕様が存在しないため,他のプレイヤーで作成したプレイリストを読み込めるかどうかは環境やプレイヤーによってマチマチです.

CloudBeatsもm3uインポートに対応しているものの,公式HPにはm3uファイル仕様についての記述がありません.そのため,文字エンコードクラウドストレージ上のファイルパス指定方法が定かではなく,Windowsで作成したm3uをインポートできるか不明でした.
そこで,いくつかのパターンで試行して,どのようなm3uファイルフォーマットであれば読み込みが可能か調べてみました.

結論からいうと,CloudBeatsでは,UTF-8エンコードで,クラウドストレージのルートフォルダを"/"としてメディアファイルを絶対パスで記述したものであれば,読み込み可能ということがわかりました.これは,例えば以下のようなm3uファイルです.

/Music/Sample artist1/Sample title1.mp3
/Music/Sample artist2/Sample title2.mp3

macOSLinuxを使っていて,たまたまこのようなフォルダにメディアを置いていればそのまま使えるかもしれませんが,普通は,ローカルでメディアを保存しているフォルダパスは,クラウドストレージのルートからのパスとは異なると思いますので,フォルダパスを変更する必要があります.
さらに,Windowsではパスの区切り文字はスラッシュ("/")ではなくバックスラッシュ("\")ですので,その変換も必要です.

加えて,私の持っていたm3uファイルは,エンコードがUTF-16LEであり,Extended M3U(拡張M3U, EXTM3U)の情報も含まれていました.日本語文字は文字化けしてしまうためUTF-8への変換が必要ですし,拡張情報はCloudBeatsで正しく解釈されるか不明だったので,削除しました.

まとめると,他のプレイヤーで利用していたm3uファイルに対して以下の処理を加えればCloudBeatsでも読み込み可能なプレイリストにできることになります.

  • メディアのフォルダパスをクラウドストレージのフォルダパスに合わせる
  • (Windows限定)パスの区切り文字をバックスラッシュ→スラッシュに置換する
  • エンコードUTF-8にする
  • #から始まる行を削除する(Extended M3U命令削除のため)

数ファイルであれば手作業してもよいのですが,私は30ほどプレイリストファイルを移行したいと思っていたため,Julia言語で以下のようなスクリプトを作成して,上記の処理を行わせました.


使い方としては,"C:\Playlists"というフォルダに元のm3uファイルを複数置いて上記のスクリプトを実行すると,"C:\Playlists\UTF-8”というフォルダにCloudBeatsが読み込み可能なm3uファイルが格納される,というものです.

メディアファイルは,ローカルの"C:\MUSIC"においてあるものを,フォルダ構成はそのままでNextCloudの"/Ubuntu/MUSIC"に置いた場合を想定しています.

Juliaは基本的に文字列のエンコードはすべてUTF-8として取り扱うため,他のエンコードとの変換にNKF-Tool.jlを使っています.このライブラリは,nkfという文字列エンコード変換コマンドをJuliaから実行可能にするもので,別途nkfのインストールが必要です.Ubuntuではapt-get, macOSではHomebrewで比較的簡単にインストールできるようなのですが,Windowsでは,Vectorからコンパイル済みのexeをダウンロードしてきて,Pathの通っているフォルダに置く必要があります.注意しなければならないのは,nkfのインストール後に,Julia REPLからusing NKFtoolしてNKFtoolをプリコンパイルする必要がある,ということです.nkfインストール前だとプリコンパイルが失敗します.

このようにして作成したm3uファイルをNextCloudの適当なフォルダに置いておき,プレイリスト画面の"インポートm3u"メニューから読み込ませることで,プレイリストをインポートすることができました.