Archive for 9月, 2017

プログラムの「詰め」というのは、とにかく手間と時間が掛かる。大体、中心となる部分を作るのの10倍以上の時間が掛かるのではないだろうか。プログラムを使い物にするにはどうしても必要な作業のだが、退屈だし疲れるので、余り好きではない。それでも、なかなかうまく行かなかったことを打開するような、ちょっとしたアイデアがひらめくことがあって、それが本当にうまく行った時は楽しい。だから、いじりだすとなかなか止められない。仕事と違って、納期も予算もないのが困るw

一方、世の中には、すごいアイデアを思い付いたら、素早く目を引くデモ的な物(ポップ音楽だったら、サビとかデモ版)を作って、有名になったりお金をせしめたりしたら手放して(どこかに売って)、トンズラする(あるいは、別の物を作り出す)、スマートな人が結構居るようだが、無責任で嫌いだ。確かに、いいアイデアを出せるのはすごいと思うが、「最初にちょろっと書くのは誰だって楽しいんだよ!」とか「もう少し面倒見ろよ」と言いたくなる。

という訳で、日々続けているGPMDP (Google Play Music Desktop Player)の改良(もはや改造と言った方がいいだろう)は大分いい感じになってきた。まだ詰め切れていない点や不具合や抜本的な改良案もあるのだが、おおよそ7.5割くらいの出来になって、普通に(これには「変わったことはしてはいけない」という意味もあるw)音楽を聴けるレベルになった。具体的には、GMBだけで聴いている時と使い勝手での違和感がほとんどなくなった。例えば、GMBのリモコンで操作できるので本当に便利だ。実際に、昨夜からは、(実装・修正するだけじゃなくて)GPMの曲を聴くのに使っている。

問題だったユースケース(GPMDPをどういうふうにGMBと統合・機能分担して使うか)も、作業しているうちに大分詰められた。基本的には、GPMDPは曲の検索に使い、GPMDPの再生ボタンを押したら、実際の再生や再生の操作はGMBで行おうと思っている。まだ完全にシームレスになったとは言えないが、なかなかうまく統合できたと思う。

今週はさまざまな改良や修正をしたのだが、主にGPMDPとGMB (gmusicbrowser)との連携動作(例: 曲の追加や変更の同期)に関するものなので、見た目では、先週と比べて目立った違いは余りない。大きな違いは、(実際に曲を再生している)GMBで次の曲に移ったことがGPMDPにも伝わって、曲情報やジャケット画像が更新されることだ。以下にデモ動画を置くので、興味のある方はご覧頂きたい。

画面左半分はGMBの、右半分はGPMDPのウインドウである。GMBで再生中の曲が次に変わると、少ししてから(その次の曲の取得と処理の時間: これは如何ともし難い)GMBにその次の曲が追加され(画面左下、5曲目)、GPMDPの曲情報やジャケット画像(画面右中央)が更新される。

下の動画は、力技でやっているうえに、まだバグがあって、(いつ何が起こるか分からず、)ドキドキする機能なのだが、GMB(画面左下)でリスト中の前の曲をダブルクリックして移動した場合でも、GPMDP(画面右中央)も戻るようになっている(戻るのが遅いのは愛嬌w)。もちろん、取得されている範囲で、先の曲に進むこともできる。

リストの最後(7曲目)に2曲目の曲が追加されるのはバグである。難しい。。。

冷静に考えれば、再生中の曲のGPMDPへの同期なんて、音楽を聴くには不要な機能で、本当に飾りなのだが、「おもしろそうで、不可能でないならやってみたい」という、技術者の無駄なこだわりがあって実装したw

(10/1 6:38 わずかに修正)

 

PS. プレーヤーにGMBを使ったのは正解だった。最初は単純な再生だけを考えていたので、alsaplayerなどの軽いものにしようかと思っていたのだが、機能的に不十分な点があったので、最初からGMBで試した。また、GMBはコマンドラインにPerlのプログラムを指定して実行できるという、夢(麻薬)のような機能があり、それでGMBの内部データにアクセスできるので、かなり役に立っている。もう開発は停まっているようだが、セキュリティホールになるので、公開版に入れ続けるのは難しいかも知れない。

PS2. かなりハードルが高いのだが、将来的には、GPMDPじゃなくて、ブラウザのGPMのページから直接GMBと連携できないかと思っている。GPMDPが必要なのではなく、GPMのページ内の要素にアクセスするために使っているだけなので、ブラウザのアドオンか何かでできるのではないだろうか。

同時に、可能な限り機能を外部に出して、JavaScriptの部分を減らして開発効率を向上させ、GPMのページ構成になるべく依存しないようにもしたい。

とは言え、本当にやりたいのは音楽を聴くことなので、苦労してそこまでやることもないかとも思っている。

