view vamp/process.py @ 80:de501b7e165a

naming: PyPluginObject methods snake_case
author Chris Cannam
date Wed, 21 Jan 2015 12:31:32 +0000
parents 650f0697812f
children a11b57e9fb0b
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 loadAndQuery(data, sampleRate, key, parameters):
    plug, stepSize, blockSize = load.loadAndConfigureFor(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 processMultipleOutputs(data, sampleRate, key, outputs, parameters = {}):
#!!! docstring

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

    for o in outputs:
        assert o in outIndices

    ff = frames.framesFromArray(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 = loadAndQuery(data, sampleRate, key, parameters)

    if output == "":
        outix = 0
    else:
        assert output in outIndices
        outix = outIndices[output]
    
    ff = frames.framesFromArray(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()