今回はSpotifyのAPIを使ってみたので、忘備録に軽くまとめておきます。
APIとは?
コアな音楽ファンの方は「API」と言えば、Automated Processes Inc.のミキサー卓を思い浮かべるかもしれません。
しかし、この記事で扱う「API」は「Application Programming Interface」です。
「API」は、ウェブサービス等が機能の一部を外部ユーザーにも使わせてくれる仕組みになります。
大雑把に言えば「プログラミング言語を使ってサービスの機能を使わせてもらうための受付窓口」みたいな概念だと思います。
APIを叩いてSpotifyの楽曲に埋め込まれた情報を取得する
Spotifyは、APIを介してプレイリストを編集したり楽曲を再生したりできるみたいです。
ただ、今回やるのは曲のデータ分析に使えそうな情報の抽出です。
というのもSpotifyは、配信している楽曲に独自に色々な情報を付与しています。
(恐らく、その多くが楽曲をAIで分析した情報です。
これらの情報を元に、オススメ曲をユーザーへ提案する機能を実現していると思われます。)
その中でも興味深いのが、楽曲の特徴を表す情報「AudioFeaturesObject」です。
「AudioFeaturesObject」に含まれる情報とは?
詳しくは、公式ドキュメントに書いてあります。
ただ、英語なので興味深そうなパラメーターをいくつか紹介します。
acousticness
アコースティック感の有無。
弾き語りなどアコースティックの要素が多い曲ほど、高い値になるようです。
danceability
踊れる度合い。
テンポやリズムから判定された踊りやすさの数値。
値が高いほど「踊りやすい」曲になります。DJやダンサーが踊りやすい曲をディグるのにも重宝しそうです。
energy
エネルギッシュさ。
恐らく、曲の「激しさ・ラウドさ」を示す指標だと思います。
ドキュメントには「たとえば、デスメタルは高いのに対し、バッハの前奏曲は低い。」みたいに書かれています。
loudness
トラックのラウドネスです。
ドキュメントには、dB値だと書かれてい(る気がし)ます。
しかし、値を見る限り「LUFSに近い値ではないのか…?」思います。
(LUFSと同じではないです。少なくとも自分の曲を確認したところ違いました。)
Spotifyは基本的に-14LUFSを超えたあたりからラウドネス・ノーマライゼーションが適用されるみたいです。
したがって、あまり意味のないマキシマイズが行われている曲(音圧戦争の被害を受けている曲)が分かる気がします。
key
キーの主音を数値で教えてくれます。
0がド、1がド♯/レ♭、2がレ、……11がシみたいな感じです。
つまり、音名がドから順番に0~11と対応されているわけです。
mode
調性を数値で教えてくれます。
0が短調、1が長調です。
…ただ、この「mode」は、結構外している(?)上に転調を含む曲を判別してくれません。
また、「mode」と言いつつ、ドリアンやフリジアンなどのモード(旋法)も選択肢にはありません。
じゃあ、役に立たないかと言うと…そうではありません。
「key」と「mode」の情報を組み合わせると、曲中で”主に使われているキー”の調号の種類は、高確率で正しく得られると気付きました。
(たとえば、CメジャーにせよAマイナーにせよ、調号は「♯・♭×0」です。)
こんな感じの処理を書いてやります。
#※このコードはイメージです。
#※実際は、APIから取得したkeyとmodeの値を入れて使う
key_num = 0
mode_num = 1
#調号のテキストを格納した配列を定義
key_signature = ["#/♭×0", "♭×5", "#×2", "♭×3", "#×4", "♭×1", "#/♭×6", "#×1", "♭×4", "#×3", "♭×2", "#×5"]
#調号の数値を計算する
if mode_num == 1: #modeの値が長調の場合
key_sig_num = key_num
elif mode_num == 0: #modeの値が短調の場合
key_sig_num = (key_num-9)%12
#配列から調号のテキストを取り出す
print(key_signature[key_sig_num])
これで、調号の種類を導出できるはずです。
むしろ最近は、“平行調の関係にある長短調の境界“が曖昧な曲が多いので、調号の種類が分かれば充分だと思います。
また、結果的にモード(旋法)を使った曲の判別にも役立ちます。
(調号からモードを考えるのに便利なウェブアプリ↓)
BPM
BPM(Beats Per Minute) つまり、テンポです。
途中でテンポが変わる曲やフリーテンポの曲でなければ、かなり精度は高めな印象です。
ただ、微妙なテンポの揺れも加味された値が返って来るので、四捨五入や切り捨ての処理を書いてもいいかもしれません。
↓こちらはSpotify APIから取得したテンポ情報をまとめたものです。
2010年代のヒット曲のプレイリストの情報を取得してみた
試しに、こちらの2010年代のヒット曲をまとめたプレイリストの情報を取得してみます。
参考させていただいたページ↓
pythonで情報を取得して見やすい情報に整形した後に、pandasのデータフレームに出力してみました。
するとこんな感じ。
さらにデータの一部の項目をヒストグラムにしてみるとこんな感じ。
画像はそれぞれ曲の長さ、調号、BPMのヒストグラムです。
これを見ると、曲の長さは大体4分~5分程度が多く、BPM=170付近の人気が少し低いようです。
調号は、8…つまり(♭×4)A♭メジャーキーもしくはFマイナーキー主体の曲が一番多いようです。
…といっても、キーにそんな大きな偏りはありませんね。
Spotifyすごい
これらの情報を一から自分で収集して分析するのは大変です。
でも、Spotify APIを介してデータを引っ張ってくれば10秒くらいで出来てしまいます。
(100%合ってるわけではないですけど)
マジ便利!!!!!\(^o^)/
そして、データの利用方法を考えればさらに色々な分析もできそうです。
追記
あれからSpotifyのAPIを使って色々なアーティストのデータなどを分析しています。
タグの「Spotify_API」から、SpotifyのAPIを活用した記事の一覧が見れます。