Mercurial > hg > vampy
changeset 10:8e9fbe4dc94d
more examples and some bug fixes
author | fazekasgy |
---|---|
date | Fri, 13 Jun 2008 17:28:22 +0000 |
parents | d2d36e7d2276 |
children | 4610f2b8477d |
files | README |
diffstat | 1 files changed, 42 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/README Fri Jun 13 16:52:59 2008 +0000 +++ b/README Fri Jun 13 17:28:22 2008 +0000 @@ -3,23 +3,19 @@ WHAT IS IT FOR? - you can write Vamp plugins in Python which can do the same as the native C++ plugins - plus more if you're using advanced Python modules. + This wrapper is for writing Vamp plugins in Python which can do the same as a native C++ plugin, + plus a lot more if you're using advanced Python modules. - you might get into Vamp development more easily this way. - you can use it for prototyping your plugin before writing in C++ + This may be an easier way to get into Vamp development. + You can use it for prototyping your plugin before writing it in C++ -LIMITATIONS: +WHY PYTHON? - this is really just a proof of concept. The implementation is not the most efficient. - only tested on MacOSX, but in theory should work on other platforms with small fixes - The Python C/API is not fully thread safe and correct threading is not yet implemented. - (This can cause problems resulting in nasty crashes.) - - Error checking is incomplete. - You better not make a mistake in your Python script, although in most cases you can see what - the problem is if you start the host (Sonic Visualiser) from the command line. + Python is a general purpose high level scripting language. + It is interpreted, so you don't need to compile your plugins. + It has very high level libraries. e.g. you can stream audio from your VamPy plugin (it works for me...) + Supports functional programming. HOW DOES IT WORK: @@ -28,41 +24,50 @@ (2) Compile the C++ source or ask me for a binary (MacOS). (3) Copy the library in your Vamp plugin directory like any other Vamp plugins: eg. /Library/Audio/Plug-Ins/Vamp - (4) Write your python plugins and copy them to the same place. + (4) Write some python plugins and copy them to the same place. (5) Each plugin must contain a single class with the same name as your script file. e.g. PyZeroCrossing.py -> calss PyZeroCrossing -Scripts with syntax errors in them are ignored. - -Scripts not having the same class as the filename are ignored. - -Other unknown scripts are likely to cause a nasty crash. - (Don't put other python scripts in your Vamp directory.) + -Scripts not having the same class as the filename are ignored. (Python is case sensitive!) + -Other unknown scripts are likely to cause a crash. (Don't put other python scripts in your Vamp directory.) -WHY PYTHON? - - Python is a general purpose high level scripting language. - It is interpreted, so you don't need to compile your plugins - It has very high level libraries. e.g. you can stream audio from your VamPy plugin (it works for me...) - Supports functional programming - - COMPILING AND LINKING: - (1) include Python.h wherever it is on your machine - (2) this plugin needs to be linked against the Python binary: + (1) make sure Python.h is included wherever it is on your machine + (2) the plugin needs to be linked against the Python binary: e.g.: ld -lpython2.5 example on on MacOSX: - g++ -O2 -Wall -I. -fPIC -c -o pyvamp-main.o pyvamp-main.cpp - g++ -dynamiclib -o vamp-pyvamp-plugin.dylib ./PyPlugScanner.o ./PyPlugin.o ./pyvamp-main.o sdk/vamp-sdk/libvamp-sdk.a - -u _PyMac_Error /Library/Frameworks/Python.framework/Versions/2.5/Python + g++ -I../vamp-plugin-sdk -O2 -Wall -I/usr/include/python2.5 -c -o PyPlugin.o PyPlugin.cpp + g++ -I../vamp-plugin-sdk -O2 -Wall -I/usr/include/python2.5 -c -o PyPlugScanner.o PyPlugScanner.cpp + g++ -I../vamp-plugin-sdk -O2 -Wall -I/usr/include/python2.5 -c -o pyvamp-main.o pyvamp-main.cpp + g++ -I../vamp-plugin-sdk -O2 -Wall -I/usr/include/python2.5 -c -o Mutex.o Mutex.cpp + g++ -shared PyPlugin.o PyPlugScanner.o pyvamp-main.o Mutex.o -o vampy.dylib -L../vamp-plugin-sdk/vamp-sdk -lvamp-sdk -dynamiclib -lpython2.5 -lpthread + - (3) There is a modified Makefile from the Vamp SDK that compiles this plugin by default. + (3) There is a Makefile that compiles this plugin by default. -TODO: needs more complete error checking - needs correct implementation of Python threading - more efficient data conversion using the buffering interface or ctypes - Vamp 'programs' not implemented - support multiple classes per script in scanner - ensure proper cleanup, (host do a good job though) +LIMITATIONS: + This is mainly a proof of concept. The implementation is not the most efficient, but using NumPy it's very reasonable. + Only tested on MacOSX and Linux (by Chris), but in theory should work on other platforms with small fixes. + Error checking is not yet fully complete. + You better not make a mistake in your Python script, although in most cases you can see what the problem is + if you start the host (e.g. Sonic Visualiser) from a command line interface. + The wrapper plugin is quite verbose and outputs error messages. + + +TODO: * needs more complete error checking (almost done) + * needs correct implementation of Python threading (done) + * more efficient data conversion using the buffering interface or ctypes (done) + * Vamp 'programs' not implemented + * support multiple classes per script in scanner + * ensure proper cleanup, (host does a good job though) + +HISTORY: + added support for NumPy arrays in processN() + framecount is now passed also to legacy process() and fixed resulting bugs in the PyZeroCrossing plugin + added two examples which use Frequency Domain input in processN() +