(10/1 17:44追記) と書きつつも、(だるくてドライブを止めたため、)暇だったので、ちょっとだけ試してみた。一番最初に気になった、GPMのページ中の再生ボタンを押したらGMBに曲を送れるようにする時に必要な、ボタンのイベントハンドラを変更できるかを試した。

最初は、安直に、ローカルのHTMLでiframeでGPMのトップページを読み込んで、JavaScriptで書き換えればできるだろうと思ったのだが、駄目だった。それから、いくつかのライブラリやAJAXやjQueryまで試したが、駄目だった。

どうも、セキュリティ上の制限のようで、ローカルのファイルからGPMのサイトを呼び出すのが駄目なようだ(おそらく、元がローカルファイルじゃなくても、サイトをまたがるようなことが駄目なのだろう)。それを回避したかったのだが、できなかった。この制限は「同一生成元ポリシー」というものらしく、かなり昔からあるようだ。

それで、一旦、ローカルのHTMLを使うのは諦めて、(GPMDPを改造して使う前提で、)GPMのページ中の再生ボタンのイベントハンドラを変更できるかを試した。JavaScriptには疎いので、それすらも苦労したが、できた。getElementById()で再生ボタンの要素を探して、onclickメンバにハンドラを設定すれば良い。以下のようにすると、GPMの再生ボタンを押すと関数click_func()が呼ばれる。

var elem= document.getElementById("buttonContent");
elem.onclick= click_func;

function click_func() {...}

onclick(onClick)は属性ではないとのことで、setAttribute()で設定しても呼ばれないことに気付かず、苦労した。あと、ボタンの本来のハンドラが依然として有効(どうやっているのか不明)なのがちょっと気に入らないが、まあ、細かいことだ。

(10/2 7:08追記) その後、GPMの再生につながるボタンは山ほどあるので、それらを全部書き換えるのは現実的でないことに気付いた。それらの呼び先を修正するのも困難なので、やっぱり、低レベルなところはGPMDP(実際には、その下位のライブラリ)に依存するのがよさそうだ・・・

  •   0
  •   1

先日の朝のコンビニでの話。

隣に居た車は、薄汚れた感じのしょぼい軽だった。ドライバーは、ハンズフリーのイヤフォンで、ニヤニヤ笑いながら電話をしていた。

が、エンジンを掛けたら、やけに低音の迫力がある音だった(要はうるさかった)。きっと、マフラーを改造しているのだろうと思った。

が! その車が出る時にちらっと見たら、ポルシェだった。全然オーラがなかったので、軽と思い込んでいたのだ。そういう車(それなら逆に好感が持てるが)なのか、軽薄そうなドライバー(出る時もニヤニヤ)の問題だったのか。

 

PS. 似たような話がもう一つあった。朝、どうしても汚れた白いカローラにしか見えないセルシオをたまに見る。「なんだかなあ」である。 (9/30 6:52)

  •   0
  •   0

半年くらい前から、LinuxでのテキストエディタにはAtomを使っていたのだが、全然良くないことに気付いた。僕の使い方(変なプラグインを入れたせい?)が悪いのか、頻繁に遅くなる。開いているファイルが多いと、ひどい時には数分間固まるし、そうでなくても、文字を打ち込むだけでも遅いから、GPMDBの改良作業の足かせとなって、大変イライラしていた。更に、それ以外に、山ほどプラグインを入れないと普通のエディタのようには使えない(まだ普通のに劣ることがある)など、基本的な機能が劣っている。

それで、前に使っていたjEditに戻ろうかとも思ったのだが、日本語のインライン入力ができないので(いろいろやればできるとは読んだが、面倒なのでしない)却下し、いろいろ試した結果、Kateにすることにした。忘れていたのだが、インストール済みだった。

が、KateでなくjEditにした時の記事を読んだら、Kateは「ハングした」とか書いてあったので、やっぱりjEditに戻ろうと思う。ありがたい、これも消していなかったので残っていた。今度は日本語のインライン入力の設定をしてみようか。

  •   0
  •   0

先日はユジャ・ワンに感心したので、今日の昼は彼女と同じ国のラン・ラン(Lang Lang)のモーツァルト ピアノ協奏曲 第24番 (2014)を聴いてみた。

イントロのオケ(指揮: アーノンクール、ウィーンフィル: ジャケットにはそのように書いてあるが、オケについては別の情報もあった)がすごく良かった。

ピアノも、意外に繊細で良かった。「意外」というのは、先入観があったということだ。何かがわずかに足りない気はするが、レベルは高い。すごく乗れて、「普通にいい」。ただ、それはオケが良過ぎたからかも知れない。

