SSブログ

MusicBeeからAndroidへのプレイリストの転送 [PC]

MusicBeeのMTPデバイス(Android端末)への転送機能でプレイリストを転送したときにAndroid側でうまく解釈してくれないとう不具合に遭遇した。Dev版を使っているので、Stable版では起きないかもしれないが顛末を書いておく。
 
どうやら、問題が2つあって、転送したm3uプレイリストファイルに書かれているパスと文字コードに問題があるようだ。
 
まずパスの問題だが、MusicBeeで指定した転送先のプレイリスト用フォルダ名、例えば「Music\」を指定していたのであれば、m3uファイルが「格納パス(internalやexternalのSDカード)\Music\Playlists\」フォルダに転送される。
 
転送先の音楽ファイル用フォルダ名をプレイリストと同じフォルダ「Music\」とすると、転送されたm3uファイル内に書かれているパスの行頭に「\Music」と入ってしまう。
 
Android側ではm3uファイルを読んだフォルダから相対パスで指定されていると解釈される。m3uファイルは「格納パス\Music\」フォルダに格納されているので、「格納パス\Music\Music\曲が格納されているパス」と解釈してしまう。「格納パス\Music\曲が格納されているパス」と解釈してもらいたいのに。つまりm3uファイルの行頭の「\Music」が余計なのである。
 
プレイリストを格納するパスを「Music\」の親フォルダにするといいかもしれないが、SDカードのルートにプレイリストを置くことになり、あまりよろしくないのでやってない。
 
文字コードの問題だが、USBで有線接続したときはUTF-8, CR+LFで転送され、これはAndroidで解釈するのに問題はない。WiFiでの転送をしたときに、UTF-8, CR(LFは無い)というm3uファイルが転送されてしまう。Dev版での実装だからか。
 
LFが無いとAndroidのメディアストレージは改行が認識できず1行のプレイリストとして解釈してしまう。
 
そこで、この2つの問題を解決するために、MusicBeeのプレイリスト形式のMBPというバイナリファイルから、文字列を抽出して、文字コードがUTF-8, CR+LFで、行頭に\Musicが付かないm3uファイルを生成するWSL用bashのシェルスクリプト(バグが出てるので修正中) シェルスクリプト(修正版2019.05.10)を作成した。(WSLじゃなくても動くと思うが)(2019/05/27追記)最終的に作成したスクリプトについてはこちらの日記参照 
 
これで生成されたm3uファイルをMusicBeeで指定した音楽ファイル格納用フォルダに、適当なAndroid用ファイル転送アプリで転送してAndroidのメディアストレージを読み込み直すと、めでたくAndroidで正常なプレイリストが生成される。
 
このスクリプトを使う前提条件として、PCのMusicBeeのライブラリと、Androidに転送した際の音楽ファイル格納フォルダの構成が同じでなければならない。具体的には、MusicBeeのライブラリの音楽ファイル格納フォルダが「C:\User\piyo\Music\MusicBee\Music\」であれば、Android側では「格納パス\Music\」以下に同じ構成で転送しなければならない。
 
そうするにはMusicBeeのデバイスの設定で「音楽のストレージ->格納パス」の下のラジオボタンを「命名テンプレートを使用」ではなく「ファイル名を保持」にチェックを入れる。
 
ファイルの拡張子を抽出して改行を入れているため、スクリプトに書かれているflac, mp3, mp4, m4aファイルしか書かれていないプレイリストしか対応していない(自分が持ってるのがそれだけだから)。他の拡張子(oggとか)に対応させたい場合は適宜追加のこと。
 
自分の環境(MusicBeeのライブラリのパスとAndroid用m3uファイルを格納したいパス)を書き込んでダブルクリックで実行できるバッチも作って、MusicBeeでプレイリストを編集したときにダブルクリックするだけで反映させられるようにした。
 
サンプルのバッチファイルもアップしておくが、環境によってパスが違うので適宜書き換えのこと。
 
しかしMusicBeeは動作は軽快でいいのだが、思わぬ障害に遭遇したな。Google Play Musicへのプレイリストのアップといい。まあ、簡単にアップできる仕組みと手順を整えたからいいけど。
 
続きあり
 

nice!(1)  コメント(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。