In [1]:
from collections import defaultdict
from joblib import Parallel, delayed
import pandas as pd
from tqdm import tqdm_notebook as tqdm
import os

In [2]:
import librosa
import numpy as np

In [3]:
from IPython.display import display

In [4]:
import jams
print(jams.__version__)


0.2.1

In [5]:
# Set a padding tolerance of 100ms
TOLERANCE = 0.1

# Set an alignment tolerance of 3s
ALIGN_TOLERANCE = 3.0

In [6]:
def merge_annotations(upper=None, lower=None):
    
    ann = jams.Annotation(namespace='multi_segment',
                          annotation_metadata=upper.annotation_metadata)
    
    try:
        ann.sandbox.update(**upper.sandbox)
    except AttributeError:
        pass
    
    try:
        ann.sandbox.update(**lower.sandbox)
    except AttributeError:
        pass
    
    # Add the uppers
    d_upper = upper.data.copy()
    d_upper['value'] = [{'label': _, 'level': 0} for _ in d_upper['value']]
    
    # Add the lowers
    d_lower = lower.data.copy()
    d_lower['value'] = [{'label': _, 'level': 1} for _ in d_lower['value']]
    
    ann.data = jams.JamsFrame.from_dataframe(pd.concat([d_upper, d_lower], ignore_index=True))
    
    return ann

In [7]:
def span_segment(ann=None, duration=None):
    
    if ann.namespace == 'segment_salami_upper':
        pre, post = 'YYYYY', 'ZZZZZ'
    elif ann.namespace == 'segment_salami_lower':
        pre, post = 'yyyyy', 'zzzzz'
    else:
        return
    
    frame = ann.data
    
    # Give a one-second buffer here
    if (frame['time'] > pd.Timedelta(duration + 1.0, unit='s')).any():
        raise RuntimeError('track length exceeded in observation: {0:3g}/{1:3g}'.format(
                frame['time'].max().total_seconds(),
                duration))
        
    # Drop any annotations where time > duration
    frame = jams.JamsFrame(frame[frame['time'] <= pd.Timedelta(duration, unit='s')])
    
    idx = frame['time'].argmin()
    min_time = frame['time'][idx]
    
    # If the minimum time is close enough to zero, just clamp it
    if pd.Timedelta(0) < min_time:
        if min_time <= pd.Timedelta(TOLERANCE, unit='s') or frame['value'][idx].lower() == 'silence':
            frame.loc[idx, 'time'] = pd.Timedelta(0)
            
        else:
            # We need to pad a new segment here
            
            frame.add_observation(time=0,
                                  duration=min_time.total_seconds(),
                                  value=pre, confidence=0)
            
        
    idx = (frame['time'] + frame['duration']).argmax()
    max_time = frame['time'][idx] + frame['duration'][idx]
    
    if max_time != pd.Timedelta(duration, unit='s'):
        if pd.Timedelta(duration - TOLERANCE, unit='s') <= max_time or frame['value'][idx].lower() == 'silence':
            frame.loc[idx, 'duration'] = pd.Timedelta(duration - frame['time'][idx].total_seconds(), unit='s')
            
        else:
            # Pad out a new segment here
            frame.add_observation(time=max_time.total_seconds(),
                                  duration=duration - max_time.total_seconds(),
                                  value=post, confidence=0)
    
    # Sort the rows
    frame.sort_values('time', inplace=True)
    
    ann.data = frame
    
def align_annotations(upper=None, lower=None):
    
    # Every upper-level segment should have a corresponding lower-level segment within TOLERANCE
    
    i_upper, l_upper = upper.data.to_interval_values()
    i_lower, l_lower = lower.data.to_interval_values()
    
    starts, ends = i_upper[:, 0], i_upper[:, 1]
    t_times = np.unique(np.ravel(i_lower))
    start_match = librosa.util.match_events(starts, t_times)
    end_match = librosa.util.match_events(ends, t_times)
    
    starts_adj = t_times[start_match]
    ends_adj = t_times[end_match]
    
    assert np.all(np.abs(starts_adj - starts) <= ALIGN_TOLERANCE), np.max(np.abs(starts - starts_adj))
    
    new_df = jams.JamsFrame()
        
    # Only add intervals with positive duration
    for s, t, l, c in zip(starts_adj, ends_adj, upper.data.value, upper.data.confidence):
        if t > s:
            new_df.add_observation(time=s, duration=t-s, value=l, confidence=c)
        
    upper.data = new_df

In [8]:
def fix_jams(jamsfile):
    
    J = jams.load(jamsfile)
    
    ann_dict = defaultdict(dict)
    
    for upper in J.search(namespace='segment_salami_upper'):
        name = upper.annotation_metadata.annotator.name
        try:
            
            span_segment(upper, duration=J.file_metadata.duration)
            ann_dict[name]['upper'] = upper
        except RuntimeError as exc:
            print(exc, jamsfile, name, 'upper\n')

    for lower in J.search(namespace='segment_salami_lower'):
        name = lower.annotation_metadata.annotator.name
        try:
            
            span_segment(lower, duration=J.file_metadata.duration)
            ann_dict[name]['lower'] = lower
    
        except RuntimeError as exc:
            print(exc, jamsfile, name, 'lower\n')

    for key in ann_dict:
        if len(ann_dict[key]) != 2:
            print('Align and merge failed: {}/{}'.format(jamsfile, key))
            continue
        try:
            align_annotations(**ann_dict[key])
            J.annotations.append(merge_annotations(**ann_dict[key]))
            pass
        except AssertionError as exc:
            print(exc, jamsfile, key)

    return J