カデンツァはちょっと良くなかった。そして、段々、ピアノが、どことなく説明的な気がして来た。そのためか、滑らかさが少し不足している印象を受けた。

昼休みに聴き終わらなかったので、帰宅してから残りの第3楽章を聴いた。残念なのは、ここに来て、オケがわざとらしくなってしまったことだ。。。

この曲の後で、ラフマニノフのピアノ協奏曲 第2番 (2005)を聴いた。イントロはすごく遅かった。オケ(指揮: ゲルギエフ)は良かったが、ピアノは、やっぱり説明的だった気がする。決して悪くはないのだが・・・

そして、第3楽章の頭は、特に説明的で興ざめだった。だから、最終的には、僕には彼はユジャ・ワンよりは良くない印象だ。

それから、同じアルバムの「パガニーニ狂詩曲」を聴いた。この曲は余り好きでないから聞き流したので、特に書くことはない。

ただ、GPMDPからGMBに曲を渡す処理の実用性が確認できた(正確には、そのためにこの曲を掛けた)。今朝、先日見つかった、曲が勝手に次々とGMBに追加される問題を修正し、当初の想定どおり、再生中の曲の次の1曲だけが追加されるようにした。一方、この曲はそれぞれの長さが短い(数秒の曲もある)ので、処理が遅いと、次の曲の開始に間に合わない可能性があるので、ちょっと冷や冷やしなから聴いたのだが、ほとんど問題なかった。1-2曲、頭の音量が小さく、間に合わなかったかなというのがあった程度だ。ただ、問題が起こるとすれば曲間の長さで、音量は関係ないはずなので、マスタリングの問題だったのかも知れない。

ところで、上に書いた、「説明的」という言葉は、聴きながらふと頭に浮かんだので使ったのだが、自分でも何を指すのか分からない。さっき聴きながら考えたら、くどいとか、わざとらしいとか、その結果、滑らかさに欠けているということなのかも知れない。

こういう表現は、オーディオマニアの「アーティストの息遣いが聞こえる」のようなのに似ているが、そっちほどは眉唾でない気がする。というのは、こっちは感じたままを(伝わるかどうかは別として)文字に変換して書いているのだが、向こうは、聞こえるはずのない音が聞こえたと思い込んで(そうしないと、立つ瀬がないので)書いているのだから。でも、やっぱり同じこと??w

ラン(名字はこれで正しいのか? なんかおかしい感じだ)は前の会社に居た中国の人に似ている。顔はもちろん、若いし、本人に会ったことなどないが、性格がすごく明るそうで、その点でも似てそうだ。

 

PS. ラン・ランの名前から、「留園行って幸せ食べよ」のCMを思い出した。ここの読者の方にはお馴染みとは思うが、今の若い人たちに言っても、きっと「なにそれ??」状態であろう。このお店は、今もやっているようだ。

店の名前は「龍園」だと思ったのだが、検索したら違っていた。この字は留年を連想させるのでw、イマイチの印象だ。おどろくべきことに、リンリン・ランランのアルバムがGPMにあった。もちろん聴かない。でも、中に「恋のパッコンNo.1」とかいう妙な題の歌があって、ちょっと聴きたくなった。何がパッコンなのか?w

  •   0
  •   0

GPMDPの改良。音量の正規化の改良について考えていたら、確か、以下のようなことだったと思うが、GPMDPでなく、外部プレーヤーで再生した方がいいのではないかということになった。

  • GPMDPの構造上避けられない、曲の開始と同時に一時停止しても先頭が一瞬再生されることがある問題は、外部プレーヤーを使わないと解決できない。
  • 再生ゲインの計算のために曲のファイルをキャッシュしているのだから、そのファイルをVLCやgmusicbrowser (GMB)などの外部のプレーヤーで再生することができる。
  • 再生ゲイン対応のプレーヤーなら、音量(ボリューム)の設定やファイルにを再生ゲインを乗算しなくても、再生ゲインタグに設定するだけで、プレーヤーによって反映されるのも良さそう。
  • GPMDPは使い勝手がいいとは言えないし、リモコンを2個にしたり、2つのプレーヤー間の切り替えもしたくないので、操作性を改善する点でもGMBで再生したい。

いずれにしても、昨夜までに構想が練り上がった気がしたし、基本的なところは容易にできそうだったので、今朝、GPMの曲をGPMDPでなく外部プレーヤーで再生できるようにしようとする作業を初めてしまった。そして、確かに、再生できるようにすること自体は簡単だった。14時前には、GMBで再生できるようになった。

GPMの曲をGMBで再生

図の左上はGMBのミニプレーヤーで、右はGPMDPのウインドウである。GPMDPが再生しているように見えるGPMの曲は、実際にはGMBで再生されている。その証拠に、双方で同じ曲・アルバムになっているし、僕はこのアルバムは持っていないし、GPMDPの再生時間は0だが、GPMは0ではない。

