Chris@2: Chris@2: #include Chris@2: #include Chris@2: Chris@2: using namespace std; Chris@2: Chris@8: int main(int, char **) Chris@2: { Chris@2: string example = "./example.so"; Chris@2: Chris@2: void *lib = dlopen(example.c_str(), RTLD_LAZY | RTLD_LOCAL); Chris@2: if (!lib) { Chris@2: cerr << "failed to open " + example + ": " << dlerror() << endl; Chris@2: return 1; Chris@2: } Chris@2: Chris@2: typedef const char *(*RequestFn)(const char *); Chris@2: RequestFn reqFn = (RequestFn)dlsym(lib, "vampipeRequestJson"); Chris@2: if (!reqFn) { Chris@2: cerr << "failed to find request function in " + Chris@2: example + ": " << dlerror() << endl; Chris@2: return 1; Chris@2: } Chris@2: Chris@2: typedef void (*FreeFn)(const char *); Chris@2: FreeFn freeFn = (FreeFn)dlsym(lib, "vampipeFreeJson"); Chris@2: if (!freeFn) { Chris@2: cerr << "failed to find free function in " + Chris@2: example + ": " << dlerror() << endl; Chris@2: return 1; Chris@2: } Chris@2: Chris@2: string listRequest = "{\"type\": \"list\"}"; Chris@2: const char *listResponse = reqFn(listRequest.c_str()); Chris@2: cout << listResponse << endl; Chris@2: freeFn(listResponse); Chris@4: Chris@8: string loadRequest = "{\"type\":\"load\",\"content\": {\"pluginKey\":\"vamp-example-plugins:powerspectrum\",\"inputSampleRate\":44100,\"adapterFlags\":[\"AdaptAllSafe\"]}}"; Chris@4: const char *loadResponse = reqFn(loadRequest.c_str()); Chris@4: cout << loadResponse << endl; Chris@4: freeFn(loadResponse); Chris@8: Chris@8: string configRequest = "{\"type\":\"configure\",\"content\":{\"pluginHandle\":1,\"configuration\":{\"blockSize\":8,\"channelCount\":1,\"stepSize\":8}}}"; Chris@8: const char *configResponse = reqFn(configRequest.c_str()); Chris@8: cout << configResponse << endl; Chris@8: freeFn(configResponse); Chris@8: Chris@8: string processRequest = "{\"type\":\"process\",\"content\":{\"pluginHandle\":1,\"processInput\":{\"timestamp\":{\"s\":0,\"n\":0},\"inputBuffers\":[{\"values\":[0,1,0,-1,0,1,0,-1]}]}}}"; Chris@8: const char *processResponse = reqFn(processRequest.c_str()); Chris@8: cout << processResponse << endl; Chris@8: freeFn(processResponse); Chris@8: Chris@8: string finishRequest = "{\"type\":\"finish\",\"content\":{\"pluginHandle\":1}}"; Chris@8: const char *finishResponse = reqFn(finishRequest.c_str()); Chris@8: cout << finishResponse << endl; Chris@8: freeFn(finishResponse); Chris@8: Chris@2: } Chris@2: