Google Play Music (以下GPM。実際にはアプリ(GPMDP)またはweb)には、いくつかの不満(改良したい点)があるのだが、いろいろな手段を組み合わせることで、全部ではないが、大分良くなった。以下に、概要を書く。

要改良点

  • 音量の正規化(再生ゲイン)対応 (特にラジオで、曲ごとに音量が大きく変わって不便なので、トラックモードだけでもいい)
  • 音量調整のステップを細かくしたい。今の半分程度に。
  • GPMDP
    • 「この曲が終わったら一時停止する」機能が動かない。
    • 英語での表示
    • マウスジェスチャ対応
    • ミニプレーヤーの改良 (情報量が少ない。使い勝手が悪い)
    • gmusicbrowser(GMB)との統合 (プレーヤーを1個にしたい)
  • リモコンで操作したい。

改良できた点

  • GPMDP
    • 「この曲が終わったら一時停止する」機能が動かない。
      • バグだったようだ。その機能のプログラム(src/renderer/windows/GPMWebView/interface/
        pauseAfter.js)を修正して、正常に動くようになった。
      • 基本的は、以下の修正をした。
        • Emitter.on('pauseAfter:show', ...)の(toast): pauseAfterに設定する値をPAUSE_AFTERからPAUSE_NEXTに変更した。
        • GPM.on('change:track', ...): 再生開始前は停める処理をしないようにした。
        • Emitter.on('pauseAfter:show', ...)のwindow.showToast: 停める設定後に表示されているダイアログ(?)で設定を解除すると、以後うまく動かなくなるので、解除する文字列(リンク)を表示しないようにし、解除はメニューで行うようにした。
      • PAUSE_AFTERは何に使うのか謎だし、手抜きなダイアログの処理には不満があるが、充分実用的だ。
    • 英語での表示 (暫定対応)
      • 以前書いたように、GPMのページのURLに"?hl=en"を追加した。
      • GPMDPの言語設定から自動で指定できるようにしたいが、そうしてもそれほど便利になる訳ではないので、やるなら、動的に変えられるようにしたい。
    • マウスジェスチャ対応
      • Linux用ジェスチャプログラムEasystrokeを使った。
      • これで、GPMDPでもブラウザと同様に、マウスジェスチャでページを移動(戻る・進む)することができるようになった。
      • 更に、Chromeでもジェスチャが使えるようになった(なぜか、右クリックが不便になるアドオンよりもずっといい)。
    • 音量調整のステップを細かく (9/16 11:48追記)
      • GPMDPが読んでいるGPMのページをVivaldiの開発者ツールで調べたところ、ページ内に音量調整用のスライダーの要素(id="material-vslider")があり、そこでステップが5に指定されており(下の例を参照)、その値を変更すれば、そのステップで動くことが分かった。
        • <paper-slider id="material-vslider" ... step="5" ...>
      • GPMDPの起動時にスライダーの要素を検索し、ステップを変更するようにした(下の例を参照)。
        • 要素の検索: slider= document.getElementById("material-vslider");
        • ステップの変更: slider.setAttribute("step", 新ステップ);
      • 新しいステップは2.5にした(整数でなくてもいいようだ)。
      • この方法は、GPMのページの作りが変わってしまったら駄目になってしまうが、その時はまた対応しよう。
      • また、この機能の有効/無効切り替えを、簡易に設定に追加した。

