# HG changeset patch # User Chris Cannam # Date 1421229153 0 # Node ID 3db99d3f2e30685d0653c13cdc34b056294190bd # Parent 5e7bda1d5e9ac65a9d0c000624390f36239994f4 Start Python module, add framer diff -r 5e7bda1d5e9a -r 3db99d3f2e30 test/test_frames.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/test_frames.py Wed Jan 14 09:52:33 2015 +0000 @@ -0,0 +1,22 @@ + +import vamp +import numpy as np + +def to_lists(arrs): + return [list([list(r) for r in f]) for f in arrs] + +def test_frames_from_1d_buffer(): + buf = np.arange(6) + ff = to_lists(vamp.framesFromArray(buf, 2, 2)) + assert(ff == [[[0,1]],[[2,3]],[[4,5]]]) + ff = to_lists(vamp.framesFromArray(buf, 1, 2)) + assert(ff == [[[0,1]],[[1,2]],[[2,3]],[[3,4]],[[4,5]],[[5,0]]]) + +def test_frames_from_2d_buffer(): + buf = np.array([np.arange(6),np.arange(6,12)]) + ff = to_lists(vamp.framesFromArray(buf, 2, 2)) + assert(ff == [[[0,1],[6,7]],[[2,3],[8,9]],[[4,5],[10,11]]]) + ff = to_lists(vamp.framesFromArray(buf, 1, 2)) + assert(ff == [[[0,1],[6,7]],[[1,2],[7,8]],[[2,3],[8,9]],[[3,4],[9,10]],[[4,5],[10,11]],[[5,0],[11,0]]]) + + diff -r 5e7bda1d5e9a -r 3db99d3f2e30 vamp/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vamp/__init__.py Wed Jan 14 09:52:33 2015 +0000 @@ -0,0 +1,32 @@ +'''A high-level interface to the vampyhost extension module, for quickly and easily running Vamp audio analysis plugins on audio files and buffers.''' + +import vampyhost +import numpy + +def listPlugins(): + return vampyhost.listPlugins() + +def framesFromArray(arr, stepSize, frameSize): + """Generate a list of frames of size frameSize, extracted from the input array arr at stepSize intervals""" + # presumably such a function exists in many places, but I need practice + assert(stepSize > 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 + frameSize] + w = frame.shape[1] + if (w < frameSize): + pad = numpy.zeros((frame.shape[0], frameSize - w)) + frame = numpy.concatenate((frame, pad), 1) + yield frame + i = i + stepSize + +def process(data, samplerate, key, parameters, outputs): + plug = vampyhost.loadPlugin(key, samplerate, vampyhost.AdaptNone) ##!!! input domain + stepSize = plug.getPreferredStepSize() + blockSize = plug.getPreferredBlockSize() + ff = framesFromArray(data, stepSize, blockSize) + return True