3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rekordboxのxmlコレクション情報をPythonで正規化し可視化

Last updated at Posted at 2021-09-26

そもそも、rekordboxとはフリーの音楽管理ソフトで、フォルダをインポートするだけで特に曲のキーの解析を自動で行ってくれ、DJにもよく使われているソフトです。そこからどんなキーが多く含まれているのか、XMLで出力はできましたが解析が面倒だったため自動化(?)して書いておきます

コード

rekordbox.py
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曲で実行すると以下のようになりました。

↓曲の長さ
bandicam 2021-09-27 00-29-31-387.jpg

↓BPM分布
bandicam 2021-09-27 00-29-39-039.jpg

↓曲キーのABC順
bandicam 2021-09-27 00-29-53-336.jpg

↓曲キーの頻度順

bandicam 2021-09-27 00-37-20-300.jpg

元データ
[('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)]

以上です

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?