Example #1
0
def abstract_cartoon(wave,
                     window_size=64,
                     resample_size=32768,
                     window_func=signal.hann,
                     freq=False,
                     norm=True):
    #whole wave analysis using a set transform window
    #TODO: resample the "cartoon" to a certain length and find trend.
    #resample wave to a set length
    resampled_wave = signal.resample(wave.data, resample_size)
    sr = wave.sr
    #segmentation:
    segments = fileio.segment(resampled_wave, window_size)

    #TODO: test this
    #try frequency:
    if freq:
        transformed_segments = [fft_to_freq(fft_extract(seg, window_func), sr, 1)[0] for seg in segments]
    else:
        transformed_segments = [fft_extract(seg, window_func).max() for seg in segments]

    #ft = fftpack.dct(wave.data * window_type(len(wave.data)))
    #window this?
    transformed_segments = syllable.moving_window(transformed_segments, window_size, window_func)
    if norm:
        transformed_segments = normalize(transformed_segments)
    #1st derivative for trend detection:
    #return np.diff(transformed_segments)
    return transformed_segments
Example #2
0
def segmentation(wave, seglen=256, topn=1):
    sr = wave.sr
    fft_result = [feature.fft_extract(x) for x in fileio.segment(wave.data, seglen)]
    freq_at_each_step = [feature.fft_to_freq(fft_res, sr, topn) for fft_res in fft_result]
    amp_at_each_step = [x.real.max() for x in fft_result]
    return amp_at_each_step, np.hstack(freq_at_each_step)