mpd Protocolを読んでいたら(https://www.musicpd.org/doc/html/protocol.html#command-reference)
いくつかの使える機能があったので実装した。
mpd0.21版でProtocolが変わり機能が多くなるようだが,現在の手法では単純にできなそうなので,mpd関連に対し現バージョンで入れたい機能は対応するようにした。
mpdのドキュメントを読んでおこうと思っています。
またVolumio3となってきているのでI/Fを読んでみた
CLI:command line client (https://volumio.github.io/docs/API/Command_Line_Client.html)
APから使用できそうな機能を実装してみた。
2020-03-10:Ver1.35 修正,機能追加....
本バージョンは,VolumioRc2が大幅な機能アップ,mpd0.20が主流になったので機能を反映する機能追加を行った。
VolumioRc2は,mpdを活用するのにのDACの認識,reboot/plunginなどの保守,インストールが省力化されているのでさらに活用する方向とした。
また,他端末との排他的な活用を最低限行い,信頼性を向上した。
1. Shared Memoryの削除時Errorのケースがあったのでメモリリークが怖いので,強制削除できるモード(Clear指示)を作成。(FileArt機能である程度のディレクトリがあった場合を想定)
mpdweb作成時点の環境ではErrorが起きていなかったので再度調査し組み込んだ。操作面での変更はない。
2. Mpd ver0.20版でZipFileが扱えたのでZip時のArtを設定できるようにした。
XML設定<Album_art><file>%filename%.jpg,Folder.jpg,folder.jpg
:ZipFile時:%{basename}%(extension含む),%{extension}%,%{filename}%(extension除く)
Zipファイル:「Last-Modified」(更新日)がない場合はストリーミングとしていたがZipの場合も「Last-Modified」がない。
なぜか,File一覧(mpd:lslist)では「Last-Modified」(更新日)がある。
Playlistの編集で,「Last-Modified」(更新日)ない場合は,リンク切れとストリーミングを判定していたが,更にZipを判定する必要が発生した。
予想外の修正量になってしまったが、当環境でBackupZipを置いているので対応した。
※Zipファイルの制約として,日本語はUTF-8でないと文字化けし正常に動作しない。(Volumioも同様)
UTF-8のZipファイル作成:Windows10の場合
コントロールパネル→地域
→「管理」タブ→「システムロケールの変更」
→「地域の設定」→ 「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用(U)」にチェック
→「OK」ボタンで再起動
Windows10のロケールが変更されるの未対応ソフトがあれば、文字化けする。
またテキストファイルは過去メモ帳で作成分はShiftJisなのでメモ帳で開くと文字化けする。今後はUTF-8で保存されるので,ロケールがUTF-8でないPCで
メモ帳で開くと文字化けすることに注意。秀丸などのエディタでは問題ない。
(Windows10 1903以降はメモ帳はUTF-8がデフォルトになった)
3. Playlist機能のFunctionでの不具合対応。
ストリーミング選択:「Add Music」~「Add toPlaylist」で動作しないのを修正。
ファイル選択 : JSを使用してのHTML縮小版を活用。
前版でのエンバクを修正
4. mpd ver0.20版でmpgファイルを再生できるので暫定対応。これも当環境でZipのmpdを認識してしまうのを確認。
5. volumioとのI/Fモジュールを作成中だが中間として,XML設定<Additional_Funcのパラメータを追加した。
追加に伴い,IndexListのHTML-IDが直接指定できるようになったので修正
XML設定 <HTMLBuiltin><BodyJs>
<Additional_Func><CommonFunc>
を変更した
6. 再生Playlistがないことを検知したとき,Load Playlist名をクリアしOverwriteできなくした。
操作PCでは良いが,他機器で操作している場合は一定時間で最新化する条件がある。
・Playパネルを表示しているときのみ一定時間経過後に有効。(mpdとのI/Fを制限するため)
7. Current PlayStatus Cunsume(再生楽曲をクリアする)モードのときPlaylist名をクリアしOverwriteできなくした
XML設定 <DISP_Config><Playlist_Consume>on|off
8. Current PlayStatus Cunsume(再生楽曲をクリアする)モードのときMoveを設定で抑制するようにした
MoveはMpdのI/Fに従い,Qidで行っているが,Cunsumeモードのとき再生終了で楽曲が減るとき,Qidも変わるため操作対象が変わるのを防止を兼ねる。
XML設定 <DISP_Config><Current_ConsumeMove>on|off
9. Current Move/Delete更新時,Titleが異なるとき他端末で操作されたと判断し更新しないようにした。
XML設定 <Exclusive><Current>on|off</Current><Playlist>on|off</Playlist> NowMusic排他利用,Playlist機能 排他利用
排他利用設定 排他利用時:Playlistを多く使用しているとき遅くなる。
一台のみ利用/行わなければ:offで使用も可能
遅くなるのは,Playlistの対象行を得るmpd Commandで機能がないので,代用策でmpdとの交信が増えることも作用している。
ループによるオーバヘッドを改善したが,mpdからの応答からCallbackを使用し大幅な改善にならないようにした。
Callbackを使いたくないが,Move&Deleteを連続操作を行ったときmpdが処理し切れなくなり,Update漏れがでるのでここまでとした。
排他利用設定をoffにすることで,従来の機能となる設定をできるようにしておいた。信頼性と端末で同時に編集はない前提でも良いとは思う。
※ Playlist機能のチェックは,Move/Deleteを更新するとき,同行同ファイルでない場合は,メッセージBox表示し再度Playlistを読み込む。
Current画面に対するチェックだが,画面上FilePathがないのでTitleで代用。
同じPositionに同じTitleがあるか完全ではないがチェックしている。
Current画面にFilePathを持つのは,HTML自体が大きくなるので対応しない予定
10. Playlist機能でList選択しPlaylistを表示時,他端末でPlaylistを削除されたとき,ACKがないエラーメッセージになっていたが,エラーを表示しないようにした。
Playlist内容が無いような表示を行う。戻るとListがない状態になる。
11. mpdtaskserverモジュールを追加
volumio-rc2.668で使用可能。
Volumiovolumio-rc2初期では
用意している設定で可能となるのは
・Volumio2の開始/終了
「Readme_install.txt」にインストール方法を記載
XML設定 <Additional_Func><CommonFunc>で設定
mpdtaskserverを設定していない,またVolumio2が未対応では機能が使用可能にならない
12. 編集機能「Move」が未完了で別行の「Move」を行うと前「Move」のマークが残っていたのを修正(Playlist機能/NowMusic)
13. メタタグ「Diskno」のSort方法を設定変更した。10枚組で1の次に10が来るため。
XML設定 <Sort_Base><FieldLength>Disc:%03s,を追加
設定を変更している場合は,同設定のみ設定する。
14. Playlist画面でMove中に再生時間をクリックするとイベントを受けて誤動作していたのを修正
15. Playlist画面でFileが存在しない場合,File機能にリンク時,内部でエラーになっていたのを修正。
ディレクトリがあるかも知れないのでFile機能にリンク(前版でのエンバクを修正)
16. Playlist機能でDrop&DragdでMoveをできるようにした。(マウス操作のみ)
17. Google Chromeでズーム若干の縮小で使用に耐えるようにstyleを修正。Microsoft Edgs Chromiumベースリリースに合わせて修正。
レスポンシブWebデザインにはなっていない。Width(ブラウザの幅)とGoogle Chromeの縮小の関係で解決策がない。(ブラウザの幅をそのまま縮小するので@media max-widthでは対応できない?)
18. Search機能で対象データなしの指定で,内部でエラーを起こしていたのを修正。(SharedMemory使用時)
19. CommonPannelでdsf時使用環境でエラーを起こしていたのを修正。
mpdからのサンプリング周波数の応答が何種類かあったので対応。(他にあった場合でエラーを起こす場合は都度修正)
20. IndexListとFunctionBoxの表示順を変更
IndexListの上にFunctionBoxを表示するようにした。
XML設定:<HTMLBuiltin> z-index:1000 →4
21. Search機能強化。完一致(従来の機能)部分一致,先頭一致,大文字小文字区別なしとなる。
XML設定:<Search_Match>Perfect,Partial,First:Perfec</Search_Match>一致種類,デフォルト
<Search_TitleLeng>4</Search_TitleLeng>タイトル検索の必要桁数(default:6)完全一致時はチェックしない
22. List機能のFunctionBoxに選択リストをSearch機能に,引き継ぐ機能を追加した。Search機能強化の一環
List機能 HTMLサイズが大きくなったが機能とのトレードオフとした。
23. NowMusic 外部起動設定 (Extend Link)でFrame起動時 Fremeのidを変数で指定できるようにした。
Fremeで動作するアプリ作成時,アプリ内でFrameサイズを変更できるようになる。
XML設定:<Extend_Link><frame>...%Fremeid%(または[Fremeid])で指定
※今回リリースでは未使用
24. 外部起動設定(Extend Link)で終了時,Linkし開いたURLを閉じるようにした。(SubWindow)
XML設定:<Additional_Func>OpenWindowDescriptionを$SUBWIN$と設定すると機能する
外部起動を閉じるとき,RequestSubWinCls()[共通関数]を使用することができる
25. 外部起動設定(Extend Link)Frame起動後Closeしない場合,同じClient機器のみ起動するモードを作成した。
(他機器でも起動面倒だったので)
XML設定:<Extend_Link><frame> ''/self/close/を設定可とした。
<JS_Watch><ExpAutoLoadleng>256</ExpAutoLoadleng>
: 外部Link機能の記録Sessionの長さ制限(1記録約20Byte)(最後の2個は必ず残る)
※変更時「Session Data Clear」を行うこと。
26. Funcxtion画面Informationにバージョン情報を追加
mpdweb.common.js/mpdweb.common.css : バージョンを追加。
ソースからのリターンを表示しているので古い場合は,ブラウザを最新表示,観覧履歴をクリアする。
27. 次期作成予定の機能のため"<Additional_Func>"でFrame起動をできるようにした。
Frame用に作成するアプリで機能を広げやすくし,mpdweb本体に直接機能を広げたくないため。
XML設定:<Additional_Func><{tag}> object={FrameObject} frame={FrameStyle:Parent} fsize={FrameStyle:child Size}