In [9]:
files = jams.util.find_with_extension('/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/', 'jams')

In [10]:
for jfn in tqdm(files):
    J = fix_jams(jfn)
    J.save(jfn)


(AssertionError(39.009523999999999,), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_108.jams', u'Shuli Tang')
(RuntimeError('track length exceeded in observation: 288.392/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 289.948/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 294.104/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 401.914/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 273.183/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 288.392/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 289.948/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 294.104/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 272.904/262.322',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams', u'Shuli Tang', 'lower\n')
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_114.jams/Colin Hua
(RuntimeError('track length exceeded in observation: 382.595/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 382.563/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 375.583/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 383.919/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 378.392/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 382.595/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 399.216/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 383.849/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 383.919/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 383.896/268.513',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1170.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 518.478/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 549.878/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 453.88/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 547.062/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 518.525/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 518.478/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 549.878/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 518.432/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 547.062/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 518.525/321.228',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1198.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 304.855/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 373.029/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 262.594/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 305.045/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 304.692/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 364.414/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 373.029/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 356.635/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 356.566/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 304.692/203.259',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1324.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 548.49/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 570.776/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 547.341/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 547.759/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 548.479/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 548.49/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 570.776/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 572.511/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 547.759/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 548.479/419.5',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1482.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 332.51/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 332.904/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 336.229/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 281.263/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 324.917/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 332.51/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 332.904/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 336.229/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 281.263/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams', u'Shuli Tang', 'lower\n')
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_1562.jams/Colin Hua
(RuntimeError('track length exceeded in observation: 427.781/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 559.02/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 559.229/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 560.35/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 484.275/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 553.703/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 559.02/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 559.229/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 560.35/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 514.786/209.816',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_164.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 448.726/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 451.657/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 418.354/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 448.726/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 356.635/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 451.657/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 430.161/341.368',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams', u'Shuli Tang', 'lower\n')
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams/Colin Hua
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams/John Turner
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_302.jams/Shuli Tang
(RuntimeError('track length exceeded in observation: 484.508/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 484.461/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 437.42/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 487.837/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 481.768/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 484.508/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 484.461/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 487.38/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 487.837/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 481.768/178.364',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_444.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 249.665/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_458.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 246.967/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_458.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 249.665/240.065',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_458.jams', u'Evan S. Johnson', 'lower\n')
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_458.jams/Eleni Vasilia Maltas
(RuntimeError('track length exceeded in observation: 453.312/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 519.51/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 519.964/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 520.31/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 437.696/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 507.878/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 519.51/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 519.964/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 520.31/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 508.122/251.063',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_478.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 542.023/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 541.747/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 542.511/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 540.735/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 446.288/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 542.023/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 541.747/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 542.511/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 541.211/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 446.288/297.874',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_68.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 401.961/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 401.891/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 464.213/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 401.914/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 447.704/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 447.608/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 462.495/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 464.213/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 401.914/399.282',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams', u'Shuli Tang', 'lower\n')
Align and merge failed: /home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_78.jams/Eleni Vasilia Maltas
(RuntimeError('track length exceeded in observation: 173.314/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 268.446/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 141.619/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 142.663/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 140.04/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 224.955/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 268.446/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 259.808/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 260.435/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 215.667/52.7935',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_812.jams', u'Shuli Tang', 'lower\n')
(RuntimeError('track length exceeded in observation: 317.765/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Colin Hua', 'upper\n')
(RuntimeError('track length exceeded in observation: 317.277/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Eleni Vasilia Maltas', 'upper\n')
(RuntimeError('track length exceeded in observation: 317.556/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'John Turner', 'upper\n')
(RuntimeError('track length exceeded in observation: 317.742/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Evan S. Johnson', 'upper\n')
(RuntimeError('track length exceeded in observation: 294.243/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Shuli Tang', 'upper\n')
(RuntimeError('track length exceeded in observation: 317.765/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Colin Hua', 'lower\n')
(RuntimeError('track length exceeded in observation: 316.929/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Eleni Vasilia Maltas', 'lower\n')
(RuntimeError('track length exceeded in observation: 317.556/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'John Turner', 'lower\n')
(RuntimeError('track length exceeded in observation: 317.742/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Evan S. Johnson', 'lower\n')
(RuntimeError('track length exceeded in observation: 294.243/266.606',), '/home/uri/Projects/msaf-data/SPAM/scripts/out_dir/SALAMI_830.jams', u'Shuli Tang', 'lower\n')