Spotifyによれば、今年最も再生した曲は、意外にもポールとスティーヴィー・ワンダーの"Ebony and Ivory" (1982)だった。確かに良く掛かっていた気はするし、嫌いな歌ではない。ちなみに、マイケルとの"Say say say" (1983)も好きだが(当時は嫌いだったw)、なぜか10位以内には入っていなかった。参考までに5位までを載せる。それぞれに、Mlhiで調べた再生回数(後述)も示した。
Ebony and Ivory (Paul McCartney & Stevie Wonder, 1982)
更に謎なのは、10位だった"Listen to what the man said" (Wings, 1975)はMlhiのwebでは検索できなかった。確かにDBには入っているのだが。いろいろ調べると、どうやら、近頃Spotifyの演奏が新しい版に入れ替わったためのようで、Spotifyの検索をしないようにしたら出て来た。
DBに入っているものと2020年のリストに入っているのは"Listen To What The Man Said - 1993 Digital Remaster" (ISRC:GBCCS0700283)だが、今Spotifyで検索して出て来るのは"Listen To What The Man Said - Remastered 2014" (ISRC:GBCCS1400011)である。
select track_id, title, artist, album,
played_full_tot, played_full_tot/played_cnt, played_cnt
from trk_info_hist
where played_full_tot is not null
and played_full_tot <= played_cnt
order by played_full_tot DESC limit 0,20;
PS. そういう訳で、手持ちの映像作品のDVDなどは、ここ数年全く観ていないから処分したい気もするが、一応好きで買って思い入れもあったので、どうにも決断できない。その時は、ここ数年全く触ったことのないCDも一緒に、一気に処分したい。更に、心理的抵抗は岩のように大きいが、(プレーヤーすら持っていない)レコードも処分したい。そうしたら結構物が減るだろうな。
その前に、いつも評価用に使っている曲をSpotifyの正規化(Quiet)+増幅(+9dB)で試したところ、殆どのポップ音楽は問題なかったが、"Speak to me"は駄目で、Normalと同様な不自然さがあった。原因を調べたら、前回の投稿の付録に詳しく書いたが、オーバーフローがリミッターでカットされる時間が長いためだと分かった。それで、増幅量を+6dBに減らし、リミッターの回復時間を長く(2秒)にすることで不自然さを緩和した。回復時間を"Speak to me"の鼓動の周期より長くすれば、ずっと音量が下がったままになるので、不自然さが緩和されるのだろう。完璧ではないが、"Speak to me"のような曲は例外的だから許容できると考えた。ただ、他の曲が不自然になるかも知れないので、その時に調整したい(今のところは問題ない)。
RG値はSpotifyアプリのログに出ることは分かっていたが、音量正規化をonにしないと出ないし、その仕様がいつなくなるかも知れないのだが、SpotifyのWeb APIのGet a Trackなどで取れるプレビュー(試聴)用のMP3ファイルに入っていたのだ。全くコロンブスの卵というか、灯台下暗しだ。
上述のとおり、自作の音量正規化が駄目なのはSpotifyからReplayGainが取れないためなのだが、どうにかして取る方法はないかと試行錯誤していたら、思わぬことで取れた! 既に書いては居るが、アプリのログやコンソール出力に表示されるのだ。以下に"Speak to me"での例を示す。太字がトラックのReplayGainである。
02:05:55.089 I [libvorbis_ogg_decompressor.cpp:401] track gain: (13.25Db), track peak: (0.409425dB), album gain: (-5.09dB), album peak: (1.02865dB), normalization: trackgain
ちょっと手で試して、やればできそうな気はしたが、(すっかり忘れて居た)昔のGoogle play musicの時(→ 例)と同様に、余りにもトリッキーで嫌になるくらいだ。また、アプリが2個なのでメモリも2倍食いそうなのも嫌だ。そもそも、ログにRG値が表示されるのは仕様でもなんでもないので、出なくなったら元の木阿弥だ。。。
PS. SpotifyアプリからのRG値取得には、音楽圧縮フォーマット展開用ライブラリ(vorbisを使っているようだ)をすげ替えればできるかと思ったのだが、自前で作っているかスタティックリンクしているらしく、外部のものは使っていなかった。考えが甘かったが、まあ、そうれはそうだろう・・・ あとは、逆コンパイルしてバイナリエディットとかいう手もあるかも知れないが、「うーん」だ。それに、プログラムの改ざん検証をしているかも知れないから、できないかも知れない。
あと、以前のように、公開DBに音量正規化用の値(再生ゲイン)などがないか探したたら、2つ見付かった。一つは前回も見付かったDynamic range databaseで、もう一個はAcousticBrainzだ。前者は、前回は(記憶している限りでは)APIがないのとレパートリーが狭そうなので止めた。後者は、言い方は悪いが「玉石混交」(「ゴ○屋敷」などもっとひどい言い方はあるが、それは言い過ぎだろう)で、全く手軽に使えないので却下した。確かにデータは多いのだが、全然整理されておらず、ただ数字があるだけで、同じIDなのにそれぞれ随分違っていてどれが正しいのか分からず、禄に検索もできなかったら、どうやって使うのかと思う。
そもそも、Spotifyアプリの音量正規化処理が「普通」だったら、こんな苦労は全くしなくていい(実際、したい訳じゃなくて、ただ音楽を聴きたいw)のだが、前回書いたように、やっぱり謎の処理をしていることが分かった(何人かの方が書かれていた: 例)。どうやら、アプリにコンプレッサーとかリミッターのような処理が入っていて、特にすごく音量が小さい曲(僕が気付いた曲: Pink Floyd: "The dark side of the moon"の"Speak to me")でおかしくなるようだ。再生ゲインの値がおかしい可能性はあるにしても、せめてその余計な機能がなければまだ良かったのに、どうもお節介な感じだ・・・
ただし、従来の"×"(Don't like/Hate)は"-"(Hide this song)に変わったのだが、やっぱりできない場合があるのが惜しい。まあ、これはリコメンドに反発するwためのもので、普通の時にHideできたら永遠に出なくなってしまうので、その管理機能が必要になるから、簡単には行かなさそうだ。
そして、新しい仕様では、自分が♡した曲(従来は♡せずに「ライブラリに保存」した曲も含んでいた)をAPI "Get Current User's Saved Tracks"で取れそうだと思って試したら、実際にそのAPIの結果とアプリの"Liked Songs"の先頭の数曲が一致した(だから、♡は内部では「ライブラリに保存」の動作をしているようだ)。
あとでこれを使って、♡した曲の評価をMlhiに(自動で)取り込みたい(いつになるかは不明w)。
PS. こんなことより、アプリのメモリリークを直して欲しいなあ・・・ これは、どうあがいてもこっちでは直せなさそうだ。
※ふと頭に浮かんだ「ライフログ」という単語から思い付いたのだが、システム名は「音楽(再生)ログ」や「音楽(再生)ロガー」とかそういうのが適当そうで、簡潔でいい。ようやく、自分が何を求めていたのか分かったのかも知れないw これで行けば、英語の略称(Mlhi)の元としては"Music logger managing listening history and impressions"のようなものがこじつけられる。(こういう「逆のこじつけ」とかこじつけの変遷は良くあるので、気にしないことw) (7/19 6:42追記)
ちなみに、最大の再生回数を求めるにはちょっとしたSQLを実行する必要があって、そのためのプログラムを作る必要があると思い、疲れているので「またかよー(一体、いくつ作ればいいんだ?)」とうんざりな気分になったのだが、曲をSpotifyとDBから検索するために作ったプログラム(webで検索に使っているもの)にそのSQLの判定部を「適当に」(= "1 order by played_cnt desc limit 0,1")入れたらできてしまったので、ちょっと驚いた。自分では全く想定していなかった用途に使えるのはおもしろいけど、結構怖い。こういうところからセキュリティホールが生まれるのかも知れない。
ようやく正式な名前を決めた、Music listening history and impressions "Mlhi" DB (音楽再生履歴と感想の記録・検索システム※)に、先日やる気が出てしまったgmusicbrowser(GMB)対応機能にを追加しようと作り出し、さっきようやく動き出したのだが、気付いたら一週間経っていたw
Spotifyで「好き」/「嫌い」にした曲を取るAPIはないが、「好き」にした曲は「ライブラリ」(曲一覧が取れる)に自動的に入り、ラジオで好きにした曲はプレイリスト("Liked from radio")に入る。好きでもないのにライブラリに入れることはないので、ライブラリに入っていること= 「好き」として良さそうだ。
PS. そもそも、システムの名前をちゃんと決めなくてはと思っているのだが、なかなか付かない(ただ、何も呼び名がないと不便なので、自分では"Tih DB" (Tih= Track info. and history)や"Tih web"などと呼んでいる。: 名前からも分かるように、基本的にはSpotifyを中心としたシステムではない)。ここまで決まらないものは珍しい。それだけ、コンセプトが確定してない、やりたいことが多いってことだろうか。まあ、音楽は奥が深いからね。