話題の記事

Spotify API、Alteryx、Tableauで中森明菜の名曲「DESIRE -情熱-」を分析する #Alteryx #Tableau

Get Up, Get Up, Get Up, Get Up, Burning Love
2019.03.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

どうも。DI部@大阪オフィスのtamaです。

Spotify APIは、Spotifyに存在する楽曲のデータを取得できるのですが、その中に一際面白そうなAPIがあったので、今回はそれを使って「DESIRE -情熱-」のデータを可視化してみたいと思います。

Spotify APIの「Get Audio Analysis for a Track」

使用するのは「Get Audio Analysis for a Track」というAPIです。実はまだベータ版ということもあり、タイムアウトが頻発しますが、なかなかおもしろいデータが取得できるAPIとなっております。

Spotify IDについて

このAPIに必要なものとして、対象曲のSpotify IDがあります。別のAPIから取得してもいいのですが、今回は「DESIRE -情熱-」狙いうちなので、普通にアプリからIDを確認します。

下記を参考に「Spotify URI」をコピーします。

「spotify:track:xxxxxxxxx」という値がコピーできますが、これのxxxxxxの部分がIDになります。これをパラメータとしてAPIに投げましょう。

実際にデータを取得する前に、一体どんなデータが取得できるのか見ていきたいと思います。

「Get Audio Analysis for a Track」で取得できるデータ(track, bar, beats, tatums)

trackの概要

楽曲全体に関するデータになります。テンポやキー等がわかります。

barsの概要

平たく言えば「小節」のことです。指定した楽曲を小節毎に分解したデータが取得できます。

データ詳細

データ 概要
start その小節の開始時間です。
duration その小節自体の時間です。
confidence その小節データの信頼度です。1に近いほど信頼できるデータである…と(私は)理解しています。

beatsの概要

Spotifyのドキュメント及び英和辞書を確認するかぎり、「拍」と解釈するのが近そうです。指定した楽曲を拍毎に分解したデータが取得できます。

データ詳細

データ 概要
start その拍の開始時間です。
duration その拍自体の時間です。
confidence その拍データの信頼度です。

Desireは何拍子?

一定の音の間隔のことを「拍」といいますが、その拍の1つのまとまりのことを「拍子」と言います。よく「この曲は4拍子だ」とか言いますよね。あと「三三七拍子」とかもありますね。

拍子は強拍と弱拍の組み合わせから成ります。そして、強拍から次の強拍が起こるまでの部分を「小節」といいます。

音楽が拍子を持つ場合には、通例小節の長さは拍子のひとまとまりに合わせられる。すなわちひとつの小節は強拍で始まり、次の強拍の直前で終わる。従って、n拍子の曲では、1小節にn拍を持つ。

つまり今回のデータで小節と拍の数を取得できたので、拍数を小節数で割れば、1小節あたりの拍数が出せるということになります。

取得したデータで(下記のダッシュボード参照)実際に計算してみると「4.07058824」となりました。つまり、Desireは4拍子だと言えます。

その曲が何拍子なのか、厳密には楽譜を見なければわかりません。しかし、聞けば大体はわかります。幼少期にピアノを習っていた私からすれば、Desireは間違いなく4拍子といえます。

tatumsの概要

ドキュメント曰く「聴者が知覚した音楽イベント(セグメント)のタイミングから直感的に推測される最も低い規則的なパルスの列」とのことです。…が、何が何やらわからないので、とりあえずビートをさらに細かくしたもの、と理解しておきます。

ちなみに私はこの概念を初めて知りました(ググっても情報があまり出てこず)。

データとしては、barsbeatsと全く同じです。

「Get Audio Analysis for a Track」で取得できるデータ(sections)

概要

ドキュメントには「セクションはリズムや音色の大きな変化によって定義されるものである。(コーラス、詩、ブリッジ、ギターソロなど)」とあります。これは、実際に曲を聞きながらデータを確認すると、結構面白いです(後述)。

楽器の系統別、あるいは曲の構成上での分け方。

データ詳細

データ 概要
start そのセクションの開始時間です。
duration そのセクション自体の時間です。
confidence そのセクションデータの信頼度です。
loudness そのセクションの音量(デシベル)です。主に他のセクションと比較して使う値みたいです。
tempo そのセクションの推定BPMです。
tempo_confidence 推定BPMデータの信頼度です。楽曲によっては、テンポ(拍)の無い部分とかがあると思いますが、そういったセクションでは、この値が低くなると思われます。
key そのセクションの推定キーです。0〜11までの値が入ります。「数字でどうやってキーがわかるんや」って話ですが、これはピッチクラス表記と呼ばれるものだそうです。
key_confidence 推定キーデータの信頼度です。キーの変更(転調)が多い曲は、この値が低くなる可能性がある…とドキュメントにあります。
mode ざっくり言うと、「メジャーかマイナー」かを判別するデータです(0ならマイナー、1ならメジャー)。また、ドキュメントには「例えばCメジャーとAマイナーは混同してしまう可能性がある」とあります。どういうことでしょう。

