プログラム日記φ(..)

おもにPython関係のプログラムメモ

librosaで同じテンポ(BPM)のYouTube音楽動画を表示してみる

前回、librosaで音楽楽曲のテンポ(BPM)を求めてみましたが

 

memomemokun.hateblo.jp

 

折角なので、librosaで求めた楽曲のテンポを元に、指定した任意の曲のテンポに近い曲のYouTube動画を表示してみることに。

 

まずは、同じ曲を何度もlibrosaで解析するのは面倒なのと時間もかかるので、「mp3」というディレクトリーの中に「曲番号.mp3」という形式のmp3ファイルがあるとして、librosaで求めた楽曲のテンポをMySQLに突っ込んでおいて

 

import MySQLdb
import librosa
import numpy as np
import glob
import re

music_db = 'DB名'
music_db_host = 'ホスト名'
music_db_port = 'ポート番号'
music_db_user = 'ユーザー名'
music_db_passwd = 'パスワード'

# 楽曲のテンポをMySQLに登録する
def loadTempo(mp3Name):

    # mp3番号取り出し
    m = re.search(r"mp3/([0-9]+).mp3", mp3Name)
    seq = int(m.group(1))

    # mp3読み込み
    y, sr = librosa.load(mp3Name)

    # テンポとビートの抽出
    tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)


    # データ出力
    conn = MySQLdb.connect(db=music_db, host=music_db_host, port=music_db_port ,user=music_db_user, passwd=music_db_passwd)
    cursor = conn.cursor()

    sql = 'delete from tempo where seq=%d' % seq
    cursor.execute( sql )

    sql = 'insert into tempo values (%d, %f)' % (seq, tempo)
    cursor.execute( sql )

    cursor.close()
    conn.close()

    return tempo


if __name__ == "__main__":

    mp3s = glob.glob('mp3/*.mp3')
    for mp3 in mp3s:
        tempo = loadTempo(mp3)
        #print mp3, tempo


 

あとは、いくつか指定した曲と同じテンポの曲をDBから抽出して、抽出した曲と同じYouTube動画を表示してみると、こんな感じ。

 

結果1

テンポ75の雨宮天さんの「 奏(かなで)」と同じテンポの曲を表示してみると 

ほぼほぼ正しい結果が得られてますが、フジファブリックの「 徒然モノクローム」とかは倍テンポじゃないかな。。。
 

 

曲目リスト
BPM(75) 藤宮香織(CV:雨宮天) / 奏(かなで)
BPM(75) スキマスイッチ / 奏 (かなで)
BPM(75) コブクロ / 蕾(つぼみ)
BPM(75) 木山裕策 / home
BPM(75) 清水 翔太 feat.仲宗根 泉(HY) / 366日
BPM(75) UVERworldクオリア
BPM(75) 熊木杏里 / 誕生日 (2012 ver.)
BPM(75) 高橋優 / 陽はまた昇る
BPM(75) Superfly / 輝く月のように
BPM(75) フジファブリック / 徒然モノクローム
BPM(75) 福山雅治 / 誕生日には真白な百合を
BPM(75) petit milady / Ma Cherie
BPM(75) 元ちとせ / 語り継ぐこと
BPM(75) 柴田 淳 / 今夜、君の声が聞きたい
BPM(75) 三代目 J Soul Brothers from EXILE TRIBE / 花火
BPM(75) ISSA × SoulJa + 峯村優衣 + 藤田杏奈 / i love u
BPM(75) 詩音 / NEVER EVER
BPM(75) JAMOSA / STAND UP
BPM(75) Home Grown横浜横須賀道路 feat.横山剣
BPM(75) VADER & TAK-Z RYO the SKYWALKER / 癒やし TRIBUTE (Original)
BPM(75) JAMOSA / ROSE~エールを贈るよ~feat. lecca
BPM(75) ハナレグミオリビアを聴きながら
BPM(75) KAMEN RIDER GIRLS / The World ~everybody's jump~
BPM(75) 森高千里渡良瀬橋
BPM(75) しおり / Smile~君は一人じゃない~
BPM(75) ロードオブメジャー / 親愛なるあなたへ...
BPM(75) miwa / めぐろ川
BPM(75) 東京プリンとたいせつな仲間たち / 明日笑っていられるように
BPM(75) 爆風スランプ / 大きな玉ねぎの下で~はるかなる想い
BPM(75) 城南海 / ピアノ

 

結果2

テンポ143のflumpoolの「 ビリーバーズ・ハイ」と同じテンポの曲を表示してみると

こちらも、ほぼほぼ正しい結果が得られてますが、Aimer(エメ) の「あなたに出会わなければ~夏雪冬花~」はテンポ143よりスローだよね〜〜。。。
 

 

曲目リスト
BPM(143) flumpoolビリーバーズ・ハイ
BPM(143) 平井 堅 / グロテスク feat. 安室奈美恵
BPM(143) きゃりーぱみゅぱみゅ / ファミリーパーティー
BPM(143) 椎名林檎カプチーノ
BPM(143) 後ろから這いより隊G太陽曰く燃えよカオス
BPM(143) さよならポニーテール / 新世界交響楽
BPM(143) 柴咲コウ / ラブサーチライト
BPM(143) E-girls / Follow Me
BPM(143) ももいろクローバーZ / GOUNN
BPM(143) スガ シカオ / アストライド
BPM(143) I-1 Club / 極上スマイル
BPM(143) 椎名林檎 / 青春の瞬き
BPM(143) 氣志團結婚闘魂行進曲「マブダチ」
BPM(143) チームしゃちほこ / マジ感謝
BPM(143) 島谷ひとみ / 深紅
BPM(143) AKB48 / 愛しきライバル
BPM(143) ももいろクローバーZみてみて☆こっちっち
BPM(143) サカナクションアイデンティティ
BPM(143) Last Note. / セツナトリップ (feat. GUMI)
BPM(143) きゃりーぱみゅぱみゅ / つけまつける
BPM(143) Aimer(エメ) / あなたに出会わなければ~夏雪冬花~
BPM(143) れるりり / Knife (feat. 初音ミク&鏡音リン&鏡音レン)
BPM(143) 水樹奈々 / 愛の星
BPM(143) 堀江美都子 / セーラースターソング
BPM(143) Jumpin' / BYUUUNN!!
BPM(143) 米津玄師 / ポッピンアパシー
BPM(143) Hi-Standard / MY FIRST KISS
BPM(143) AKB48さよならクロール
BPM(143) MAN WITH A MISSION / Take What U Want
BPM(143) モーニング娘。恋愛ハンター

 

ということで、

 

librosaで実際の楽曲音源ファイルから楽曲のテンポ(BPM)求めてみると結果は「ほぼほぼ正しい」のですが、曲によってはテンポの求め方に調整が必要かもしれませんねという結果に。

 

librosaでより正確に楽曲のテンポを求める手法があるのだろうか?

要調査ということで。