annotate vamp/load.py @ 122:26f75b221828

Make sure M_PI is defined when using VC++
author Chris Cannam
date Tue, 23 Jun 2015 10:48:52 +0100
parents 2370b942cd32
children b8fe675f9c3f
rev   line source
Chris@117 1 #!/usr/bin/env python
Chris@117 2
Chris@117 3 # Python Vamp Host
Chris@117 4 # Copyright (c) 2008-2015 Queen Mary, University of London
Chris@117 5 #
Chris@117 6 # Permission is hereby granted, free of charge, to any person
Chris@117 7 # obtaining a copy of this software and associated documentation
Chris@117 8 # files (the "Software"), to deal in the Software without
Chris@117 9 # restriction, including without limitation the rights to use, copy,
Chris@117 10 # modify, merge, publish, distribute, sublicense, and/or sell copies
Chris@117 11 # of the Software, and to permit persons to whom the Software is
Chris@117 12 # furnished to do so, subject to the following conditions:
Chris@117 13 #
Chris@117 14 # The above copyright notice and this permission notice shall be
Chris@117 15 # included in all copies or substantial portions of the Software.
Chris@117 16 #
Chris@117 17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Chris@117 18 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Chris@117 19 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Chris@117 20 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
Chris@117 21 # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Chris@117 22 # CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
Chris@117 23 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Chris@117 24 #
Chris@117 25 # Except as contained in this notice, the names of the Centre for
Chris@117 26 # Digital Music and Queen Mary, University of London shall not be
Chris@117 27 # used in advertising or otherwise to promote the sale, use or other
Chris@117 28 # dealings in this Software without prior written authorization.
Chris@117 29
Chris@56 30 '''A high-level interface to the vampyhost extension module, for quickly and easily running Vamp audio analysis plugins on audio files and buffers.'''
Chris@56 31
Chris@56 32 import vampyhost
Chris@56 33
Chris@79 34 def list_plugins():
Chris@98 35 """Obtain a list of plugin keys for all currently installed Vamp plugins.
Chris@98 36
Chris@98 37 The returned value is a list of strings, each of which is the key
Chris@98 38 for one plugin. (Note that a plugin may have multiple outputs, if
Chris@98 39 it computes more than one type of feature.)
Chris@98 40
Chris@98 41 To query the available outputs and category of a plugin, you may
Chris@98 42 use vamp.get_outputs_of() and vamp.get_category_of(). Further
Chris@98 43 information may be retrieved by loading the plugin and querying
Chris@98 44 its info dictionary using the low-level functions in the
Chris@98 45 vamp.vampyhost extension module.
Chris@98 46
Chris@98 47 To make use of a plugin to extract features from audio data, pass
Chris@98 48 the plugin key and optionally an output identifier to
Chris@98 49 vamp.process() or vamp.collect().
Chris@98 50 """
Chris@79 51 return vampyhost.list_plugins()
Chris@56 52
Chris@98 53 def get_outputs_of(key):
Chris@98 54 """Obtain a list of the output identifiers for the given plugin key.
Chris@98 55 """
Chris@98 56 return vampyhost.get_outputs_of(key)
Chris@98 57
Chris@98 58 def get_category_of(key):
Chris@98 59 """Obtain the category descriptor, if any, for the given plugin key.
Chris@98 60
Chris@98 61 The returned value is a list of descriptor terms, from least
Chris@98 62 specific to most specific. The list may be empty if no category
Chris@98 63 information is found for the plugin.
Chris@98 64 """
Chris@98 65 return vampyhost.get_category_of(key)
Chris@98 66
Chris@84 67 def load_and_configure(data, sample_rate, key, parameters):
Chris@98 68 """Load the plugin with the given key at a given sample rate,
Chris@98 69 configure it with the parameter keys and values in the given
Chris@98 70 parameter dictionary, and initialise it with its preferred step
Chris@98 71 and block size. The channel count is taken from the shape of the
Chris@98 72 data array provided.
Chris@98 73 """
Chris@82 74
Chris@84 75 plug = vampyhost.load_plugin(key, sample_rate,
Chris@82 76 vampyhost.ADAPT_INPUT_DOMAIN +
Chris@82 77 vampyhost.ADAPT_CHANNEL_COUNT)
Chris@64 78
Chris@80 79 plug.set_parameter_values(parameters)
Chris@68 80
Chris@84 81 step_size = plug.get_preferred_step_size()
Chris@84 82 block_size = plug.get_preferred_block_size()
Chris@68 83
Chris@84 84 if block_size == 0:
Chris@84 85 block_size = 1024
Chris@84 86 if step_size == 0:
Chris@84 87 step_size = block_size ##!!! or block_size/2, but check this with input domain adapter
Chris@68 88
Chris@68 89 channels = 1
Chris@68 90 if data.ndim > 1:
Chris@68 91 channels = data.shape[0]
Chris@68 92
Chris@95 93 if plug.initialise(channels, step_size, block_size):
Chris@95 94 return (plug, step_size, block_size)
Chris@95 95 else:
Chris@95 96 raise "Failed to initialise plugin"