SpotifyのAPI便利すぎwwwwwwwwwwwww

ブログ

みなさんこんにちは!クフルダモノーツYoshito Kimura(k1mu)です!

 

SpotifyのAPIを使ってみたので、忘備録に軽くまとめておきます。

APIとは?

コアな音楽ファンの方は「API」と言えば、Automated Processes Inc.ミキサー卓を思い浮かべるかもしれません。

 

しかし、この記事で扱う「API」は「Application Programming Interface」です。

API」は、ウェブサービス等が機能の一部を外部ユーザーにも使わせてくれる仕組みになります。

大雑把に言えば「プログラミング言語を使ってサービスの機能を使わせてもらうための受付窓口」みたいな概念だと思います。

APIを叩いてSpotifyの楽曲に埋め込まれた情報を取得する

Spotifyは、APIを介してプレイリストを編集したり楽曲を再生したりできます。

ただ、今回やるのは曲のデータ分析に使えそうな情報の抽出です。

というのもSpotifyは、配信している楽曲に独自に色々な情報を付与しています。

(恐らく、その多くが楽曲をAIで分析して付与された情報でこの情報を元にオススメ曲をユーザーへ提案する機能を実現していると思われます。)

 

その中でも興味深いのが、楽曲の特徴を表す情報「AudioFeaturesObject」です。
今回は、SpotifyAPIを叩いて、この「AudioFeaturesObject」を取得してみました。

参考させていただいたページ↓

Spotify Web APIから分析用データセットをつくる

「AudioFeaturesObject」に含まれる情報とは?

詳しくは、公式ドキュメントに書いてあります。

Web API Reference | Spotify for Developers
Music, meet code. Powerful APIs, SDKs and widgets for simple and advanced applications.

ただ、英語なので興味深そうなパラメーターをいくつか紹介します。

acousticness

アコースティック感の有無。

弾き語りなどアコースティックの要素が多い曲ほど、高い値になるようです。

danceability

踊れる度合い。

テンポやリズムから判定された踊りやすさの数値。

値が高いほど「踊りやすい」曲になります。
DJやダンサーが踊りやすい曲をディグるのにも重宝しそうです。

energy

エネルギッシュさ。

恐らく、曲の「激しさ・ラウドさ」を示す指標だと思います。

ドキュメントには「たとえば、デスメタルは高いのに対し、バッハの前奏曲は低い。」みたいに書かれています。

loudness

トラックのラウドネスです。

ドキュメントには(dB)値だと書かれています。
しかし、値を見る限り「LUFSに近い値ではないのか…?」思います。(LUFSと同じではないです。)

 

Spotifyは、およそ-14LUFSを超えたあたりからラウドネス・ノーマライゼーションが適用されるみたいです。
したがって、あまり意味のないマキシマイズが行われている曲が分かる気がします。

『ラウドネス・ノーマライゼーションの誤解を解く』 by David Shimamoto(サンレコ クリエイティブ・ラウンジvol.1 2021年3月21日)
Spotifyのマスタリングとラウドネスに関するFAQ | blog : Vocal-EDIT.com
公式サイト資料より意訳
Spotify Begins the Move to LUFS Normalization
Things are changing again - and for the better!…eventually.In a nutshell, Spotify has started to make their long-promised move to using LUFS for loudness nor...
key

キーの主音を数値で教えてくれます。

0がド、1がド♯/レ♭、2がレ、……11がシみたいな感じで、音名が順番に0~11と対応されています。

mode

調性を数値で教えてくれます。0が短調、1が長調です。

…ただ、この「mode」は結構外している(?)上に、転調を含む曲を判別できていません。
また、「mode」と言いつつ、ドリアンフリジアンなどの旋法も選択肢にはありません。

しかし、「key」と「mode」の情報を組み合わせると、曲中で主に使われているキーの「調号」のデータ高確率で正しく抽出できると気付きました。

#※このコードはイメージです。

  if mode_num == 1:
      key_sig_num = key_num
  else:
      key_sig_num = (key_num-9)%12

(たとえば、CメジャーにせよAマイナーにせよ、調号は「♯・♭×0」です。)

そもそも、作っている側の視点ですら“平行調の関係にある長短調”の境界が曖昧な曲が多いので、「調号が分かればそれで十分」とも考えられます。

BPM

BPM(Beats Per Minute) つまり、テンポです。

途中でテンポが変わる曲フリーテンポの曲でなければ、かなり精度は高めな印象です。

2010年代のヒット曲のプレイリストの情報を取得してみた

試しに、こちらの2010年代のヒット曲をまとめたプレイリストの情報を取得してみます。

 

pythonで情報を取得して少し見やすい情報に整形した後に、pandasのデータフレームに出力してみました。

するとこんな感じ。

さらにデータの一部の項目をヒストグラムにしてみるとこんな感じ。

画像はそれぞれ曲の長さ調号BPMのヒストグラムです。

これを見ると、曲の長さは大体4分~5分程度が多く、BPM=170付近の人気が少し低いようです。

 

調号は、9…♭×4…つまりA♭メジャーキーもしくはFマイナーキー主体の曲が一番多いようです。

数字」から「調号の数」表記に変換すると、分かりやすいです。

…といっても、キーにそんな大きな偏りはありませんね。

Spotifyすごい

これらの情報を一から自分で収集して分析するのは大変です。
でも、Spotify APIを介してデータを引っ張ってくれば10秒くらいで出来てしまいます。

(100%合ってるわけではないですけど)

マジ便利!!!!!\(^o^)/

そして、データの利用方法を考えればさらに色々な分析もできそうです。

 

追記:

タイトルとURLをコピーしました