これは平行調と呼ばれるもので、例えばCメジャー(ハ長調)とAマイナー(イ短調)は、キーが異なるだけで、使用されている音は全く同じです。Spotifyのこのデータに関しては、こういった平行調は混同しやすいから気をつけろよ…と言っていると(私は)理解しています。 | | mode_confidence | モードデータの信頼度です。この値が低い場合は、前述した平行調などを意識する必要がある…のかな…。 | | time_signature | そのセクションの推定の拍子記号です。拍子記号というのは、1小節の中に音符が何個入るのか(何拍あるのか)ということを表すものです。「4分の4拍子」とか「8分の6拍子」とか言いますよね。それです。ト音記号とかヘ音記号の隣に書いてるやつです。 | | time_signature_confidence | 拍子記号データの信頼度です。 |

参考

「Get Audio Analysis for a Track」で取得できるデータ(segments)

概要

こちらは正直ちょっとまだちゃんと理解できていないのですが、セクションよりも(何ならtatumよりも)細かい単位の区切りであることは間違いなさそうです。音色やハーモニーが均一な部分で区切られるもので、通常は1セグメント1秒以内であることがほとんどです。

データ詳細

データ 概要
start そのセグメントの開始時間です。
duration そのセグメント自体の時間です。
confidence そのセグメントデータの信頼度です。
loudness_start ※下記参照
loudness_end セグメントの音が終わる時間です。
pitches ※下記参照
timbre ※下記参照

loudness_start

セグメントの音の始まる時間、音量のピーク、音量ピークの時間、のデータです。これらを組み合わせてセグメント内の「アタック」について分析することができます。

pitches

なかなか理解するのが難しいデータが登場しました。

各セグメント毎に12個のデータが格納されています。1つ1つは0〜1の値を持ちます。これはそれぞれ(先程出てきた)ピッチクラスのC〜Bに対応しており、そのセグメントで強く出ている音ほど1に近い値になっているようです。ちなみに、ノイズのような騒音みたいな部分は全ての値が1に近く、音がキレイに取れるところは、1に近い値と0に近い値にハッキリ分かれます。

例えば、Cメジャーコードが使われている部分の場合、C、E、G(ド、ミ、ソ)、データで言うと0, 4, 7の値が大きくなるはずです(Cメジャーコードは「ドミソ」ですね)。

これら12個のデータは、そのセグメントのピッチの周波数の対数パワースペクトル値の組み合わせにより算出されたものである…とドキュメントにはあります。

timbre

「何のデータ」かはわかるのですが、どうやって算出されているのか、という点については、Pitches以上に難しいです…。

timbreは音色という意味。すごく平たく言うと、音色を数値で表したデータになります。ドキュメント曰く「音色とは、さまざまな種類の楽器や声を区別する音符、または音の質のことである。 これは、音のカラー、音のテクスチャー、音の質などとも呼ばれる複雑な概念である」とあります。

timbreのデータ自体は、pitchesと同じく、セグメント毎に12個あり、それぞれが0を中心とした値を持ちます(最大値は無制限)。これらは、時間スペクトルを高レベルに抽象化した値が重要な順に並んだものです。

ここからは本当に自信が無いのですが、その時間スペクトルについて、Spotify側で、基本となる12個の基底関数(=テンプレートセグメント)を持っており、重み付けの係数がかけられた、これらの基底関数の線形結合が、算出された値になる…らしいです…。

timbre = c1 x b1 + c2 x b2 + … + c12 x b12
  • c1〜c12 =(重み付けの)係数
  • b1〜b12= 12個の基底関数

ちょっと何言ってるかわからない状態ですが、詳細は下記をご覧ください。

AlteryxでAPIからデータを取得する

というわけで、実際に「DESIRE -情熱-」のデータを取得してみたいと思います。

トークンの取得

そもそもSpotify APIを利用するためにはトークンが必要です。トークンについては、下記をご覧ください。

ワークフロー全体

今回は下記のワークフローを作成しました。

APIの認証部分

エンドポイントを組み立てて、そこにトークンと楽曲にIDを投げます。まあどんなやり方でもいいのですが、私はテキスト入力ツールで、URLとIDを別々に入力し、フォーミュラツールで1つに合体、トークンはダウンロードツール内で設定しました(トークン文字列の前に「Bearer」という文字列が必要なことに注意)。