残りの実現に向けて

  • [済] 音量の正規化(再生ゲイン)対応
    • 基本的に難しいが、以下のような処理が可能かと思っている。この方式だとトラックのゲインにしか対応できないが、ラジオには充分である。
      1. 今の曲を再生中に次の曲のデータを取得して、再生ゲイン(≒最大の音量)を計算する。
      2. 計算した再生ゲインで再生音量を変える。(再生部を改造できない場合は、LinuxのGPMDPの再生音量を変える)。
    • 9/17に対応できた。(9/17 19:06)
  • [済] 音量調整のステップを細かく
    • GPMDPのソースを見て試行錯誤したところ、GPM(のweb部品?)では5%の倍数の音量しか受け付けないようだった。
    • それで、GPMDP自体の音量(LinuxのGPMDPの音量)を変えることを検討している。
    • この場合、新たな音量調整用のUIを追加する必要があるのが、面倒。
      • 元の音量調整機能を使い、GPMDP自体は5%ステップだが、LinuxのGPMDPの音量をうまく増減する(例:GPMDPで5%上げたらLinuxでは2.5%減らし、全体としては2.5%の増加とする)ことで、ステップが細かくできる気もする。が、表示と実際が乖離しそうな気もする。
    • 上記のように、簡易に対応した。(9/16 11:48)
  •  ミニプレーヤーの改良
    • 以下をやりたいが、ミニプレーヤーはGPMの部品のようなので、できるかは不明。
      • 曲名などを常に表示したい。ただし、再生制御は不要。(GMB同様にする)
      • キューを開けるようにしたい。あるいは、簡単に本体を開けるようにしたい。
      • 閉じて再度開くと位置が下がるのを直す。
  • リモコンでの操作
    • GPMDPでは、各種API(JSON, Web socket)やMPRISを使うことを考えている。
    • GMBもリモコンを使うので、切り替えを煩雑にせずに(可能なら切り替えなしで)併用できるようにしたい。そのため、実際に使うパターン(ユースケース)の検討が要りそうだ。
  •  GMBとの統合
    • 以下を検討しているが、必要(メリット)があるのか、良く考えたい。全体的なユースケースの検討が要りそうだ。
      1. ダミーの曲ファイルに曲やプレイリストのIDを入れておく。
      2. そこからGPMの曲の再生URLを取得して、GMB (→ GStreamer)で再生する。
    • GMBからGPMDPを制御できるようにするだけでも、いいかも知れない。

GPMDPはソースが公開されていて変更が可能なので、web版と比べて優位になった。

「この曲が終わったら停める」機能が動かない問題は、単純な間違いなのか、もっと奥深い問題があるのかは分からないが、とりあえず、うまく動いている。「こうやって直した」とGPMDPのフォーラムに投稿するといいと思うが、以前、別のフォーラムに投稿して情報を出したのに結局無視されたことが何度もあるし、この問題も以前に指摘されたのだが、なぜか"closed"(解決済み)になっているので、今は投稿する気が起こらない(もし欲しい方がいらっしゃったら、ここで公開します。ただし、その場合、公開するのは変更したソースコードだけですので、使うには開発環境(npm)が要ります)。

 

余談

GPMDPの言語はJavaScript(Node.js)なのだが、昔はブラウザで動くおまけみたいな言語だと思っていたのに、いつの間にあんなに発達したのかと驚く。最初から、あんなにまともなオブジェクト指向だったのだろうか? しかも、画面表示と関係のない処理すらやっているのは不思議だ(PHPも同様だが)。まるで、小さいガキだった親戚を久し振りに見たら、立派な大人になっていたかのようだ。

JavaScriptも馴染みがないが、Pythonより10倍くらい使いやすい気がする。

 

PS. GPMでいろいろな曲を聴いていると、結構、マスタリングが駄目な曲がある。例えば、途中で途切れてしまったり、曲間に「ザッ」という雑音が出るものがある。あと、ダイジェスト版のように短縮された曲もあった。膨大な曲数なので、たまに壊れていたり、おかしかったりするのだろう。まあ、買う前に分かるので、ありがたい。でも、それを指摘する簡単な手段がないのは、どうかと思う。まあ、Googleらしいが。

 

(9/16 11:48 音量調整のステップを小さくできたので、追記; 9/17 17:39 昨日の追記の日付が間違っていたので修正)

  •   0
  •   0

コメントを書く

名前    

メール 

URL