SpotifyのAPI便利すぎwwwwwwwwwwwww

ブログ

みなさんこんにちは!クフルダモ・ノーツキムラ ヨシト(k1mu)です!

 

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

APIとは?

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

 

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

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

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

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

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

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

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

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

 

その中でも興味深いのが、楽曲の特徴を表す情報「AudioFeaturesObject」です。

「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を超えたあたりからラウドネス・ノーマライゼーションが適用されるみたいです。

したがって、あまり意味のないマキシマイズが行われている曲(音圧戦争の被害を受けている曲)が分かる気がします。

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」の情報を組み合わせると、曲中で”主に使われているキー”調号の種類は、高確率で正しく得られると気付きました。

キーには、それぞれ対応する調号があります。
(たとえば、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])

これで、調号の種類を導出できるはずです。

むしろ最近は、“平行調の関係にある長短調の境界が曖昧な曲が多いので、調号の種類が分かれば充分だと思います。

また、結果的にモード(旋法)を使った曲の判別にも役立ちます。

(調号からモードを考えるのに便利なウェブアプリ↓)

転調の間隔・調の関係を調べる O-TO【音楽理論ウェブアプリ】
「転調の間隔」を調べられるアプリです。指定したキーがどんな関係性か簡単に分かります。旋法(モード)にも対応しています。
BPM

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

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

ただ、微妙なテンポの揺れも加味された値が返って来るので、四捨五入や切り捨ての処理を書いてもいいかもしれません。

↓こちらはSpotify APIから取得したテンポ情報をまとめたものです。

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

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

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

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

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

するとこんな感じ。

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

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

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

 

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

数字」から「調号の数」表記に変換した方が分かりやすいです。

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

Spotifyすごい

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

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

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

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

 

追記:

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