Starting from a JSON structure, I would like to convert to a musicpy piece and then do a chord analysis as follows :
import json as js
import musicpy as mp
json=js.loads("""[{
"chd": "Cm7",
"time": 0.5,
"arp": 0.125,
"start": 0,
"inst": "Acoustic Grand Piano"
},
{
"chd": "Dsus",
"time": 0.5,
"arp": 0.125,
"start": 0.5,
"inst": "Acoustic Grand Piano"
},
{
"chd": "Caug7",
"time": 0.5,
"arp": 0.125,
"start": 1,
"inst": "Acoustic Grand Piano"
},
{
"chd": "Dadd2",
"time": 0.5,
"arp": 0.125,
"start": 1.5,
"inst": "Acoustic Grand Piano"
},
{
"chd": "Cm7",
"time": 0.5,
"arp": 0.125,
"start": 2,
"inst": "Acoustic Grand Piano"
},
{
"chd": "Dsus",
"time": 0.5,
"arp": 0.125,
"start": 2.5,
"inst": "Acoustic Grand Piano"
},
{
"chd": "Caug7",
"time": 0.5,
"arp": 0.125,
"start": 3,
"inst": "Acoustic Grand Piano"
},
{
"chd": "D,G,A,A# / Dadd2",
"time": 0.5,
"arp": 0.25,
"start": 3.5,
"inst": "Acoustic Grand Piano"
}
]""")
def convert_to_mp(chp : list, bpm : float=138, name: str='Progression 0') -> mp.piece:
"""Convert a chord-progression from a dict `chd` to a musicpy object
Args:
chp (list): chord progression
bpm (float): BPM to play the song at.
Returns:
mp.piece: musicpy piece from chord progression
"""
chord = [mp.C(i['chd']) % (i['time'], i['arp']) for i in chp]
inst = [i['inst'] for i in chp]
start = [i['start'] for i in chp]
bpm, chdnotes, _ = mp.piece(chord,inst,bpm,start,['0']*len(chord)).merge()
return mp.build(mp.track(chdnotes),bpm=bpm,name=name)
piece=convert_to_mp(chp=json, bpm=138, name='Progression 0')
mp.chord_analysis(piece.tracks[0])
[C4, D#4, G4, A#4, D4, G4, A4, C4, E4, G#4, A#4, D4, E4, F#4, A4, C4, D#4, G4, A#4, G4, C5, D5, G4, B4, D#5, F5, D4, E4, F#4, A4, D5, F#5, A5] with interval [0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.25, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.25, 0.125, 0.125, 0.125, 0.125, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.5]