が、やっぱり難航し、この時間になっても終わっていない。残っている難しいことは、以下である。

  • 次に再生する曲を途切れないようにGMBに送り続ける(今は、最初の1曲の再生が終わったら停まってしまう)。また、ギャップレス再生のためには、再生中の曲が終わる前に送る必要がある。
  • GMBとGPMDPの連携 (例: GMBの再生が終わったことを検出して、次の曲を再生開始する)
  • GMBとGPMDPの操作の統合 (例:GPMDPで一時停止したら、GMBを一時停止させる)。GMBに統一すればいいのだが、曲の検索など、どうしてもGPMDPでしかできないことがある。まだ、ユースケースの検討が充分でないので、方針が固まっていないせいもある。

でも、今日のところは、目論見どおりGMBで再生できたので、良しとする。

(気が向いたら、詳細を追記します。)

(9/24 21:35追記) どうにかこうにか、次に再生する曲をGMBに送り続けられるようになった。GMBも自分で作ったGPMDPの追加プログラムも、想定外の動きをしたりして、なかなか大変だった(おもしろかったけどw)。

GPMの次の曲を自動でGMBに追加

図の左はGMBのウインドウで、右はGPMDPのウインドウである。GPMDPのプレイリストの、現在再生中の次の曲がGMBに自動的に追加され、連続再生できるようになった。

余談: 上のジャケットの工藤静香、なんかお化けみたいだ。。。

動き出したばかりで、まだまだ荒削りで、さまざまな不具合はあるが、とりあえずは音楽が聴ける状態になったので、一段落だ。それに、(GMBの)リモコンで一時停止などの操作ができるのは、すごく便利だ。

不具合の例:

再生していると、再生中の次の曲以降も勝手にGMBに追加される。まあ、悪いことではないが、想定外の動作なので複雑な心境だ。そして、それに伴ってGPMDPの下部のプレーヤー部分は、まだ再生していない曲になってしまう。しかも、それは上側のキューの再生中(と思っている)曲とも違うのが解せない。

  • 再生中の曲: "Here comes the Sun"
  • GPMDPが再生中(と思っている)曲: "Let it be"(上部)、「二人静」(下部)

細かいことが多いので、先は長そうだw

PS. 今日からか、URLに"?hl=en"を付けても無視するようになったようで、日本語で表示されるようになってしまった。やっぱり、ネットサービスはvolatileだなあ。 ← URLの書き方を間違えていたようだったので、撤回する。 (9/25 20:26)

(9/25 22:56 わずかに修正、余談を追加)

  •   0
  •   1

その後、音量の正規化が不完全な感じだったので、興味もあって、試行錯誤していた。

前回書いた、ffmpegのloudnormフィルタも試してみた。最新のffmpegをインストールしたら使えるようになった。が、使ってみると、普通の曲の正規化に20秒以上も掛かるので、使うのは諦めた。また、1回で処理しているせいか、包絡線が微妙に変化(曲の始まりの頃に、なだらかに小さくなる)することがあった。確かに、本当に1回で正規化処理するなら、最大値なんて分からないから、そういうこともありそうだと思った。それでは、ちゃんと処理するとしたら、2回の処理が要り、全部で40秒以上も掛かるから、更に使い物にならない。まあ、あれは、ちゃんとした制作のような時に使うものなのだろう。

他のプログラムを探したのだが、なかなかいいものがなかった。ひとつ、ffmpeg-normalizeというのが高速で良かったのだが、曲によっては相性が悪くて結果が駄目だったり、処理できなかった(最大値が0dBを超えると言ってエラーになる)ので、却下した。

そうこうしているうちに、ちょっと思い付いた。前回採用した、RMSの最大値(長さは0.75秒にした)と正規化したい音量(例: -16dB)との差で音量を設定するのだ。ここでは、その差を擬似再生ゲインと呼ぶ。

擬似再生ゲイン(dB)= 正規化したい音量(dB) - 曲のRMSの最大値(dB)

理論的にはおかしいことだらけなのだが、聴いてみると今までで一番いい感じだった。例の、"Heartbeat city"さえも良かった。おかしいというのは、RMSの最大値は短時間の実効値の最大値なのに、それと全体的な平均値に相当する、正規化したい音量の差を使うことだ。どうしてかは分からないが、うまい具合に前者が後者に近くなるのかも知れない。

更に、音量の設定方法も変更した。今までは、GPMのwebの音量(スライダー)のスケールが直線(目盛りと音量が比例)であることを想定して設定値を計算していたが、そうでなく、対数であると想定して、上記の擬似再生ゲイン(dB)を適当にスケーリング(例: ×1.75)した値で音量を設定するのだ。具体的には、以下の式にした。

