はじめに
Spotify の Web APIを調べていたら、APIを叩いて取得できる音響・楽曲特徴量のドキュメントを発見しました。
非常に興味深い特徴量がいくつかあったので、紹介したいと思います
各特徴量の説明
duration_ms: int
楽曲の時間長です。
Spotify Web API では、ミリセカンド単位での時間長が取得できます。
key: int
楽曲の調性の推定値です。
値は整数であり、各ピッチクラスに対応しています。
例: 0=C, 1=C#, ...,
なお、調整が不明な場合は -1 が返されます。
mode: int
楽曲のモダリティ(メジャー or マイナー)です。
major なら 1, minor なら 0 です。
time_signature: int
拍子、拍(ビート)を示す値です。
1小節の中に、いくつ拍(ビート)があるかを取得できます。
acousticness: float, [0.0, 1.0]
その楽曲がアコースティック系であるかを示す値です。
1.0に近づくほど、アコースティックな(非電子音楽的な)楽曲であることを示します。
danceability: float, [0.0, 1.0]
その楽曲がダンスに適した音楽かを示す特徴量です。
テンポやリズム、ビートの強さ、周期性に基づいて算出されます。
1.0に近づくほど、ダンサブルな楽曲であることを示します。
energy: float, [0.0, 1.0]
その楽曲の聴感的な強さやアクティビティを示す特徴量です。
具体的には、energyが1.0に近い楽曲は、早く、やかましく、そしてノイジーに聞こえます。
例えば、デスメタルのような楽曲では energy は大きい値となり、クラシック(例:バッハのプレリュード)では小さい値となります。
この特徴量は、ダイナミックレンジ、ラウドネス、音色、オンセットレート、General entorpyが寄与しています。
instrumentalness: float, [0.0, 1.0]
楽曲に歌声がどの程度含まれているかを示す特徴量です。
この特徴量では"aah"や"ooh"といった歌声は instrumental として扱っています。
liveness: float, [0.0, 1.0]
ライブ音源っぽさを示す特徴量です。
この特徴量は、オーディエンスの音を検出しています。
0.8を超えれば、ほぼほぼライブ音源です。
loudness: float, [0.0, 1.0]
楽曲のラウドネスです(dB値)。
speechiness: float, [0.0, 1.0]
その楽曲の中の単語の存在度を示す特徴量です。
つまり、発声されている単語数が多いと speechiness は大きな値となります。
valence: float, [0.0, 1.0]
その楽曲の音楽的なポジティブ/ネガティブ性を示す特徴量です。
valence の値が大きいほど、その楽曲はポジティブ(Happy, Cheeful, euphoric: 楽しい、陽気、多幸的)です。逆に値が低いとネガティブ (sad, depressed, angry: 悲しい、抑圧された、怒り) な楽曲です。
tempo: float
楽曲のテンポを表すBPM値(推定値)です。
まとめ
個人的に興味深い特徴量は以下の5つです。
- danceability: ダンスミュージックっぽさ
- モダンな音楽でダンス音楽がどうかを識別するのはかなり重要
- 特にDJ, ランニング中の聴取向けの楽曲推薦に。
- liveness: ライブ音源らしさ
- speechiness: 単語の存在度
- 音読やラップのような音コンテンツを検出・推薦するのに使えそう
- acousticness: アコースティック音楽らしさ
- valence: 音楽的なポジティブ/ネガティブ性
- 全てのリスナーにとって聞かされる楽曲のムード(感情)は大事
- 歌詞と相反する場合はどう使うのがいいのだろうか?
解釈が容易で、様々な音コンテンツを考慮した特徴量設計はとても素晴らしいと感じました。音響・音楽信号処理を使わずに音楽データの統計的分析や機械学習・深層学習で利用できるのは非常に便利そうです。
一方で、高次な特徴量は処理がブラックボックス化されているため、本格的に利用する際には各特徴量の性質(分析する楽曲データに対して有効かどうか)を調べたほうが良さそうです。
なお、Spotify Web API は様々な機能が提供されています。
曲検索に関しては、以下の記事でまとめておりますのでご興味がありましたらお読みください。