view vamp/frames.py @ 95:3e5791890b65

refactor, add process_frames
author Chris Cannam
date Mon, 02 Feb 2015 17:15:15 +0000
parents d91a2285fbb2
children 2370b942cd32
line wrap: on
line source
'''A high-level interface to the vampyhost extension module, for quickly and easily running Vamp audio analysis plugins on audio files and buffers.'''

import numpy

def frames_from_array(arr, step_size, frame_size):
    """Generate a list of frames of size frame_size, extracted from the input array arr at step_size intervals"""
    # presumably such a function exists in many places, but I need practice
    assert(step_size > 0)
    if arr.ndim == 1: # turn 1d into 2d array with 1 channel
        arr = numpy.reshape(arr, (1, arr.shape[0]))
    assert(arr.ndim == 2)
    n = arr.shape[1]
    i = 0
    while (i < n):
        frame = arr[:, i : i + frame_size]
        w = frame.shape[1]
        if (w < frame_size):
            pad = numpy.zeros((frame.shape[0], frame_size - w))
            frame = numpy.concatenate((frame, pad), 1)
        yield frame
        i = i + step_size