音量設定値(%)= k * 擬似再生ゲイン(dB) + 音量の基準値(%)

パラメタは、loudnormの結果と比べて調整した値を、聴きながら更に調整して、今は以下に設定している。

k= 1.75, 正規化したい音量= -12dB, 音量の基準値= 70%

これで、随分、曲ごとの音量差が解消したように感じる。音量の基準値が小さいせいか、全体的に音量が他のアプリより小さ目なのだが、これを大きくすると、曲の音量が小さい場合に充分な補正ができなくなる可能性があるので、増さないことにした。

 

PS. 再生ゲイン処理前の一時停止がうまくなくて一瞬音が出る問題も、対処方法を考えた。簡単に書くと、外部のプレーヤーを使うのだ。試したら書くことにする。

  •   0
  •   0

昼休みに、ラフマニノフのピアノ協奏曲 第3番が聴きたくなったので、GPMで探した。なかなか目新しい人が見つからないので、気分を変えて(+怖いもの見たさで)、ユジャ・ワンにしてみた。先日、見た目での判断は良くないと書いたせいもある。

正直言って、全く期待していなかった。というのは、派手な外見以外に、以前YouTubeで彼女のラフマニノフのピアノ協奏曲 第2番のライブ(屋外だった記憶がある。これかも知れないが、水色の衣装だった覚えがある)を観て、ひどいと思ったからだ。

でも、その予想はいい方向に外れた。完全に。このアルバム(2013)での演奏は全然違っていた。音だけで、男性的(スポーティとか「肉食系」とかいう言葉を思い付いた。聴いたあとで検索したら、偶然、「アスリート」とか、同様な表現をしているページがあった)な演奏で好感が持てて、なかなか乗れた。どうやら、あのライブビデオが悪かったようだ。演奏風景を見たせいもあったのかも知れない(冒頭の弾き方(見た目)は好きになれなかった)。

第2楽章は、時々、音が抜けている箇所があるように聴こえた。おそらくそうではないと思うが。あと、第3楽章に行く前に余計な音の強調があった。そこら辺は好きになれなかった。でも、すごく乗れるから、かなり好きになった。終わる頃には乗りまくって、演奏後に続く拍手を聴いて余韻に浸っていたかったほどだ。が、あと少しというところで休みが終わりそうになったので、止めた。

それから、細かいが、オケの弦が少し変わった音の箇所があった。

かなり出来がいいので、てっきりスタジオ録音だと思っていたのだが、ジャケットを見ると、ライブだった。実際、最後に拍手があった。Discogsの情報では2013年のカラカスでのライブだそうだ。あとで調べたら、カラカスはものすごく危険な街らしい。そんなところで、良くコンサートをやったものだ。まあ、そういうところにだってホールはあるだろうし、やっぱり、音楽が好きな人は沢山居て、危険な毎日を送りつつも、コンサートを楽しみにしているのかも知れない。

さっきは同じ作曲者のパガニーニ狂詩曲(2011)を聴き、今は同じアルバムの同じ作曲者のピアノ協奏曲 第2番を聴いている。「パガニーニ」は、まあ普通ではあるが、悪くなかった。この曲は、僕には退屈な印象(細切れなので、乗りが分断されるのが嫌なのかも)なので余り聴かないのだが、ちゃんと聴き通せた。

第2番もいい。イントロのピアノに重さがあっていい。普通にいい。「普通に」は良くないように思えるが、好きな曲について僕がそう思うのは、安心して聴けるとか、途中で止める気にならないとかいうことで、いい演奏なのだ。ただ、ものすごくいい訳でもない。と言っても、平凡とか個性がない訳ではない。そこの区別は難しい。それにしても、例のYouTubeのライブとは偉い違いだ。もう一度観たら(聴いたら)、印象が変わるだろうか?

という訳で、やっぱり、見た目での判断は良くないようだ。

PS. ただし、彼女のトルコ行進曲(K. 331の第3楽章)は駄目だ。全然駄目だ。これにはがっかりした。(20:46)

  •   0
  •   0

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

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

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

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

  •   0
  •   2

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

昨夜だったか、GPMのラジオ(「70s キラめく歌謡曲スターヒット」だったと思う)で、いしだあゆみの「あなたならどうする」(1970)が掛かった。全く頼りない歌で、当時の記憶になく、誰の歌かも知らず、全然好みじゃないのだが、妙に頭に残った。

そして今日。昼間にいろいろあって、大変疲れた、というか、(何度目か分からないが)げんなりした。(死ぬまで暮らすのに充分なお金があれば)その場で会社を辞めて帰りたくなった。が、そうもできず、机に向かっていたら、不思議と、この曲の雰囲気や「あなたならどうする」という、泣きたくなるような一節が浮かんで来た。