Tableau用のデータの用意

データを取得した後はフィルタツールで、barsやbeatsなど、種別毎に完全にデータを分けました。これらはそれぞれ紐づく用なデータは無いため、それぞれ独立したデータとして扱うことにしました。また、クロスタブで各項目をカラムに変換しておきます。

Tableauで可視化する

ダッシュボード

今回作成したダッシュボードはTableau Punlicにパブリッシュしています。よかったらどうぞ(ここに埋め込むにはちょっとサイズがアレでした)。

※Spotifyを意識したカラーリングにしてみました。

楽曲の基本データ

Desireの基本的なデータです。テンポが80っていうところに違和感を感じますが、まあデータはデータということで…。

楽曲のセクションを検証

上述した「セクション」ですが、どこで区切られているのでしょうか。実際に検証してみました。先に結論から言うと、概ねしっくり来る区切り方がされており、Spotifyの楽曲データ恐るべし…という感じです。

セクションの終了時間 説明
〜22秒 イントロ。かの有名な「ゲラッゲラッゲラッゲラッバーニンラアアアアアアア(明菜ビブラート)」の一発目の部分まで。
〜1分17秒 いわゆる1Aメロ〜1Bメロの部分。「〜恋人たちね」から、サビの「まっさかさーまーにー」のちょうど間くらいまで。いい感じに区切られていると思います。
〜1分33秒 サビの「夢中になれないなんてね〜」のあたりまで。ここはちょっと変なところで区切られています。
〜1分51秒 サビの最後、「ゲラッゲラッゲラッゲラッバーニンハアアアアアアア(明菜ビブラート)」が終わった後まで。
〜2分12秒 サビ終わりから短めのギターソロが入り、2Aメロが始まった直後くらいまで。若干Aメロに入っちゃってますが、納得感のあるセクションだと思います。
〜2分30秒 「〜(夜の)孤独な長さ」あたりまで。若干ズレてますが、概ね「2Bメロまで」という感じで区切られています。
〜2分53秒 2Bメロ終わりの「〜スキャンダルさえ」あたりまで。ここも多少ズレてますが、2サビ前までという感じなのでしょうか。
〜3分20秒 「〜(見る前に醒めてしまったら)何にも」あたりまで。この後の「ドゥン!ドゥン!ドゥン!」というところの直前になります(有名な振り付けのところ)。1番の時と若干切れるところが異なります。
〜3分33秒 「ゲラッゲラッゲラッゲラッバーニンラアアアアアアア(明菜ビブラート)」が終わった後まで。最後のサビの直前になります。
〜3分55秒 「〜夢中になれないなんてね」ときて「ドゥン!ドゥン!ドゥン!」のところあたりまで。毎回微妙に異なるものの、音的にわかりやすいところなので、サビは毎回ここらへんでセクションを区切られています。
〜4分2秒 ラスト。「ゲラッゲラッゲラッゲラッバーニンハアアアアアアア(明菜ビブラート)」→「ゲラッゲラッゲラッゲラッバーニンラアアアアアアア(明菜ビブラート)」という最後のサビになります。

セクション別の各種データについて

Spotifyのデータ曰く、セクション毎のキーやメジャーorマイナーはご覧の通りです。…正直合ってるかは何ともいえないのが悲しいところです…(ピアノをやっていた幼少期に戻ればあるいは…)。

弾き語り用にコードを掲載しているサイト等を参考にするとこの曲は「F#m」っぽいのですが、trackkeymodeが「F#m」で、confidenceが高めのセクションも大体「F#m」なので、概ねあっているのではないかと思っています。

また、loudnessが大きい2箇所はサビ最後の「ゲラッゲラッゲラッ(略」のところでした。逆にAメロは低いです。ここらへんはわかりやすいですね。

当然ですが、テンポはほぼ一定という結果でした。

PitcheとTimbre

こちらのデータですが、どう可視化したものかなかなか思いつかなかったのですが、とりあえず棒グラフにしてみました。

各セグメントのstartをページに配置し、自動再生することで、曲を再生した時のpitchとtimbreの変化を疑似体験できるようにしてみました。特にこれといった発見はないです。

ちなみにpitchのグラフですが、鍵盤に対応した色にしています(本当は鍵盤の画像を合わせたかったのですが、黒鍵とグラフの位置調整がしっくりこなかったのでやめました)。

おわりに

中森明菜の「DESIRE -情熱-」は名曲ということがわかりましたね。

詳細すぎて解釈が非常な困難なデータもありましたが、非常に興味深いデータがとれるSpotify。ぜひみなさんも使ってみて下さい(そして私にtimbreデータのわかりやすい説明をしてください…)。