Mercurial > hg > piper-cpp
view test/vamp-client/tst_PluginStub.cpp @ 218:ea8994465322
Rebuild these for capnp v0.6.
But it would probably be better at this point not
to commit them, as the main reason they are in the repo is because the
compiler wasn't available for Visual Studio builds, and that's no longer
the case.
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Tue, 09 May 2017 11:46:23 +0100 |
parents | a69724686f0b |
children | 09753ad777db |
line wrap: on
line source
#include "catch/catch.hpp" #include "vamp-client/Loader.h" #include "vamp-client/PluginClient.h" #include "vamp-client/PiperVampPlugin.h" #include "vamp-support/RequestResponse.h" #include <vector> using namespace piper_vamp; using namespace piper_vamp::client; using AudioBuffer = std::vector<std::vector<float>>; // This stub fakes the interaction with a Piper server // Here we only need to implement the configure method // due to testing only the initialise implemention of PiperVampPlugin class StubClient : public PluginClient { public: StubClient(PluginStaticData staticData) : m_staticData(staticData) {} ConfigurationResponse configure(PiperVampPlugin* plugin, PluginConfiguration config) override { const float scale = plugin->getParameter("framing-scale"); ConfigurationResponse cr; cr.plugin = plugin; // we want to return different framing sizes than config provides // there isn't really any need to be doing this with a plugin param cr.framing.blockSize = config.framing.blockSize * scale; cr.framing.stepSize = config.framing.stepSize * scale; // just return some outputs anyway // to avoid a failure case we are not testing here. Vamp::Plugin::OutputDescriptor output; const auto basic = m_staticData.basicOutputInfo[0]; output.identifier = basic.identifier; output.name = basic.name; output.description = basic.description; cr.outputs = {output}; return cr; } Vamp::Plugin::FeatureSet process(PiperVampPlugin* /*plugin*/, AudioBuffer /*channels*/, Vamp::RealTime /*timestamp*/) override { return {}; } Vamp::Plugin::FeatureSet finish(PiperVampPlugin* /*plugin*/) override { return {}; } void reset(PiperVampPlugin* /*plugin*/, PluginConfiguration /*config*/) override {} private: PluginStaticData m_staticData; }; TEST_CASE("Init plugin with parameter dependent preferred framing sizes") { const std::size_t initialBlockSize = 1024; const std::size_t initialStepSize = 512; PluginConfiguration defaultConfig; defaultConfig.channelCount = 1; defaultConfig.framing.blockSize = initialBlockSize; defaultConfig.framing.stepSize = initialStepSize; defaultConfig.parameterValues = {{"framing-scale", 1.0}}; Vamp::PluginBase::ParameterDescriptor stubParam; stubParam.identifier = "framing-scale"; stubParam.name = "Framing Scale Factor"; stubParam.description = "Scales the preferred framing sizes"; stubParam.maxValue = 2.0; PluginStaticData staticData; staticData.pluginKey = "stub"; staticData.basic = {"param-init", "Stub", "Testing init"}; staticData.maker = "Lucas Thompson"; staticData.copyright = "GPL"; staticData.pluginVersion = 1; staticData.category = {"Test"}; staticData.minChannelCount = 1; staticData.maxChannelCount = 1; staticData.parameters = {stubParam}; staticData.inputDomain = Vamp::Plugin::InputDomain::TimeDomain; staticData.basicOutputInfo = {{"output", "NA", "Not real"}}; StubClient stub {staticData}; PiperVampPlugin vampPiperAdapter { &stub, "stub", // plugin key 44100.0, // sample rate 0, // adapter flags, don't care here staticData, defaultConfig }; const auto initWithPreferredFraming = [&]() -> bool { return vampPiperAdapter.initialise( 1, vampPiperAdapter.getPreferredStepSize(), vampPiperAdapter.getPreferredBlockSize() ); }; const AudioBuffer monoAudio { std::vector<float>(vampPiperAdapter.getPreferredBlockSize()) }; const std::vector<const float*> channelPtrs { monoAudio[0].data() }; SECTION("Initialises with default parameters") { REQUIRE( initWithPreferredFraming() ); } SECTION("Fails to init when changing framing influencing parameter") { const float scalingFactor = 2.0; vampPiperAdapter.setParameter("framing-scale", scalingFactor); REQUIRE( initWithPreferredFraming() == false ); const float configuredStepSize = vampPiperAdapter.getPreferredStepSize(); const float configuredBlockSize = vampPiperAdapter.getPreferredBlockSize(); REQUIRE( configuredStepSize == initialStepSize * scalingFactor ); REQUIRE( configuredBlockSize == initialBlockSize * scalingFactor ); } SECTION("Cannot process after a failed init call (due to framing)") { const float scalingFactor = 2.0; vampPiperAdapter.setParameter("framing-scale", scalingFactor); REQUIRE( initWithPreferredFraming() == false ); REQUIRE_THROWS( vampPiperAdapter.process(channelPtrs.data(), {}) ); REQUIRE_THROWS( initWithPreferredFraming() ); } SECTION("Can process after correctly initialising framing") { const float scalingFactor = 2.0; vampPiperAdapter.setParameter("framing-scale", scalingFactor); REQUIRE( initWithPreferredFraming() == false ); REQUIRE( initWithPreferredFraming() ); REQUIRE( vampPiperAdapter.process(channelPtrs.data(), {}).empty() ); } }