In [1]:
import os

from joblib import Parallel, delayed
from tqdm import tqdm_notebook as tqdm
import pickle
import pandas as pd

import jams
import numpy as np

import muda

In [2]:
def root(x):
    return os.path.splitext(os.path.basename(x))[0]

AUDIO = jams.util.find_with_extension('/home/bmcfee/data/eric_chords/audio/', 'mp3')
ANNOS = jams.util.find_with_extension('/home/bmcfee/data/eric_chords/references_v2/', 'jams')

# Make sure there are the same number of files
assert len(AUDIO) == len(ANNOS)

# And that they're in agreement
assert all([root(_1) == root(_2) for (_1, _2) in zip(AUDIO, ANNOS)])

In [3]:
OUTDIR = '/home/bmcfee/working/chords/augmentation/'

In [4]:
!mkdir -p {OUTDIR}

In [5]:
def augment(afile, jfile, deformer, outpath):
    
    jam = muda.load_jam_audio(jfile, afile)
    
    base = root(afile)
    outfile = os.path.join(outpath, base)
    
    for i, jam_out in enumerate(deformer.transform(jam)):
        muda.save('{}.{}.flac'.format(outfile, i),
                  '{}.{}.jams'.format(outfile, i),
                 jam_out, strict=False)

In [6]:
# Create the augmentation engine
pitcher = muda.deformers.PitchShift(n_semitones=[-1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6])

In [7]:
with open('/home/bmcfee/working/chords/muda.pkl', 'wb') as fd:
    pickle.dump(pitcher, fd)

In [8]:
Parallel(n_jobs=20, verbose=10)(delayed(augment)(aud, jam, pitcher, OUTDIR) for (aud, jam) in zip(AUDIO, ANNOS));


[Parallel(n_jobs=20)]: Done   1 tasks      | elapsed:   45.7s
[Parallel(n_jobs=20)]: Done  10 tasks      | elapsed:   57.0s
[Parallel(n_jobs=20)]: Done  21 tasks      | elapsed:  1.6min
[Parallel(n_jobs=20)]: Done  32 tasks      | elapsed:  2.2min
[Parallel(n_jobs=20)]: Done  45 tasks      | elapsed:  3.0min
[Parallel(n_jobs=20)]: Done  58 tasks      | elapsed:  3.6min
[Parallel(n_jobs=20)]: Done  73 tasks      | elapsed:  4.4min
[Parallel(n_jobs=20)]: Done  88 tasks      | elapsed:  5.2min
[Parallel(n_jobs=20)]: Done 105 tasks      | elapsed:  6.1min
[Parallel(n_jobs=20)]: Done 122 tasks      | elapsed:  7.2min
[Parallel(n_jobs=20)]: Done 141 tasks      | elapsed:  8.2min
[Parallel(n_jobs=20)]: Done 160 tasks      | elapsed:  9.2min
[Parallel(n_jobs=20)]: Done 181 tasks      | elapsed: 10.4min
[Parallel(n_jobs=20)]: Done 202 tasks      | elapsed: 11.5min
[Parallel(n_jobs=20)]: Done 225 tasks      | elapsed: 12.8min
[Parallel(n_jobs=20)]: Done 248 tasks      | elapsed: 14.1min
[Parallel(n_jobs=20)]: Done 273 tasks      | elapsed: 15.7min
[Parallel(n_jobs=20)]: Done 298 tasks      | elapsed: 17.0min
[Parallel(n_jobs=20)]: Done 325 tasks      | elapsed: 18.5min
[Parallel(n_jobs=20)]: Done 352 tasks      | elapsed: 20.0min
[Parallel(n_jobs=20)]: Done 381 tasks      | elapsed: 21.3min
[Parallel(n_jobs=20)]: Done 410 tasks      | elapsed: 22.8min
[Parallel(n_jobs=20)]: Done 441 tasks      | elapsed: 24.3min
[Parallel(n_jobs=20)]: Done 472 tasks      | elapsed: 26.0min
[Parallel(n_jobs=20)]: Done 505 tasks      | elapsed: 27.8min
[Parallel(n_jobs=20)]: Done 538 tasks      | elapsed: 29.5min
[Parallel(n_jobs=20)]: Done 573 tasks      | elapsed: 31.6min
[Parallel(n_jobs=20)]: Done 608 tasks      | elapsed: 33.6min
[Parallel(n_jobs=20)]: Done 645 tasks      | elapsed: 35.8min
[Parallel(n_jobs=20)]: Done 682 tasks      | elapsed: 38.0min
[Parallel(n_jobs=20)]: Done 721 tasks      | elapsed: 39.9min
[Parallel(n_jobs=20)]: Done 760 tasks      | elapsed: 42.2min
[Parallel(n_jobs=20)]: Done 801 tasks      | elapsed: 44.1min
[Parallel(n_jobs=20)]: Done 842 tasks      | elapsed: 46.6min
[Parallel(n_jobs=20)]: Done 885 tasks      | elapsed: 48.8min
[Parallel(n_jobs=20)]: Done 928 tasks      | elapsed: 51.0min
[Parallel(n_jobs=20)]: Done 973 tasks      | elapsed: 53.5min
[Parallel(n_jobs=20)]: Done 1018 tasks      | elapsed: 55.9min
[Parallel(n_jobs=20)]: Done 1065 tasks      | elapsed: 58.8min
[Parallel(n_jobs=20)]: Done 1112 tasks      | elapsed: 61.5min
[Parallel(n_jobs=20)]: Done 1161 tasks      | elapsed: 66.1min
[Parallel(n_jobs=20)]: Done 1217 out of 1217 | elapsed: 71.1min finished