帰宅して、音楽すら聴く気力がなかった。が、ラフマニノフでもモーツァルトでもなく、この曲が聴きたくなって、今、聴いている。もう3回目だ。気に入りはしないが、しっくり来るので、上に大きく載せた。

PS. あと、上のラジオに入っている、研ナオコの「夏をあきらめて」(1982)もいい感じだ。これは、当時からではないが、近年、結構好きになった。

  •   0
  •   1

会社でGoogle play musicを聴くのに、イヤフォンでは耳が調子悪くなるので、ヘッドフォンを買った。今の(DENON AH-D5000)が古くなったので、以前も探したのだが、手頃な値段でいいものがなかなかなかった。

探す時は、結局パッドが駄目になってしまうので、今ののように高価なものでなく、3千円程度で使い捨てできるもので、それなりの音が出ればいいと思っていた。が、いいものはほとんどなかった。大抵は、側圧が強くて頭が痛くなるというレビューがあって却下した。最終的に残ったのは、以下の3つだった。

  • Philips FX3: 3000円程度
  • ローランド RH-5: 4000円程度
  • Shure SRH240A: 6500円程度

更に調査・検討して残ったのが、SRH240Aだった。予算より高いが、それだけいいものだろうと期待した。もし音が良かったら、今のと交換することも考えた。Amazonに注文し、さっき届いた。値上がりしたようで、約6700円だった。

さっそく聴いみて、数十秒でがっかりした。音が悪い。具体的には、帯域が狭い。(言い過ぎではあるが、)ラジオのような音で、僕に言わせれば、まともな音ではない。これだったら、せいぜい3千円じゃないか。よく、エージングで音が変わる(良くなる)とか言われているが、僕はそうは思わないので、期待できない。

エージングを論理(理論ではない)的に否定してみる。: 「エージングの効果」を、「数十時間、再生すると、音が(いい方向に)変わること」と定義する。もしそれが正しいとしたら、かなり急激な変化が起こるはずだ。それであれば、エージングから時間が経ったら更に音が変わってしまって、音の再現性がなくなるだろう。毎日あるいは毎週、違う音がするということだ。

言い換えれば、品質の変化(劣化)が激しいということで、耐久性もへったくれもない。まるで生(なま)物だ。そんな変化の激しい物を数年間も使うのは、全く理にかなっていない。数十時間で音が変わるなら、1か月経ったら、一体どのくらい変わることだろうか。エージング直後の音がいいはずなのに、それでいいのだろうか。

また、メーカーは、出荷時の特性を製品仕様に定めて検査しているはずなのに、それが違う・無意味だということなのだろうか。

今のDENONのは低音と高音が伸びていて音がいいし、自然な感じだ。まあ、値段が全然違うから仕方ない面もあるが、これだって7千円近いのだから、まともな音が出たっていいじゃないか。。。メーカーは「プロクオリティ・ヘッドフォン」とか言っているが、一体何のプロか教えてもらいたい。ゴルフとかかねw 正直言って返品したいが、何らかの音が出て聞こえるので、無理だ。

あと、20分くらい聴いただけだが、イヤホン同様、耳が調子悪くなった。これは慣れがあるかも知れないので、少し様子を見ることにする。

いい点としては、着け心地がソフトなことと軽いことだ。これなら、頭や耳は痛くならなさそうだ。あと、今のよりコンパクトで目立たないので、会社で使うにはいいと思う。そして、会社のPCのサウンド出力なんて大したものではないので、「ラジオ・クオリティ」で丁度いいw

それから、左右の区別のラベルの文字(黒字に凹文字)が見難くて分かりにくいので、紙のシール(いつも、購入日を書くもの)を貼った。でかでかと銀で"SHURE"と書くなら、ついでにL/Rだって書いてもいいと思うし、目の見えない人にも分かるように、片方だけ凹ませるとかしてもいいと思うが・・・

まあ、アメリカ人なんて、耳は節穴で、表面上は偉そうなことを言っても、心の底では弱者への配慮なんて二の次だと思っていること、Amazonなどのレビューがいい評価でもあてにならないこと、そして、スピーカーやヘッドフォンのように、力学的に動いて音を出す機器にお金を惜しんではいけないってことは分かった。

 

(9/3 6:25追記) SRH240AとAH-D5000の周波数特性のグラフを検索して比較したところ、聴いた印象が正しいことが分かった。サイトによって測定結果は異なるが、概ね、SRH240は低域が出ておらず、AH-D5000は低域がフラットだった。低域の落ち込みと高域の谷で、SRH240Aがラジオの音に聞こえたようだ。

両方載っているサイトは少ないので、以下のサイトの測定結果を用いて両者の比較をした。

