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
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)