そもそも、rekordboxとはフリーの音楽管理ソフトで、フォルダをインポートするだけで特に曲のキーの解析を自動で行ってくれ、DJにもよく使われているソフトです。そこからどんなキーが多く含まれているのか、XMLで出力はできましたが解析が面倒だったため自動化(?)して書いておきます
コード
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import tostring
import xmltodict
import json
import collections
from collections import Counter
tree = ET.parse('../mu.xml')
#ここでxmlファイルを読み込む
tree=tree.getroot()
t=tostring(tree)
dict = xmltodict.parse(t)
result = json.dumps(dict)
j = json.loads(result)
musicinfolist=[]
for m in j['DJ_PLAYLISTS']['COLLECTION']['TRACK']:
name=m["@Name"]
length=m["@TotalTime"]
bpm=m["@AverageBpm"]
tonality=m["@Tonality"]
musicinfolist.append([name,length,bpm,tonality])
for n,l,b,t in musicinfolist:
print(n,l,b,t)
#曲それぞれの名前、時間、BPM、曲のキー情報を表示
namel=[x[0] for x in musicinfolist]
lenl=[int(x[1]) for x in musicinfolist]
bpml=[float(x[2]) for x in musicinfolist]
tonality=[x[3] for x in musicinfolist]
print(sorted(lenl)
print(sorted(bpml))
print(sorted(tonality))
#時間、BPM、曲のキーそれぞれ元データ
import matplotlib.pyplot as plt
plt.hist(lenl,range(0,420))
plt.show()
#曲の長さ(秒)を0,420秒の範囲で可視化したヒストグラム
plt.hist(bpml,range(50,200))
plt.show()
#BPMを50,200の範囲で可視化したヒストグラム
c=Counter(tonality)
print(c.most_common())
c=sorted(c.items())
print(c)
plt.bar([x[0] for x in c], [x[1] for x in c])
plt.show()
#曲キーのABC順のヒストグラム
c=Counter(tonality)
c= sorted(c.items(), key=lambda x:x[1],reverse=True)![bandicam 2021-09-27 00-37-20-300.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522233/49f8760b-93a6-75ca-3915-300596d3c0ec.jpeg)
plt.bar([x[0] for x in c], [x[1] for x in c])
plt.show()
#曲キーの頻度順のヒストグラム
パッケージのxmltodictは、pip install xmltodict で入れてください。
pltは標準では無いかもしれません。
手持ちの1425曲で実行すると以下のようになりました。
↓曲キーの頻度順
元データ
[('Cm', 152), ('Dm', 138), ('Am', 126), ('Gm', 112), ('Bm', 112), ('Em', 108), ('Fm', 97), ('Dbm', 93), ('Bbm', 71), ('Abm', 53), ('Ebm', 52), ('F#m', 46), ('D', 40), ('C', 32), ('E', 30), ('F', 28), ('G', 28), ('Eb', 22), ('A', 21), ('Bb', 18), ('Ab', 14), ('Db', 12), ('F#', 10), ('B', 9), ('', 1)]
以上です