• webui-plus開発/サポート(webui-plus development/support)

    @sunatomo さん
    @パパリウス さん

    last.fmの話題が出たので、どさくさに紛れて要望を。

    再生中の楽曲をlast.fmにscrobbleする機能が欲しいです。
    今現在私はMPDポートをONにしてMPDクライアントのCantata経由でlast.fmにscrobbleできており、やりたいことは実現できているのでどうしてもという要望ではありませんが、WEBUIだけで完結できるならそれに越したことはないので。
    余裕があれば検討していただけないでしょうか。
    よろしくお願いします。

  • @kens さま
    scrobbleについては言及があると予想していましたが、個人的には「要るかなぁ」と思いまだ調べてませんでした。
    APIで可能ならば実装について検討します。
    ただし個人アカウント情報をympdに保存して置かないとダメですね。

  • @パパリウスさん
    出遅れましたが、アンケートに回答いたします。(D) に一票です。

  • アーティスト情報の検索、ちょっと調べてみました。

    結論から言うと、アーティスト画像は現状取得できず。
    ただし、文字列情報は取得できます。

    http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=ARTIST&api_key=YOUR_API_KEY&format=json&lang=ja
    

    (lang=jaはアーティスト情報文字列を日本語で返す場合のみ付与)

    実は、現状カバーアートを取得しているURLは

    http://ws.audioscrobbler.com/2.0/?method=album.getinfo&artist=ARTIST&album=ALBUM&api_key=YOUR_API_KEY&format=json
    

    非常に似てますよね。
    artist.getinfoで返ってきたイメージのURLを見たところ、全て背景が灰色で白地の☆の画像でした。
    という訳で、アーティスト情報として文字列を表示するのはアリですが、画像取得には別な手段が必要ということになります。
    ちなみにEminemのアーティスト情報(冒頭)はこんな感じ

    Eminem(エミネム、本名:マーシャル・ブルース・マザーズ3世、Marshall Bruce Mathers III、1972年10月17日 - )は、アメリカ合衆国のヒップホップMC、プロデューサー、俳優。
    

    以下、かなりのボリウムで記載がありました。

    この問題はググってみるとほかの場所でも報告されており、その中ではspotifyのAPIが良いなどの記述もありますのでもう少し調べてみようと思います。

  • 使っていて一つバグを発見しました。
    「","を含むアルバム名を選択しても楽曲が表示されない」

    原因はplus向けに電文に追加パラメータを用意したため、電文のパラメータのセパレータ文字である","とアルバム名の","を誤解し内部で切り詰めしていたためヒットしていませんでした。
    次回のアップデートで修正版を添付いたします。ご了承ください。

    なお、途中でwebui-plusの開発状況や検討事項を書き込んでいたため月曜日あたりからアンケートの回答が無いようですが、
    パパリウス 様が締め切り宣言していないためまだ募集中だと思われます。
    日頃、フォーラムへの書き込みをしていない方もこの際にアンケートでデビューは如何でしょうか?

  • @sunatomo さま
    MPDクライアントのCantataも以前はアーティスト情報を表示するとlast.fmから取得したアーティスト画像が表示されていましたが、現在は背景が灰色で白地の☆の画像になっています。(ver.2.3.2)

    ver.2.4.0からはLast.fmではなく、FanArt.tvからアーティスト画像を取得するようになったようです。

  • @kens さま
    spotifyの場合、2段階取得(最初にアーティスト名からspotify特有のid, 次にidからアーティスト情報で画像のurl)のようだったので、
    これは良い情報頂きました。有難うございます。
    帰宅後に実装方法確認します。

  • spotifyのAPIについて(中間調査結果)
    APIを駆動するには以下の手順が必要のようです。

    ①アプリケーション単位でAPIにアクセスするためのクライアントIDとシークレットの2つを取得する。
    このときのspotifyへの登録は一般ユーザでも大丈夫そうです。

    ②前項で取得したIDとシークレットをHTTPのポストメソッドで送り、spotifyのサーバからアクセストークンを受領する。
    (トークンは有効期限あり)
    トークンは指定したアプリケーションがspotiyにとって正規のものであるため、APIへのアクセスを許可した証拠になります。

    ③トークンを入れてAPIを叩く
    ちなみにアーティスト情報を取得する際は、searchで良いようです。
    (typeパラメータにartistを入れる必要あり)

    ココまで判明しましたが、コード実装はこれからになります。
    必要な要素は以下の通りでしょうね。
    ・②のトークン取得のためにhttpポストで要求→レスポンスをトークンとして保存する機能
    ・トークンの格納と時間管理(有効期限を過ぎそうならば、新たなトークンを受領)
    ・トークンを入れてAPIを叩き、その実行結果を表示させる

    前にも書きましたが、もしかしたらwebuiのjavascriptには直接実装せずに、
    バッチ処理として利用者のライブラリのアルバムディレクトリにカバーアートとして保存する機能提供する方法で対応するかもしれません。

  • @パパリウス さま
    業務連絡です。NAS設定の複数化ですが、以下の通り試作してみようかと思います。
    ①とりあえず10個までサポート
    ②現状のSettingsプラグインの「NAS Settings」タイトル直後にメニュー選択を追加し、これを選択することで「どのNASの設定を追加・編集・削除したい」のかわかるようにする。
     プラグイン「OK」ボタンを押した際に、選択中のメニューのNAS番号でチューニングされて/etc/fstabが書換される。
    ③/etc/fstabの設定についてはwebuiで編集する場合は実際の設定行の一つ前に「#NAS Setting*」コメント行(は0〜9の数字が入る)が必須とする。
    ④NAS設定を消す場合は「delete」チェックボックスを用意し、現在選択中のNAS番号でチェックボックスにチェックがある場合は当該設定を削除する。
    もし、当該NAS番号が空欄の場合はチェックボックスは選択できなくする。
     (edit_fstab.shと別に削除用のシェルスクリプトを用意する予定)
     ③項の「#NAS Setting
    」行で削除対象を探して消す。

    これに伴って、以下の対応が必要だと考えています。
    ・/etc/fstab
     従来のコメント行「#NAS Setting」を「#NAS Setting0」〜「#NAS Setting9」に拡張
    ・mpd_client.h
     t_mpd構造体の拡張
     (nas, nasuser, naspwを2次元配列に変更)
    ・ympd.c
     main関数で/etc/fstabからNAS設定を読み込みし、各配列に保存
    ・mpd_client.c
     MPD_API_SET_MPDHOST電文にNAS設定を保存する場所を数字で示すパラメータを増設
     MPD_API_GET_MPDHOST電文では10個の/etc/fstabから取得した設定値を返すようにする。
    ・mpd.js
     NAS設定がメニューに合わせて変更出来るようにする。
     OKを押した際に現在選択中のNAS設定場所を追加で電文に入れる。
    ・index.html
     「NAS Settings」にメニュー項目の追加
    ・edit_fstab.sh
     /etc/fstabでの保存予定場所の追加対応

  • @パパリウスさん

    遅くなりました。
    リスト表示のアンケートです。

    自分は (B) です。

    とにかく曲数が多いので、いつも画面をスクロールしています。カバーアートは再生している曲について表示できていれば自分にとっては十分です。

    ジャンル分けの次がいきなりアルバムリストになるのではなく、ジャンル→アーティスト名→アルバム名で絞り込めるととても助かります。

    iTunesのカラムブラウザのような感じです。

  • @DYNA81 さま
    mpdでの楽曲管理・検索の仕様上、検索で返されるデータは楽曲・ディレクトリ・プレイリストのどれかになります。

    ジャンル分けでの絞り込み時にアルバムが表示されるのは、実際には選択したジャンルでの検索結果で返された楽曲を同一アルバム名でグルーピングして返しているためです。

    ご提示のアイデアを実現する場合、おそらく次のような方法になりますね。
    ・mpdからジャンル指定で結果を返す際に楽曲からユニークなアーティスト名のみ抽出して、これをリスト化する仕様に変更する。
    ・表示されたアーティスト名を選択した場合、「ジャンル」+「アーティスト名」で再検索を行い、その結果を「アルバム名」のリストで表示する部分を追加

    という訳で実装についてはちょっと検討してみます。

  • @パパリウス さん
    (D)です。
    主にPCからの操作で今の使用割合は9:1ぐらいですがカバーアート表示の時スクロールボタンで一気に最後までスクロールできるようになれば自分の中では使用頻度がぐんと上がると思います。
    元々自分はカバーアート表示派だったので、SMPDをメインで使うようになった当初はカバーアート表示ができないことで戸惑いがありましたが、音のすばらしさでいつしかそれも気にならなくなっていました。
    今回カバーアート表示ができるようになって逆にそのことを思い出したぐらいです。

  • 複数NASへの対応に関する進捗について
    本日時点でココまでは動作しました。
    ①/etc/fstabからNAS設定を受領し、内部の構造体に格納(10個分)
    ②ブラウザの「SETTINGS」でプラグインを表示した際にこの設定を受信し、
     その結果を表示できるようにしました。
    Screenshot from 2020-09-02 22-11-15.png
    (画面イメージは確定ではありませんがメニューでNASを選択出来る余地とdeleteチェックボックスが追加されたのがおわかりかと思います。)

    現在整備中は以下の項目
    ③OKボタンを押した際に、設定対象のNAS番号と削除フラグを追加パラメータとして渡せるように電文を変更(追加パラメータを1つとし、正数なら当該番号NASの追加・変更,負数なら削除にしようと思います)
    ④当該の電文を受け取った後、update_fstab.shで以下の2つの処理を行えるように修正。
     ・従来同様にNAS向けのチューニング+/etc/fstabへNASの設定を書き込みする(もちろん今回のために複数NAS対応)
     ・delete指定されたNAS設定を/etc/fstabから消す
    可能であれば今週末にwebui-plusの最新リリースで機能公開したいと思います。

  • sunatomoさん             CC.皆様

    複数NAS対応、ご苦労様です。この「神対応」に期待大です。

    現在はBlusOS、BluOS Controllerの組み合わせで複数NAS対応機能を実践していますが、いろいろと使い方のアイデアがあると思います。

    当方はNASではなく、サーバーPCをNAS代わりにしていますので、このサーバーPC上に複数の共有フォルダー(一つ一つが一台のNASとなるイメージ)を置いて、音源をジャンルなどのカテゴリ毎に個別に管理することも可能となります。

    具体的には、DSD音源とPCM音源で同一のアーチスト、アルバムが存在しているケースがあり、それをフォルダー分けしてPlayer側で選択するという使い方をしています。

    この他にもいろいろな使い方のアイデアもあって、楽しみです。例えば、音源のSSD容量が不足してきた場合、単一NASの考え方では不可能な、「容量追加」がとても簡単になりますね。現在は1TBくらいのSSDなら結構廉価なので、1TBづつ必要に応じて増強ができますのでめっちゃ嬉しい人も多いかも?

    「こんな使い方もあるよ~」という皆様のアイデアがございましたら、是非とも情報共有させていただきたく宜しくお願いいたします。

  • @ゴンザエモン さま
    「神対応」って言われるとちょっと気恥ずかしいですが、まずは動作するものを提供いたします。
    必要であれば、さらなるチューニングは先の段階で考えさせてください。
    (何らかのレスポンスがあるだけで、意欲が湧きます。ありがとうございました。)
    また、こういう形で従来の「1台NAS以外の使い方をしている場合」についても色々ご提示頂けるともっと良いアイデアが出るかもしれません。

  • 2020-09-06版のwebui-plus配信について

    お待たせいたしました。webui-plusの配信をお送りします。
    外観上の変更点は以下の通り

    ①pagination(ページ間遷移)への対応
     ライブラリの規模にもよりますが、主にグリッド表示でカバーアートを表示している際に機能を実感頂けると思います。
     とりあえずページ数は現ページ以外に5ページ分を文字で表示し、1ページ単位の移動と先頭・末尾のボタンを装備しています。
    ※pagination実装に伴い1点だけ注意があります。
     「ディレクトリ内総アイテム数」を求める必要がありループを多く回す必要が生じました。
     1ディレクトリ内に極端にアイテム数が多い環境の場合、今回の対応でレスポンスが悪化している可能性があります。
     このあたりは実際にお使い頂きどういう結論がいいのか考えていきたいと思います。(paginationを止めるか、ディレクトリ内部数量を各自調節頂くか)
    ↑上記の総アイテム数についてはキューの場合はlibmpdclientのコマンド一発で済みましたのでパフォーマンス悪化はないはずです。

    ②アルバム名に「,」を含む場合、選択できなかったバグの修正
     ブラウザ - ympd間の電文でパラメータの仕切り文字が「,」であったため。
    ③NASの複数登録・修正・削除に対応
     NASについては最大10台まで登録可能です。
     NASのマウントポイントは従来と同様/var/lib/mpd/music以下に「NAS*」(*には何も入らないか、1〜9の数字が入ります)のディレクトリです。
     また、SYSTEMプラグイン経由で登録した場合のパラメータチューニングも動作します。
     NASの登録後、必ず「UPDATE LIBRARY」を実行してライブラリ情報の更新を行ってください。
     なお、今回のパッケージアップデートにより/usr/local/bin/edit-fstab.shを書換します。
     新しい当該ファイルでは従来のympdで引数を受領しても同様の動作を行うように調整しましたが、バグ混入の可能性があるため、念の為以下のコマンドでバックアップを保存することをおすすめします。

    cd /usr/local/bin
    cp edit-fstab.sh edit-fstab.sh.org
    

    webui-baseやwebui-classicに戻した後でのedit-fstab.shのレストアは以下の通り。

    cd /sur/local/bin
    cp edit-fstab.sh.org edit-fstab.sh
    
  • sunatomoさん

    Multiple NAS Settingを早速試してみました。

    Raspi4サーバー上にてPCM音源とDSD音源とに分けて「2個のNAS」見合いとする環境です。

    二つのNAS設定、それぞれのアップデートライブラリ、各NAS上にある音源の再生などいずれも至極快調です。

    お疲れ様&ありがとうございました。取り急ぎご報告まで。

  • @sunatomo さん

    NASの複数台対応ありがとうございます、待ち望んでいた機能です。
    これまではNASごとにSDカードを用意して差替で対応していましたがこれからはそんな手間が必要なくなります、ありがとうございました。😊

    スクリーンショット 2020-09-07 14.46.51.png

  • @ゴンザエモン さま
    @flyingace さま
    無事稼働できたようで一安心です。
    当方環境では楽曲管理用NASは1台しかないため、
    「どのくらい活用できるのかなぁ」とは思いましたが、レスポンスが頂けて非常にありがたいです。
    複数NAS対応による音質への影響までは考慮していない(単純にNASを指定台数マウントするようにしただけ)ため、今後はもしかしたら改良が必要かもしれませんが是非お使いくださいませ。

  • 2020-09-14版のwebui-plus配信について

    !!注意!!今回お届けするwebui-plusについては従来にも増してテスト版の様相が強くなります。
    一通りのバグ取り・動作確認は行っておりますが、
    万が一動作不良が確認出来た時点で変更点を元に戻しますので
    それでも効果が見てみたい方のみおすすめします。

    本来ならば、last.fmやspotifyのAPI絡みである程度の成果が出た時点でリリース予定でしたが、
    別の意味で良い結果が出ましたので週末ではありませんがリリースいたします。

    外観上の変更点は以下の通り。
    ①paginationのバグ取り
     階層の上位でpaginationを表示したままで下の階層でもpaginationが表示される項目数の場合、新しいpaginationの設定に変わらないというバグの修正
    ②通知の最適化
     画面左下に通知が表示されますが、これのプログラム表記にミスがあったため修正。

    内部的変更点は以下の通り(今回のメインとなります)
    ①ライブラリとして使用してるJavaScriptファイルを非圧縮ファイルに変更
     パッケージのビルド時にCSSとJavaScriptのライブラリファイルをGoogle Closure Compilerで圧縮+1ファイル化するのですが、
     従来は圧縮済みファイルを圧縮していたためエラーが表示されていた。
     今回は配布用生ソースに変更した。
    ②一部ライブラリを可能な限り最新版にしてみた
     具体的にはjqueryをv2.2.4にしています。

    ③組み込みWebサーバでgzip圧縮対応
     開発者ツールの伝送時間ではおおよそ0.1秒程度ですが、
    体感的にはwebuiの初期表示が軽くなったと感じると思います。
    ↑
    今回はココの効果が個人的に大きいため、リリースしてみました。

    もしこれで不具合がなければ、Bootstrapをv3.4にしてライブラリはしばらく凍結したいと思います。