Beispiel #1
0
def load_labeled_intervals(filename, delimiter=r'\s+'):
    '''
    overwrites https://github.com/craffel/mir_eval/blob/master/mir_eval/io.py#L208
    ends of intervals are not used later in evaluation, vut are needed for sanity check
    
    '''
    # Use our universal function to load in the events
    
    starts, ends, labels = load_delimited_variants(filename, delimiter)
    
    if ends is None: # add ends
        
        filename_base = remove_extension(filename); filename_wav = filename_base + '.wav'
        if not os.path.isfile(filename_wav):
            dir = ''
            while not os.path.isfile(filename_wav):
                dir = raw_input('cannot find {} \n Please enter folder where the wav file is:'.format(filename_wav))
                filename_wav = os.path.join(dir, os.path.basename(filename_wav))
        
        duration = get_duration_audio(filename_wav) # generate end timestamps from following start timestamps
#         duration = starts[-1] + 1 # fake last word to be 1 sec long
        ends = starts[1:]; ends = np.append(ends, duration) 
    
    starts, ends, labels = remove_dot_tokens(starts, ends,  labels) # special words  '.' are discarded
     
    # Stack into an interval matrix
    intervals = np.array([starts, ends]).T
    # Validate them, but throw a warning in place of an error
    try:
        util.validate_intervals(intervals)
    except ValueError as error:
        warnings.warn(error.args[0])

    return intervals, labels
Beispiel #2
0
def load_labeled_intervals(filename, delimiter=r'\s+'):
    '''
    overwrites https://github.com/craffel/mir_eval/blob/master/mir_eval/io.py#L208
    in order to be able to change the converters arguments of load_delimieted  to handle , instead of . in floating point vals 
    '''
    # Use our universal function to load in the events
    
    converter_comma = lambda val: float(val.replace(',', '.')) # replace ',' by '.'
    try:  # start times and end times given
        starts, ends, labels = load_delimited(filename, [converter_comma, converter_comma, str],
                                          delimiter)
    except Exception as e: # only start times given
        starts,  labels = load_delimited(filename, [converter_comma, str], delimiter)
        filename_wav = filename[:-9] + '.wav'  # remove .refs.lab and replace it with .wav. TODO make this logic clearer
        if os.path.isfile(filename_wav):
            duration = get_duration_audio(filename_wav) # generate end timestamps from following start timestamps
        else:
            duration = starts[-1] + 1  # fake last word to be 1 sec long
        ends = starts[1:]; ends.append(duration) 
    # Stack into an interval matrix
    intervals = np.array([starts, ends]).T
    # Validate them, but throw a warning in place of an error
    try:
        util.validate_intervals(intervals)
    except ValueError as error:
        warnings.warn(error.args[0])

    return intervals, labels
Beispiel #3
0
def load_labeled_intervals(filename, delimiter=r'\s+'):
    '''
    overwrites https://github.com/craffel/mir_eval/blob/master/mir_eval/io.py#L208
    ends of intervals are not used later in evaluation, vut are needed for sanity check
    
    '''
    # Use our universal function to load in the events

    starts, ends, labels = load_delimited_variants(filename, delimiter)

    if ends is None:  # add ends

        filename_base = remove_extension(filename)
        filename_wav = filename_base + '.wav'
        if not os.path.isfile(filename_wav):
            dir = ''
            while not os.path.isfile(filename_wav):
                dir = raw_input(
                    'cannot find {} \n Please enter folder where the wav file is:'
                    .format(filename_wav))
                filename_wav = os.path.join(dir,
                                            os.path.basename(filename_wav))

        duration = get_duration_audio(
            filename_wav
        )  # generate end timestamps from following start timestamps
        #         duration = starts[-1] + 1 # fake last word to be 1 sec long
        ends = starts[1:]
        ends = np.append(ends, duration)

    starts, ends, labels = remove_dot_tokens(
        starts, ends, labels)  # special words  '.' are discarded

    # Stack into an interval matrix
    intervals = np.array([starts, ends]).T
    # Validate them, but throw a warning in place of an error
    try:
        util.validate_intervals(intervals)
    except ValueError as error:
        warnings.warn(error.args[0])

    return intervals, labels