Archive for the ‘日記’ Category

昼に、かにみそさんのコメントを読んで、突然思い付いた言葉。タモリも言いそうだw

僕は、とにかく、いかに苦労しないか(例: 日常生活を楽にする、つまらないことを避ける)への努力は惜しまない。昔からそうだ。

だいたい、日本には「苦しんで成し遂げたことは(成し遂げなくても)尊い」のような風潮があるけど、全くおかしい。前にも書いたけど、同じことをするのなら、できるだけ楽にした方がいいに決まっている。第一にエコだろう。それに、散々苦労して、最終的にできなかったら無駄じゃないか。もちろん、自分の経験にはなるけど、全体としては無駄だ。

なんてことを、例えばお偉いさんに言ったら、どういう顔するのかね。おもしろそうだw

  •   0
  •   1

Google Play Music (GPM)の非公式アプリ、Google Play Music Desktop Player (GPMDP)。僕はそれを自分好みに改良(改造)しているのだが、ちょっとした問題が直らずに悩んでいた。

その問題とは、音量の正規化をするために、再生ゲインの計算処理の前に再生を一時停止するのが時々間に合わず、曲の頭が一瞬(長い時は数秒)再生されてしまうのだ。まあ、一瞬なので、聞かなかったことにすればいいのだが、なぜ起こるのか気になるし、音楽なので、余計な音はない方がいい。

それで、その遅れの原因を考えた。最初は、JavaScriptのスケジューリング(いろいろな処理を細かい時間で区切って実行すること)が今一つで、処理の切り替え間隔が長くなることがあるのではないかと想像していた。しかし、自分のプログラムで各処理の終了時刻を表示するようにしてみたら、かなり正確だった。例えば、100ms待つ処理は、ちゃんと100ms前後(誤差は数ms)待っていた。だから、JavaScriptの問題ではないことが分かった。

それで、GPMDPがGPMにアクセスするのに使っている、gmusic.jsというライブラリを読んでみた。最初は意味が分からなかったのだが、何度か読んだら、昨夜だったか、突然分かった。

GPMDPもgmusic.jsも、GPM (Google)にアクセスなんてしていないし、音楽だって再生していないのだ。アクセスしているのも再生しているのも、ブラウザ(GPMDPの場合はElectronで動くChromium)で動く(Google純正の)webページなのだ。そして、gmusic.jsは、それに「ちょっかい」出しているだけなのだ。例えば、再生中の曲名は、webに表示するためのHTMLから取っているし、音量は同じくHTMLの部品、スライダーに値を設定しているだけだ。要は、体のいいスクレイピングだ。