なお、Reference audio gearにはどちらの結果も載っているが、補正が適切でないようで、どちらもフラット過ぎて確からしくないので、採用しなかった。

以下に、グラフとグラフから読み取った低域の振幅の値を示す。

SRH240A

  • Head-Fi (オレンジ)
    • 30Hz: -15dB
    • 40Hz: -12dB
    • 50Hz: -7dB
  • Goldern ears (SRH240, 青=L)
    • 30Hz: -10dB (L, -20dBを基準とした)
    • 40Hz: -8dB (L, 同)
    • 50Hz: -5dB (L, 同)

 

AH-D5000

  • Head-Fi (赤)
    • 30Hz: 0dB (+5dBを基準とした)
    • 40Hz: 0dB (同)
    • 50Hz: 0dB (同)
  • Inner fidelity (青=L)
    • 30Hz: +2dB (L)
    • 40Hz: +2dB (L)
    • 50Hz: +2dB (L)

SRH240Aは40Hz以下で10dB前後落ちているが、AH-D5000はほぼフラットで、理想的なことが分かる。

なお、高域については詳しく比較しなかったが、グラフを見て分かるように、SRH240Aは4-6kHzの辺り(一般的に、高い音として聞こえる領域)に-15dB程度の谷がある。

(9/6 3:17追記) 昨日の昼休みに、会社で試してみた。音は、イヤホンよりずっと良く、不思議とラジオ感がなく、綺麗に聞こえた。会社は環境騒音が多く、問題となる低音や高音(特に低音)がマスクされて聞こえないためか、このくらいで充分なようだ。まあ、とりあえず目的を達成できたのは、良かった。

  •   0
  •   0

去年、友人Nからもらった沢山のPCは、naokiさんのおかげで2台にまで減った。1台はVision HTという小型デスクトップ(キューブ?)、もう1台はノートPC(Let's note CF-S9)だ。どちらも滅多に使うことはなく、メインPCが故障した時の予備用に保管している。Let's noteは、会社の出張時や一時的な作業用に使おうとしてLinuxをインストールしたのだが、その後、そんなことをしても何も報われないことに気付き、何だか馬鹿らしくなったので、持って帰って来た。

(20:18補足) 一つだけ見返りがある。Let's noteは軽いということだ。会社のノートはスタバ用で意識高いせいかw、ずっしりと重い(電車だったら「冗談じゃない!」と言いたいくらい)のだ。もし、また電車で出張するなら、Let's noteにするかも知れない。そもそも持って行かないようにはしたいが。

そのLet's noteにちょっと問題があって、再インストールが要るかと思っていたのだが、今朝、作業を始める前に念のために検索してみたら、OSでなくPC自体の問題であることが分かり、設定で対応できた。

その問題とは、何もしないで動かしているだけで、CPU温度が70℃前後に高くなり、ファンがうるさいというものだ。僕のメインPCは、通常は40℃台(室温が26℃程度の時)なので、温度取得機能がおかしいか、OSのインストールを手抜きしたせいで何かおかしくなっているのではないかと思ったのだ。が、結局、Let's noteシリーズは基本的に熱くなるようで(→ 参考)、この個体は更に熱くなるようだ(別のLet's noteはここまで熱くならなかった)。

検索すれば出てくるのだが、対処方法は、以下の3とおりである。

  1. 冷却経路につまったゴミや埃を取り除く。()
  2. 冷却ファンを交換する。
  3. CPUの最大周波数を下げる。(例は最初のリンク先)

多くのページには清掃とファン交換が書いてあるのだが、分解は面倒なのと、排気口を見たところ綺麗だったし、ファンはちゃんと回るので、清掃やファン交換は止めて最大周波数を下げてみることにした。周波数を下げると処理速度も落ちるが、常にうるさくて熱いよりはマシだ。

同時に、効果が疑問視されている、CPUのHyper-Threading (HT)も無効にしてみることにし、以下の組み合わせで試した。

  • 最大周波数: 2.5(通常), 2.3, 2.1, 2.0 GHz
  • HT: On(通常), Off

なお、アイドル状態ではCPU温度が上がらないことがあるので、sysbenchというベンチマークプログラムで負荷を掛けることにした。

その結果、sysbench実行中のCPU温度の最大値は以下のようになった(抜粋)。(注: 一部正しくないので、下記の再測定結果を参照のこと)

  1. 最大周波数(以下同) 2.5GHz, HT: On: 79℃
  2. 2.5GHz, HT: Off: 82℃ (+3℃)
  3. 2.3GHz, HT: On: 71℃ (-5℃)
  4. 2.3GHz, HT: Off: 69℃ (-10℃)
  5. 2.1GHz, HT: Off: 68℃ (-11℃)
  6. 2.0GHz, HT: On: 67℃ (-12℃)
  7. 2.0GHz, HT: Off: 67℃ (-12℃)

