Sonos に手書きのプレイリストを食わせてみた
Sonos アプリでプレイリストが編集できなくなっていたので手書きのプレイリストを食わせてみました。
Sonos アプリ
Era 100 を買った当時はちょっと不具合はあるけど一通りの機能はあるアプリだったのに v16 → v80 と謎に番号の飛んだアップデート以降は使いにくいし、無くなった機能もありストアのレビューは☆1だらけになっていますね。
私は普段は本体のプレイボタン、たまに別の曲かけた後も以前作成したプレイリストを選んで再生、ぐらいしか使っていなかったので「アルバムアートが表示されなくなったなぁ」ぐらいしか気にならなかったのですが新しい CD を買ったのでプレイリストに曲を追加しようとしたら… 編集できねぇ!
一応11月中旬にこの機能は復活予定らしいのですが今すぐプレイリストを編集したかったので調べてみました。
プレイリストを読み書きする
Sonos API にプレイリスト関連があったなぁと思って調べると既にツールを作られた方がおられました。プレイリスト自体は本体 (クラウド?) にあるので、プログラムの知識が必要ですが GitHub のこちらのツールでプレイリストを取り出したり戻したりできるようです。
python が必要なのと事前に pip install soco しておく必要があります。
私は Windows版 Python 3.13 を使いました。
#// プレイリストの一覧を表示 $ python spl.py -s 192.168.1.65 -l ずとまよ メメントモリ
#// すべてのプレイリストをエクスポート $ python spl.py -s 192.168.1.65 -X ずとまよ: 40 songs メメントモリ: 32 songs
保存すると xspf 形式のプレイリストで保存されます。
<?xml version="1.0" encoding="UTF-8"?> <playlist version="1" xmlns="http://xspf.org/ns/0/"> <title>メメントモリ</title> <trackList> <track> <creator>佐々木恵梨</creator> <title>Anemone(Lament Collection Ver.)</title> <album>メメントモリ lament collection vol.1</album> <location>x-file-cifs://ds220/music/%E3%83%A1%E3%83%A1%E3%83%B3%E3%83%88%E3%83%A2%E3%83%AA/Lament%20Collection%20Vol.1/01%20Anemone%28Lament%20Collection%20Ver.%29.flac</location> </track> (中略) </trackList> </playlist>
location が URL エンコードされていて読みにくいですがデコードすると
<location>x-file-cifs://ds220/music/メメントモリ/Lament Collection Vol.1/01 Anemone(Lament Collection Ver.).flac</location>
です。SMB で接続している NAS なので x-file-cifs ですが他のソースだと違うかもしれません。
これを参考に追加したい楽曲を手作業で追加していきます。
(URLエンコードが面倒ですがエンコード/デコードできるエディタを使うか他のプレイリスト生成ツールで作ったファイルからコピペするかオンラインの変換ツールを使うかして頑張ってください)
編集が終わったら Sonos に書き戻すのですが python が 3.15 未満だとデフォルトのエンコーディングがロケール依存 (Windows では CP932) なので環境変数 (PYTHONUTF8=1) かコマンドラインオプション (-X utf8) でエンコードを UTF8 にしておきます。
または URL エンコード後の xspf ファイルの文字コードと encoding 指定を Shift_Jis に変換しても良いのですが Shift_Jis で表現できない文字がある場合は文字化けします。
- 上書きインポートはできないので同名のプレイリストがある場合は事前に Sonos アプリで削除しておく。
アプリトップ画面 - Sonosのお気に入り - プレイリスト - 変更 - 赤いマイナスボタン
- NAS に楽曲を追加した場合などミュージックライブラリの更新は
歯車アイコン - Sonos 管理する - ミュージックライブラリ
Sonos アプリは何をどこから行えるのかわかりにくいですよね…
Sonos に書き戻すのは
#// プレイリストをインポート $ python spl.py -s 192.168.1.65 -i メメントモリ.xspf
Sonos アプリのプレイリストに追加されていれば成功です。