それから、曲の再生時間だってプログレスバーの値(HTMLに書いてある)を読んでいるだけだ。下図の灰色の部分は、GPMの曲の再生時間のプログレスバーの記述である。字が細かいが、 value="2917" や aria-valuenow="2917" は現在の再生位置(ms単位 →  約3秒)を、 aria-valuemax="350000" は曲の長さ(→ 約5'50" : Amazonでは5'52"となっているから、概ね正しい)を示している。

GPMの曲の再生時間のプログレスバーのHTML

問題の曲の切り替わりの判定も、同様にweb中の曲名の記述を監視していて、変わったかを判定しているのだから、そりゃあ、遅れるだろう。逆に遅れないのが不思議だ。プログラムを作っていて不思議に思っていたのだが、曲の切り替わりイベントが来たのに、現在の再生時間が0秒付近でなく前の曲の終わり付近のことがあるのは、そのせいだったのだ。というのは、曲名の更新と再生時間の更新は同時にはできないので、必ず時間差があるのだ。

だから、曲の切り替わりイベントで即座に一時停止したって全く無駄なことで、ブラウザの都合でいくらでも遅れる。だから曲の頭が一瞬出てしまうのだ。

この仕組みを考えついた人には感心するが、全く安直で汚い実装だ。将来性もない。Googleがwebをちょっと変えるだけで、全然動かなくなる。

結局、そもそもの問題は解決不可能になった。一時停止しないで済む方法を考えるしかない。GPMの同時再生制限のために、それは無理と思っていたのだが、今朝、その方法を思い付いた。

再生ゲインを計算するために曲を取得しているが、ゲインを計算するだけでなく、それを実際に正規化して、別のプレーヤー(例: VLC)で再生するのだ。それなら、音量の正規化だって、擬似的な再生ゲインで音量を変える(= 乗算する)だけの簡易なものでなく、ちゃんとした方式(例: LUFSを使う)でできるから一石二鳥だ。

その場合、GPMDPは、例えば、シーケンサーとでもいうのか、再生せずにいつも曲の先頭で停止していて、再生する曲情報を順々に僕のプログラムに提供するだけにするのだ。それなら結構簡単に動きそうな気がする(細かいことを詰めるのは、かなり面倒だが)。更に、全然詳しくないが、HTML5の音楽プレーヤーをGPMのwebに はめ込むなんてのができたら、(技術的に)おもしろそうだ。

そこまでするんだったらGPMDP(= GPMのweb)を使うのを止めようと言いたいのだが、GPMの曲の検索やリコメンドやラジオにアクセスするには必要なので、なかなか切れない。でも、いつかは、完全ではないにしろ、GMBと統合し(組み込み)たいという野望はある。

なんてことを考えて楽しくなったのだが、そもそも音量の正規化はラジオのために作っているのに、近頃は、僕好みのラジオを聴き尽くした感があることにも気付いてしまって、本当にやる意味あるのかと、早くもやる気を失っている。Googleよ、ラジオを更新してくれ!

 

PS. 以前も書いたが、結局、GPMDPは大したことはしていない。単に(webでなく)独立したアプリの体裁にしているだけで、庇を借りているだけのくせに母屋を持っている顔をしているようなものだ。だけど、プログラムの量はそれなりにあって、バグもある。更に、上述のような問題があるうえに将来性もない。悪いことづくめなのに、みんな喜んで使っているのは情けない。いつか突然動かなくなって慌てるのではないか。純正アプリがないから仕方ないのだけど、GPMの音楽を聴くだけならwebだって何も問題ないと思うのだが・・・

  •   0
  •   0

暇つぶしにニュースを見ていたたら、「なぜ「タモリの生き方」は憧れの的なのか」(リンク先は特に興味を持ったページ)という記事が目に止まった。正直言って、僕はタモリが嫌いだ。彼が「笑っていいとも」に出た頃から鬱陶しくなった。なんか見るのが面倒なのだ。あんな、当たり前の話を淡々としているのの何がおもしろいのか。

最初の頃(ハナモゲラ語とかイグアナの頃)は何も考えずに笑えたのに、「笑っていいとも」からは妙に常識人とか衒学者のようになって、堕落した感じがして、幻滅した。それは今までずっとそうだ。だから、今が本当の彼なのだろう。

が。前にも書いたけど、どういう訳か、(近頃の)僕の生き方が彼にちょっと近い感じで興味があるので、記事を読んでみた。すると、やっぱり近いものがあった。

やったことはすぐ忘れる。それが大事

って、見覚えありませんか?w その他のことも、まあ、賛成できる。でも、「意味を探すな」については、僕は「意味を考える(実際には、自分なりに想像や空想(しかも深い)をでっちあげる)から世界はおもしろいこともある」と思うし、重苦しい中にも楽しめることはあると思う。ただ、その後の、

「これでいいのだ」と現実を受け入れて、明日から何をすべきかを考えたい。

には賛成だ。なかなか、いつもはできないが。あと、緊張なんてしたくない。そんなの疲れるだけだ。いつも気楽がいいから、緊張する機会は避ける。

まあ、僕には、タモリのエッセンスは「忘れる」だ。

そして、一番重要なのは、そんな記事を読んで「ほう、じゃあ、見習ってみよう」なんて思う人は、百年経っても楽しく生きられないということだ。自分の生きやすいように生きなかったら、(そのために努力しなかったら ― しなくてもいいが)楽しい訳がない。

(本当のオチ: だから、これを読んでも真に受ける必要はないですw)

  •   1
  •   0

風邪ひいて調子悪いし、台風(今はまだ普通の雨)で外に出るのも億劫だしで、全くのプログラミング日和なのでw、昨日に引き続き、GPMDPの改良に余念がない。いや、余念があるから捗っているのかも知れない。僕の場合、別にプログラムをいじったりしたくはないのだが、音楽を気持よく聴きたくて、いろいろ考えるとできそうだから、仕方なくやっているのだ。

それはともかく、ついにGoogle Play Music (GPM)のプレーヤーGPMDPで音量の正規化ができた。我ながら大変強引な方法だし、いろいろ制限はあるが、とにかくできた。

方法は、基本的には昨日書いたとおりであるが、実際に作ってみると、細かいことがいろいろあったので、その辺りを書いてみる。

見つかった問題点

  1. 曲を再生中に再生ゲインを計算するために曲を取得すると、GPMは同時に1つの機器からしか再生できないので、次の曲の開始時にエラーになって、再生が停まってしまう。
  2. そのエラーダイアログの実装が汚く(まあ、元々がwebなのだから汚いというのは言い過ぎだが)、ブラウザ内のダイアログもどき(昔のワープロのようなもの)なので、xdotoolのようなツールで自動的に閉じるのが難しい。
  3. 曲の再生ゲインの計算が難しい。単純な最大値では聴感に合わない。実効値(どのくらい大きく聴こえるか ≒ 波形がどのくらい太くて黒いか)を求める必要が要る。
  4. GPMDPの音量のステップが段階的なので、細かい再生ゲインが反映されない。
  5. クラシックなどを聴く時のために、音量の正規化機能をon/offできるようにする必要がある。

実際に書き出すと少ないが、結構苦労した。

問題の解決

  1. GPMの同時再生エラーとエラーダイアログの問題
    • エラーダイアログが出たことを検出することすら難しいし、検出して自動で閉じるようにしても、音楽の再生中に勝手にマウスが動くのは鬱陶しい。
    • JavaScriptの機能で、ページ中にあるダイアログを探して、閉じようとしたのだが、なぜか、ダイアログもボタンも見つからず、どうにもならないので、一旦、後回しにした。
    • その後、手を抜きたかったので、曲の再生中でなく、曲間で一時停止して処理するようにしたので、最終的には、問題は起こらなくなった。それでも、処理はすぐに終わる(2秒未満: 下で訂正)ので、気になることは滅多にない。そもそも、正規化はラジオでしか使わないので、曲が間隔なしでつながることはないから、多少曲間が伸びても問題はない。(9/18 14:35 訂正: 実際に測定したら4秒前後だったが、ラジオのせいか、気にならないのは確かである。)
  2. 曲の再生ゲインの計算
    • 最初は最大値を使ったのだが、聴いてみると余り効果がなかった。
    • 値を調べると、多くの場合、最大値は100%近いので、ほとんどの曲で、正規化されていなかった。
    • 平均値を試したが、余りいい結果にならなかった。どういう訳か、平均値は小さいのに大きく聴こえる曲(The Cars "Heartbeat city": どういうことなのだろう??)があったからだ。
    • 処理に使っているffmpegにはloudnormという正規化する機能があるのだが、今のOSに入っている版には入っていないので諦めた。また、曲を正規化してもGPMDPでは再生できないので、余り便利でない。
    • 最終的には、ffmpegのastatsという機能で短時間の実効値(RMS)の最大値を取得することにした。理論的に正しいのか分からないが、聴いた感じでは良さそうだ。実効値を求める期間(時間)の設定が難しいのだが、昔のポップスを聴く限りでは1.75秒がいいようだ(ちなみに、この値は「異邦人」(1979)でチューニングした)。
  3. GPMDPの音量のステップが段階的
    • 今は音量を2.5%ステップにしているので、確かに細かい違いは反映されないが、聴いた感じでは分からない(細かい音量設定よりも、演奏の性質による違いが大きい)ので、今は保留している。
  4.  音量の正規化機能のon/off
    • 設定項目を追加すれば可能だが、いちいち開くのが面倒なので、再生メニュー(曲の右に出るもの)に追加することにした。
    • 追加はできたのだが、「ラベルの翻訳がない」という表示になってしまい、なかなか解決できなかった。
    • プログラム中のHTMLを良く見たら、<span>の属性(is="translation-key")で翻訳したラベルを使う指示をしているようだったので、それを止めるようにした(そんなものすごい機能があるとは、恐ろしい。脆弱性になるような気がするが、考え過ぎか)。
    • また、メニューでon/offするので、メニューのラベルが現在の状態を反映するように、設定変更時にラベルを書き換える(例: Onの場合は「無効にする」、offの場合は「有効にする」と表示する)ようにした(下図参照)。本来は、モードを示すアイコンなどを追加するといいのだが、それも面倒なので、このようにした。

再生メニューに音量正規化機能のトグルを追加

という訳で、随分苦労した気がするのだが、書いたらあっけないものだ。。。 実際には、Googleの検索と、そこから見つかった有用なページを書いてくれた方々に随分お世話になった。もし昔だったら、たった数日で、全く使ったことのない環境やプログラムをこんなにいじることはできなかっただろう。

それから、書く必要すらないことだが、もしWindowsを使っていたら、全く無理だったし、やる気も起こらなかっただろう。あれを使っていたら、どんなに普通のことでもなぜか大変になるから、ソフトウェアの正常な発展には大変な障害だとつくづく思う。

音量正規化の効果はおそらくあると思う(GPMDPの音量はちゃんと変化している: スライダーを表示させたままで見ていると、曲間でスライダーが自動的に動くのがおもしろい)のだが、気のせいかも知れない。上記のように完全ではないので、時々、小さく感じたり、大きく感じたりすることはある。ただ、以前は頻繁に音量を変えていたが、これができてからはほとんど変えていないので、やっぱり、効果はあると思う。

以下に、実装メモを書く。

  • 処理の流れ
    1. 曲が変わったイベントを待つ。 → 再生しようとしている曲情報が来る。
    2. 再生キュー(再生する曲一覧)を取得する。
    3. キューから曲のIDを取得(曲名、アーティスト名で検索)する。上記の曲情報には入っていないため。
    4. 計算済みの最大値が保存されていたら、使う。 → 9へ
    5. gmusicapiの機能を使い、IDよりstream URLを取得する。
    6. wgetにstream URLを指定して、曲を取得する。ただし、もしキャッシュにデータが残っていたら、再利用する。
    7. ffmpegのastatsフィルタでRMS(1.75s)の最大値を求める。
    8. 再利用できるように、いくつかの最大値を保存しておく。
    9. 最大値より、正規化するための音量値(%)を計算し、GPMDPに設定する。
    10. キャッシュ中の古いデータを消す。
    11. 1に戻る。
  • 制限事項
    • 再生ゲインはトラックモードのみ対応 (本質的に、アルバムモードには向かない。気長な人なら別)
    • 当初は、再生中にバックグラウンドで次の曲の処理をする予定だったのだが、暫定的に作ったものが結構うまく動いて、それ以上は面倒だったので、再生前にこれから再生する曲の処理をすることにした。
      • 上にも書いたが、処理は短時間(クラシックのような長い曲を除き、概ね24秒以内)に終わるので、曲間が長く感じることはない。
      • これならシャフルにも対応できるので、却って良かったのかも知れない。
    • 計算した再生ゲインの情報は保存しないので、過去に計算した値が再利用できない。(TODO)
    • GPM自体やwebページの仕様に大きく依存しているので、それらが変わったら、途端に動かなくなる(これはGPMDPも同様)。

 

PS. 前にも書いたが、どういう訳か、僕が聴くGPMのラジオで斉藤由貴の曲が頻繁に掛かる。今日は「悲しみよこんにちは」だ。好きな曲だが、今の彼女はそういう状況なのだろうか? というか、今でも彼女が現役でラジオ番組を持っていたことが驚きだった。

PS2. 本題とは関係ないが、GPMのおかげで分かったことを書く。

Winkの曲だとばかり思っていた「ふりむかないで」は、実はザ・ピーナッツの曲だった! そんな昔の曲にしては、全然違和感がなかったのがすごい。「ほう」と思った。(21:21)

PS3. この作業中に気付いたことがある。アプリをビルドして起動するのが意外に遅いのだ。もちろん何分も掛かる訳ではないのだが、一瞬ではないので、何度も繰り返すと結構イライラする。たかが(と言っては悪いが)JavaScriptなのに、ものすごく大量のモジュールが集まっているからなのだろう。そして、僕のPCが遅く感じたのは、これが初めての気がする。さすがに古くなったのかも知れない。(22:39)

(22:29 音量のスライダーが自動で動く動画を追加; 23:20 若干加筆・修正; 9/19 7:09: 実装メモ中の処理時間の訂正漏れ(4秒が正しい)を修正)

  •   0
  •   0

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

先日、新しいスイフトスポーツが発表された。意外なことに、某掲示板では好意的なコメントが多い。ようやくみんな気付いたのだろうか。悪い気分ではないが、僕は、今度のは、「ちょっと」だ。

悪くはないが、すごく良くもなくて(今の僕のを初めて見た時の、グッと来る感じはなかった)、今すぐに乗り換えたい気にはならない。なんでだろう? まずは、ホイールがかっこ悪いし、メーター周りがごちゃついているし、ハンドルも美しくないし、車内が赤ばかりで鬱陶しい。

それに、ついに3ナンバーになってしまった。(以前は誤解していたのだが)排気量が大きくないので税金は高くならないようだが、なんか堕落した感じだ。たった数cm(たしか3cm程度)、タイヤの間隔(トレッド)を広げて、本当に何かの効果があるのかな? 実際には、ヨーロッパ向けと同じ車体を使いたかっただけではないか。

車体のデザインも、前の方がいいと思う。でもまあ、良くある、馬鹿みたいに大きな羽根とかボコボコしたボディなどで加飾されているスポーツ車(特に、群馬のS社や技術馬鹿指向のH社)よりは百倍いいw

とは言え、トルク重視のエンジンなど、メカについては期待できそうだ(ただ、エンジンは、今度のK型は分からないが、前のM型は気持よく回って好きだ)。そして、値段も随分頑張っている(前のより10万円くらいしか高くなってない)のは好感が持てるし、「良くそんな隙間に収まる値段を見つけたものだ」と感心する。だから、来月のオイル交換の時にディーラーにあったら、試乗させてもらうつもりだ。

ただ、今の気分としては、「普通のスイフトで満足できれば、それでいいじゃん」と思っている。別にパワー(速さ)なんて要らないし、かっこいい(つもりの)車体も不要だ。シンプルな車体で、気持よく走れればいいのだ。だから、普通のスイフトが気持ち良くて6MTがあれば、候補になり得る。本気だ。

今調べたら、普通のは5MTだ。でも、それだっていいような気もして来たから、不思議なものだ。グレードはRSじゃなくてXLがいい。あとは、あの派手な色さえあれば完璧なのだが・・・

更に調べたら、5MTの5速のギア比は6MTの6速と同等なので、僕が欲している、高速道路でのエンジン回転を抑える効果は見込めそうだ。あとは、走りの気持ちよさだ。前のモデルのCVTは最低だったが、MTではどうだろうか? 別に、乗り換える気は全然ないのだがw

PS. 題は本文と関係ありません。単なる思い付きですw が、今思い付いたこじつけですが、「すごくて人気ある(けど、手間の掛かりそうな)サーバルより、普通の家猫で充分可愛いじゃん」ってところでしょうか。

PS2. 昨日、カタログが届いた。そうしたら、普通のスイフトのカタログも欲しくなった。主に、(webには余り載っていない)うたい文句を読みたいのだ(そんなの読んでも、実体は何も変わらないのだが・・・)。それから、アクセサリーカタログを見たら、普通のスイフト(XLやRSなど)にはオプションでスペアタイアが載ることに気付いて、「やっぱり次はそっちかな」と思った。

スペアタイヤのない不安感が、ものすごく嫌なのだ。修理キットを使うとタイヤの内側が駄目になるというから、使わずにエアポンプでしのいで修理工場まで行くしかないのは、やっぱり不安だ。そもそも、不器用なので、修理キットもエアポンプもちゃんと使えるか心配ですらあるw

そういう不安があっては、いくら車の性能が良くたって、本当に気持ちいい・楽しい運転はできないと思うのだ。とはいえ、例えば、高速でまともに走れる性能がSportでないと得られないのであれば、選ばざるを得ないだろう。 (9/16 6:20)

新型スイフトスポーツ(2017)のカタログ

  •   0
  •   0

よく、スポーツが得意な人は「脳味噌が筋肉」だと揶揄されるが、それは単なる思い込みとか決め付けで、単に個人の特性(というか、劣性)のようだ。ちょっと前の話だが、有名な(僕は名前しか知らない)ジャズの奏者が、演奏会で子どもに暴力をふるって演奏を止めたそうだが、

なんだい、このクソジジイ

って思った。

音楽家は音楽で人を動かせなくては、(そこまでは無理としても、動かそうとしなくては、)存在価値がないと思う。その場におらず、ビデオも観ていないから、細かいことは分からないが、そもそも、子どもが乗って演奏しているんだから、いくらだってやらせておけばいいと思う。予定より時間が伸びたって、どうせ、何日間も続くなんてことはないから、別にいいじゃないか。何がそんなに嫌だったんだろうと思う。下手だったのだろうか。プロの演奏家なら、一緒になって演奏して、うまく終わりにすることだってできたのではないか。

そして、(上だけならありきたりな考えなので、書くこともなく、以下が書きたかったから投稿するのだが、)昨日、ふと、「戦場のメリークリスマス」(1983)で、俘虜(デビッドボウイ)が軍人(坂本龍一)にキスして蛮行を止めさせた光景を思い出した。キスはないとしても、頭を撫でるとか抱擁するとか思わぬことをすれば、おだやかに終わった気がするのだが、現場を観ていないから、本当に可能かどうかは分からない。でも、殴るのはないだろう。

PS. 書くきっかけはもう一つあった。この記事だった。

  •   0
  •   0

試用期間はあと1週間くらい残っているが、もう、音楽配信サービスはGoogle Play Music (GPM)で決まりだ。

実は、この週末辺りにも、サービスに入る意味(価値)を再確認したり、「実は、(良く調べれば)Spotifyがいいんじゃないか?」と思ったりした。それで、いろいろ調査したために、今日はドライブを延期する羽目になってしまった。

まず、僕にとっての音楽配信サービスの用途・メリットは、以下のようなものだ。

  • 新しい曲を探すツールとして。
  • クラシックの特定の曲の好きな演奏選び用
  • (昼休み、帰省、旅行・出張時に)暇な時に聴く
  • 「無制限の試聴」、あるいは、「無駄にCDなどを買うのの防止」
  • ダウンロード版を買う前のマスタリングや音質の確認用

これだけでも充分と思う。が、最初に大いに期待した、CDの置き換え(撤廃)については、キャンディーズや小泉や昔のRushがないなど、意外に揃ってないので、僕にとってはまだまだである。でも、事務的な問題だろうから、あと数年で完備するのではないかと思っている。

あと、車で聴きたいものやずっと手元に残しておきたいものは買う必要があるのも、最初の期待からは外れる。ただ、購入前の確認ができるので、以前諦めた、CDからダウンロード購入への移行が再び可能になるので、悪いことばかりでもない。

よって、音楽配信サービスに入る価値は充分あるという結論になった。

次に、「本当にGPMがいいのか」という点でも迷いが生じたので、再度、Spotifyを使って機能を比較したり、レパートリーの広さを比較し直してみた。

まず、機能の比較については、概ね以下のようになった。

Spotify

  • 長所
    • 書誌(初出年など)が正確
    • 100以上の検索結果が出る。
  • 短所
    • 行動(例: 聴いた曲)やプレイリストをデフォルトで公開する(例: ユーザー名で検索できて、聴いた曲が表示されてしまう)。
    • 日本の懐かしいポップスなどのラジオ・プレイリストはほとんどない。
    • アルバム情報の編集ができない。
    • 純正アプリは駄目(随分前から要望があるのに、改良する気がない)
      • 日本語の入力不可
      • 表示テキストのコピー不可
      • ジャケット画像の拡大表示不可 (再生中のものだけ可)

GPM

  • 長所
    • 日本の懐かしいポップスなどのラジオが充実している。
    • アルバム情報の編集ができる。
    • 行動(例: 聴いた曲)やプレイリストをデフォルトで公開しない。
    • リコメンドが結構いい。
  • 短所
    • 書誌(初出年など)が不正確、情報が少ない。
    • 外国の曲の邦題、カタカナ表記の外国アーティスト名が嫌 (例: GPM ⇔ Spotify)
    • 100以上の検索結果が出ない。
    • Linux用純正アプリがない。Webでの使用が基本。
    • サードパーティのアプリ(GPMDP)はまあまあ(というかイマイチ)。

明らかにGPMが優位だが、特に、日本の懐かしいポップスへの対応(これはSpotifyには永遠に無理だろう)、プライバシーへの配慮(SpotifyはGoogleよりひどい)、アプリなどに見られる見識の普通さ(Spotifyが低過ぎる)、そして、(将来)YouTube Redも使えることが期待できるのが、僕にとっては重要だ。

なお、GPMの短所のほとんどは自力で解決できる見込みが立った。

  • 書誌(初出年など)が不正確 → SpotifyやDiscogsやAllMusicなどで調べる(なお、MusicBrainzはほとんど役に立たない)。
  • 邦題、日本語(カタカナ)の外国アーティスト名 → アプリでなく、webなら言語を指定できるので、英語表示にできた(URLを https://play.google.com/music/listen?hl=en のようにする)。こうすると、日本のポップスも英語やローマ字になってしまうが()、外国の音楽が英語や原語で表示されることのほうが重要なので、英語表示にすることにした。なお、どういう訳か、英語表示でも日本語で表示される日本のポップスがある。
    • (9/13 21:40追記) その後、web(ブラウザ)であれば、タブを2つ使うことで、英語と日本語の両方を表示することができることに気付いた。
  • 100以上の検索結果が出ない。 → サードパーティのライブラリ(gmusicapi)を使ったプログラムを使って(作って)、かなり多くの検索結果が出せるようになり、GPMのレパートリーの広さをかなり正確に調べることができた(後述)。
  • GPMDPがイマイチ。 → 中身はwebそのもので、GPMDPは外枠を作っている程度で、バグもあるので、リモコンを使うなど外部と連携させる場合などを除き、使う意味は余りない。逆に、ブラウザでweb版を使う場合、マウスジェスチャでページ移動ができるので便利だ。ただし、Vivaldiではミニプレーヤーが出ない問題があるが、元々それほど有用でないので、大きな問題ではない。
    • (9/13 21:36追記) その後、GPMDPでマウスジェスチャが使えるようになった。Easystrokeというソフトを使い、戻る(キー: BS)と進む(キー: Alt+→)にジェスチャを割り当てた。
    • また、暫定的だが、英語表示ができるようにもできた()。具体的には、~/.config/Google Play Music Desktop Player/json_store/.settings.jsonの中のlastPageというメンバにGPMDPが最後にアクセスしたページのURLが格納されているので、その"?"の後に"hl=en&"を追加して(例: "https://play.google.com/music/listen?hl=en&pli=1#/home")、英語版にしてGPMDPを起動すれば良い。
    • GPMDPは資料やソースが公開されているため、プログラムの変更や内部データへのアクセスがしやすそうなので(実際、上記の暫定英語表示はそれでできた)、改良(カスタマイズ)のベースにしようと思っている。

最後に、レパートリーの広さを再確認した。以前調べた時は、GPMは100以上の検索結果を出さないため、曲によってはSpotifyの方がアルバム数が多い(多く見える)場合があったが、今回は、調べたすべての場合で、大差でGPMの方が多かった。以下に結果の抜粋を示す。

  • モーツァルトのピアノ協奏曲 第23番 (K.488)のアルバム数
    • GPM(以下、G): 459
    • Spotify(以下、S): 211
  • ラフマニノフのピアノ協奏曲 第3番のアルバム数
    • G: 388
    • S: 101
  •  ビートルズのアルバム数
    • G: 52
    • S: 23
  • クイーンのアルバム数
    • G: 57
    • S: 35
  • グールドのアルバム数
    • G: 231
    • S: 201

もちろん、音楽は数が本質ではなく、GPMには重複が多そうだが、それにしても違いが大き過ぎるので、レパートリーの点でSpotifyを選ぶ理由はないだろう。

なお、GPMは検索結果が100までしか出ないため、普通に使っていては、上記のような広大なレパートリーをフルに活用するのは難しい(例: 知らない演奏者は検索に指定できないから、存在を知ることができない場合がある)。この点は、GPMの検索の仕様が改善されるまでは、後述のような外部の検索プログラムを使う必要がありそうだ。

以上より、僕にとってはGPMがベストで、Spotifyは次点以下で、言ってみれば、GPMのサービスが終わってしまった時に「仕方なく入る」程度のものとなった。

 

PS. 近頃、なぜか、GPMのラジオ(日本の懐かしいポップス関係)で斉藤由貴の「卒業」がよく掛かる。今日で通算6回目だ。不倫スキャンダルに同期しているのか、単に人気があったから良く掛かるだけで、考え過ぎかw (9/11 19:41)

 

参考: gmusicapiを使ったGPMの検索プログラムについて

gmusicapi-scriptsのgmsearch.py(GPMの自分の「音楽ライブラリ」を検索するプログラム)を改造し、gmusicapiのMobileclient interfaceの検索関数(search())を使って、GPM全体から検索できるようにした。search()では、曲名以外にアルバム名などでの検索結果も取得できるので、アルバム名を使って、ある曲が含まれる、あるいは、あるアーティストのアルバム一覧が取得できるようにした。改善すべき点は多いが、以下のような形式で検索を実行する。

グールドの全アルバム(共演は含まず)を検索する場合: python3.5 gmsearch_b.py -u User -p Password -Q "Glenn Gould" -t al -f 'artist:^Glenn Gould$' -y

↓ 出力例

1. Glenn Gould "Bach: The Goldberg Variations, BWV 988 (1981) - Gould Remastered" (2008) [-, B6nyodkgdszrcbq2kih4ebl3qry]
:
230. Glenn Gould "Glenn Gould plays Richard Strauss: Ophelia Lieder op. 67; Enoch Arden op. 38; Piano Sonata op. 5; 5 Piano Pieces op. 3" (2012) [-, Bi4h5u7bbiqaca2mwgxtqah3zyq]

※行末の英数字は、GPMでのアルバムID。

このプログラムは、webやアプリでは省略されている曲やアルバムなどの情報(例: ディスク番号)や情報の内部形態をそのまま取得できるので、大変有用だと思う。ちなみに、この情報には再生ゲインは入っていないので、近いうちにGPMが音量の正規化に対応することはなさそうだ。

なお、search()の結果の最大数は、gmusicapiの資料では100だが、Noneを指定することで、最大1000までの結果が得られることが分かり(ただし、結果が長くなり過ぎると、途中で切れてエラーになる)、レパートリーの比較に役立った。この隠し機能がいつまで使えるのか分からないが、なかなか便利なので、なくならないで欲しい。

PS2. 今回、gmusicapiなどが使っているPythonというプログラミング言語を使う羽目になった。Perl以上に"awful"で、「使ってられない!!」と思った。が、流行っているようなので、まあ、僕が古いのだろう。それにしたって、インデント(段付け)をプログラムの構造にするって、本当にいい(論理的・効率的)のだろうか?

僕は、とてもおかしいと思う。というのは、そもそも、普通のプログラミング言語はテキストなのだから、段付けのような「見た目」よりも、論理的な構造で成立するものだと思うし、(目に見えにくい)空白の数の違いや空白とタブの混在にいちいち文句を言われたら、書く時に必要な注意が増えてストレスが高まると思うのだ。もちろん、プログラムの見た目を綺麗にすれば、分かりやすくなるから、それ自体はいいことなのだが、強制されたら苦痛だ。

段付け以外に奇異に感じたのは、ifやelseの行末の":"だ(下の例を参照)。「何これ?」って感じだ。空白の数(=見た目)で構造を定義しているなら、改行だってそのように使えばいいはずで、行末の印なんて冗長だと思うのだが、何か理由があるのだろうか?

if [type_mns[type]]:
    type_mn= type_mns[type]
else:
    type_mn= type_mns["so"]

※おそらく、上のプログラム自体はもっと簡潔に書けて、if自体不要になりそうだが、記述例として挙げた。

あと、Linuxなどの問題ではあるが、Pythonはバージョン間の違いが大きいせいか、特定のバージョンでしか動かないプログラムがあるので、複数のバージョンをインストールせざるを得なく、それぞれを区別しないと、プログラムがうまく動かない(上の例で"python3.5"と陽に書いているのはそのせい)とか、あるバージョンをアンインストールすると、システムが正常に使えなくなる問題があって、正直言って手を焼いている。

  •   0
  •   0

正直言って、ボブが怖くてたまらない。ボブ・ディランでもボブ・ゲルドフでもボブ・サップでもない(と書くのはオヤジ的だが)。女性の髪型だ。もう、ボブの人が居るだけで夜も眠れないくらいだから、僕を弱らせるには、ボブの人を沢山連れてくればいいw

何がきっかけでそんなに好きにこわくなったのかが分からないのだが、会社帰りに考えてみたら、どうも、「探偵物語」(1983)の薬師丸ひろ子ではないかと思った(似たようなことを前にも書いたかも知れない)。そんな何十年も前の映画での印象が、刷り込みのように強く残っているのだから、当時の彼女の魅力はとてつもないものだったのだと思う。

そんなボブ僕は、近頃、ひかれる人を見ることが多い。まずは、通勤途中に見る、職場まで歩いているらしいおばさんだ。おばさんといっても僕よりは若く、恐らく30代後半から40代前半だろう。髪型は完璧に宇多田ヒカルで、後ろから見たら、それはもうグッと来る。小柄でぽっちゃり系で、いかにもおばさん的に余りおしゃれじゃなくて、やる気なさそうにとことこ歩いているのだが、そこも却ってたまらない。

次は、通勤途中に寄るコンビニの喫煙所でたまに見る女性だ。上のおばさんよりは若くスリムで、服装もかっちりしていて、キャリア・ウーマン的な雰囲気だ。今までは後ろ姿しか見たことがなくて、是非顔が見たかったのだが、今朝見られた。が、残念ながらイメージと違っていて、ちょっとがっかりした。細い顔で、ちょっと神経質そうな感じだったからだろうか。

そして、極めつけは、絶賛炎上中の青い服の議員である。あの髪型もボブというのか良く分からないが、とにかくグッと来る(ロケットニュースの記事の「イケる」ってのは僕の「グッと来る」と同じなのか不明だが、何となく同類の気がするw)。おそらく、丸いイヤリング(薬師丸も着けていた)が僕にはポイント高いのではないだろうか。

あの人は、以前のガソリン疑惑を偉そうな態度を取りつつうやむやにして逃げ切ったつもりで居たようだが、その時から、いい加減で全くいけ好かない奴だと思っていた。今回も同様に、同じパターンで逃げようとしているので、またかと思った。が、仕事を別にすれば、なかなかのものである。

僕は、人の背景とか経歴とか性格とか私生活などと仕事は無関係で、ちゃんと結果を出せばいいと思っているので、その議員についても、報道が事実かどうかはどっちでもいいのだが、仕事すら駄目で、全く見るものがない。ただ、vice versaというのか、仕事はどうでもいいから、外見でひかれることがあってもおかしくないと思う。

それから、逆説的だが、その議員は実は根っからの悪人ではないのかも知れない。悪人になり切れないから、さまざまなボロを隠し切れないのだ。そして、勉強はできるのだろうが、地頭が悪いから、逃げ方も下手なのだ。まあ、単なる想像だ。そのことと、本業も、グッと来ることも、何も関係ない。

他に、今思い出したのだが、卓球の石川も気に入っている。悪いけど、卓球には興味がないので、勝敗とかランキングはどうでもよくて、とりあえず、顔を見るだけで元気が出る。それから、「ボブ」で検索して出て来た安達祐実も、近頃はなかなかだ。

と、今回は珍しく、気分転換に(?)下世話なことを書いた。

 

PS. 「グッと来る」は、日記では別の書き方をしているのだが、さすがに直接的でどうかと思ったので、表現を変えた。

PS2. 石川のことを書いたら、きっとn@okiさんも賛同して下さりそうだと思い出したw

PS3. さっき、オチを思い付きました。「お前は本当は何が恐いんだ?!」と聞いて下さい。そうしたら、

ポニーテールが恐い

と答えますw

おあとはよろしいでしょうか? (9/10 15:47)

  •   0
  •   1

先日、ちょっと気付いたこと。今は長く書くのが面倒なので、未完成で投稿します。

☓ 「みんな苦しいんだ。君だけ抜けるのは駄目だ。我慢しろ。」 ← 言ってる人は超能力者?w 言っている人が苦しいから、他人が逃げるのが我慢ならないだけなのだろう。

(9/8 6:44追記) 仮に、そいつが、みんなが苦しい証拠を持っているなら、それは明らかに、「みんな」にとってひどい状態である。それを改善するどころか、耐えられない人(みんなの気持ちが分かるなら、その人のことだって分かっているはずだし、そうでないなら、最初の発言はデタラメだ)を拘束するのだから、そいつはとんでもない悪党とか能無しとか"S"だということになる。更に、多くの場合、苦しい原因はそいつが作り出したのだから、全く救いようがない。

△ 「みんなと一緒に頑張ろう。みんなのために!」 ← 言ってる人一人で頑張るのが嫌だから、他人を巻き込みたいのだろう。しかも、大抵の場合、最終的は、そいつが最も得をする。

なにが「みんな」だよ、「自分」だろうが! エゴイストめ。

日本は昔から、一般人に精神論で無料で負担を強いたりリスクを取らせて、その利益を貪る権力者が多かった。そうやってズルをして発展して来た。国民性なのか洗脳なのか、一般人は文句を言わなかったので、やりたい放題だった。今はそれができなくなって、どんどん落ちぶれているのだ。

 

PS. 子どもの頃は、「巨人の星」とかのスポ根物は好きだったが、今は、あれは大変有害だったと思う。なぜ、何かを成し遂げるのに「血のにじむような苦しい思い」をする必要があるのだろうか? 苦しい思いをしなければ価値がないのか? もっと楽に簡単にできる方法があるなら、それでいいではないか。なければ、まずそれを探す方が生産的じゃないか? 楽な方法が見つからなければ、止めて別のことをしたっていいじゃないか。

  •   2
  •   0