最大周波数を下げるのは、かなり効果があった。温度自体はまだ高くて気に入らないのだが、あれほどうるさかったファンの音が、ほとんど気にならないくらいになった。上の結果を見ると、2.5GHzはかなり無理をしているように思う。そんなのは使わなければいいと思うのだが、スペック競争のためなのか・・・ また、最大周波数を下げた場合、HTは温度には関係なくなるようだ。(19:41追記 上記の無理している"2.5GHz"はTurboBoost(条件が合うと、最大3GHzになる)のことだった。)

なお、2.5GHz, HT: Offの場合(2番)に温度が上がったのは謎だ(2回試して2回とも同じ結果だったので、一時的な負荷上昇ではない)。最大周波数の設定が不十分だったのかも知れない。

(17:17追記) 上記2番の謎はTurboBoost (TB)に関係しているかも知れない。HTをOffにしたために、うまく条件がマッチして、sysbenchを実行しているコアのTBが有効になって、温度が上がったのではないか? HT OnでもTBは効くのだろうが、HT Offの方が効きやすいのではないか。

一方、設定で最大周波数を下げていると、TBが常に無効になるために温度が下がるのではないか。

(19:33追記) 周波数設定が不十分だった可能性があるのが気に入らないので、一部を測り直した。また、TBをOffにする方法も分かったので(→ 参照)、合わせて比較した。また、アイドル時の温度も比較した。

負荷時

  1. 最大周波数(以下同) 2.5GHz, HT: On, TB: On: 79℃
  2. 2.5GHz, HT: Off, TB: On: 77℃ (-2℃)
  3. 2.5GHz, HT: On, TB: Off: 72℃ (-7℃)
  4. 2.5GHz, HT: Off, TB: Off: 70℃ (-9℃)
  5. 2.3GHz, HT: On, TB: On: 69℃ (-10℃)
  6. 2.3GHz, HT: Off, TB: On: 68℃ (-11℃)
  7. 2.0GHz, HT: Off, TB: On: 68℃ (-11℃)
  8. 2.0GHz, HT: Off, TB: Off: 67℃ (-12℃)

アイドル時 (HT: Off, TB: Off)

  1. 最大周波数(以下同) 2.5GHz: 48℃ (実際の周波数= 1.2GHz)
  2. 2.0GHz: 49℃ (実際の周波数= 1.2GHz)

再測定結果より、以下のことが分かった。

  • 標準設定(2.5GHz, HT On, TB On)での温度上昇は主にTBのせいなので、TBをoffにすると温度がかなり(約10℃)下がる。
  • 2.5GHzの時はHT offの方が少し(約2℃)下がるが、他の周波数では有意な差はない。
  • アイドル時の温度は、最大周波数との有意な関係はない。

上記の結果より、最終的には、最大2.5GHz(標準のまま), HT: Off, TB: Offにすることにした。気分の問題かも知れないが、2.5GHzは2GHzより若干速い感じがする。また、ファン音はほとんど変わらない。

最大周波数の設定は/etc/default/cpufrequtilsに MAX_SPEED= 2000000 などと書けば起動時に設定され、HTはBIOSでOffにする。また、TBは、起動時に/sys/devices/system/cpu/cpufreq/boostに"0"を書き込むことでOffにできる。

TBをOffにすると、最大で約17%(TB時は最大3GHzなのが2.5GHzになる)の速度低下となるが、CPUの周波数は負荷によって変動するため、常に遅い訳ではなく、最高に負荷が掛かった場合で、TBが適用される条件が揃った場合に遅くなるだけなので(実際、アイドル時の周波数は、どの場合も1GHz程度である)、実用上は問題ないと考えた。また、HTはOn/Offどちらでもいいのだが、調べると、音声や動画の変換や編集に効果があるとのことだが、ノートPCでそんなことはしないので、無駄だから止めた。

昔の僕だったら、仕様いっぱいまで使えないのは気に入らないから、何とかしようとしただろうが、このPCはもらったものだし、滅多に使わないし、今の僕は昔ほど純粋でなく、大勢に影響のない無意味なことに神経とか労力を遣ったりイライラしたくない気分満載なので、これで良しとした。

とはいえ、今回だって、この結論に達するまでに約半日を費やしたので、「(手間が掛からなければ)何でもいい」(それだったら「壊れなければ(タダだから、壊れたって)うるさくたっていい」ことになる)という訳ではなく、自分の納得するところに落とし込むのが重要なのだろうと思った。

そして、その落としどころは、年齢とともに広くなるのかも知れないw

(19:33 測定結果を追加し、それに合わせて結論などを修正)

  •   0
  •   1