view vamp/process.py @ 83:fbd084b81ece

naming: plugin output and parameter descriptors snake_case
author Chris Cannam
date Wed, 21 Jan 2015 12:46:33 +0000
parents a11b57e9fb0b
children d91a2285fbb2
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 vampyhost
import frames
import load

def load_and_query(data, sampleRate, key, parameters):
    plug, stepSize, blockSize = load.load_and_configure(data, sampleRate, key, parameters)
    plugOuts = plug.get_outputs()
    outIndices = dict(zip([o["identifier"] for o in plugOuts],
                          range(0, len(plugOuts))))  # id -> n
    return plug, stepSize, blockSize, outIndices
    

def process_multiple_outputs(data, sampleRate, key, outputs, parameters = {}):
#!!! docstring

    plug, stepSize, blockSize, outIndices = load_and_query(data, sampleRate, key, parameters)

    for o in outputs:
        assert o in outIndices

    ff = frames.frames_from_array(data, stepSize, blockSize)
    fi = 0

    for f in ff:
        results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sampleRate))
        # results is a dict mapping output number -> list of feature dicts
        for o in outputs:
            outix = outIndices[o]
            if outix in results:
                for r in results[outix]:
                    yield { o: r }
        fi = fi + stepSize

    results = plug.get_remaining_features()
    for o in outputs:
        outix = outIndices[o]
        if outix in results:
            for r in results[outix]:
                yield { o: r }

    plug.unload()

def process(data, sampleRate, key, output = "", parameters = {}):
#!!! docstring

    plug, stepSize, blockSize, outIndices = load_and_query(data, sampleRate, key, parameters)

    if output == "":
        outix = 0
    else:
        assert output in outIndices
        outix = outIndices[output]
    
    ff = frames.frames_from_array(data, stepSize, blockSize)
    fi = 0

    for f in ff:
        results = plug.process_block(f, vampyhost.frame_to_realtime(fi, sampleRate))
        # results is a dict mapping output number -> list of feature dicts
        if outix in results:
            for r in results[outix]:
                yield r
        fi = fi + stepSize

    results = plug.get_remaining_features()
    if outix in results:
        for r in results[outix]:
            yield r

    plug.unload()