Mercurial > hg > silvet
diff src/Silvet.cpp @ 31:c6d230c31713
Stubbing out Vamp plugin
author | Chris Cannam |
---|---|
date | Thu, 03 Apr 2014 17:38:45 +0100 |
parents | |
children | da54468cc452 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Silvet.cpp Thu Apr 03 17:38:45 2014 +0100 @@ -0,0 +1,236 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Silvet + + A Vamp plugin for note transcription. + Centre for Digital Music, Queen Mary University of London. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "Silvet.h" + +#include "data/include/templates.h" + +#include "dsp/rateconversion/Resampler.h" + +#include "constant-q-cpp/cpp-qm-dsp/ConstantQ.h" + +#include <vector> + +using std::vector; +using std::cerr; +using std::endl; + +static int processingSampleRate = 44100; +static int processingBPO = 60; + + +Silvet::Silvet(float inputSampleRate) : + Plugin(inputSampleRate), + m_resampler(0), + m_cq(0) +{ +} + +Silvet::~Silvet() +{ + delete m_resampler; + delete m_cq; +} + +string +Silvet::getIdentifier() const +{ + return "silvet"; +} + +string +Silvet::getName() const +{ + return "Silvet Note Transcription"; +} + +string +Silvet::getDescription() const +{ + // Return something helpful here! + return ""; +} + +string +Silvet::getMaker() const +{ + // Your name here + return ""; +} + +int +Silvet::getPluginVersion() const +{ + return 1; +} + +string +Silvet::getCopyright() const +{ + // This function is not ideally named. It does not necessarily + // need to say who made the plugin -- getMaker does that -- but it + // should indicate the terms under which it is distributed. For + // example, "Copyright (year). All Rights Reserved", or "GPL" + return ""; +} + +Silvet::InputDomain +Silvet::getInputDomain() const +{ + return TimeDomain; +} + +size_t +Silvet::getPreferredBlockSize() const +{ + return 0; +} + +size_t +Silvet::getPreferredStepSize() const +{ + return 0; +} + +size_t +Silvet::getMinChannelCount() const +{ + return 1; +} + +size_t +Silvet::getMaxChannelCount() const +{ + return 1; +} + +Silvet::ParameterList +Silvet::getParameterDescriptors() const +{ + ParameterList list; + return list; +} + +float +Silvet::getParameter(string identifier) const +{ + return 0; +} + +void +Silvet::setParameter(string identifier, float value) +{ +} + +Silvet::ProgramList +Silvet::getPrograms() const +{ + ProgramList list; + return list; +} + +string +Silvet::getCurrentProgram() const +{ + return ""; +} + +void +Silvet::selectProgram(string name) +{ +} + +Silvet::OutputList +Silvet::getOutputDescriptors() const +{ + OutputList list; + + OutputDescriptor d; + d.identifier = "transcription"; + d.name = "Transcription"; + d.description = ""; //!!! + d.unit = "Hz"; + d.hasFixedBinCount = true; + d.binCount = 2; + d.binNames.push_back("Frequency"); + d.binNames.push_back("Velocity"); + d.hasKnownExtents = false; + d.isQuantized = false; + d.sampleType = OutputDescriptor::VariableSampleRate; + d.sampleRate = 0; + d.hasDuration = true; + list.push_back(d); + + return list; +} + +bool +Silvet::initialise(size_t channels, size_t stepSize, size_t blockSize) +{ + if (channels < getMinChannelCount() || + channels > getMaxChannelCount()) return false; + + if (stepSize != blockSize) { + cerr << "Silvet::initialise: Step size must be the same as block size (" + << stepSize << " != " << blockSize << ")" << endl; + return false; + } + + m_blockSize = blockSize; + + reset(); + + return true; +} + +void +Silvet::reset() +{ + delete m_resampler; + delete m_cq; + + if (m_inputSampleRate != processingSampleRate) { + m_resampler = new Resampler(m_inputSampleRate, processingSampleRate); + } else { + m_resampler = 0; + } + + m_cq = new ConstantQ + (processingSampleRate, 27.5, processingSampleRate / 3, processingBPO); + +} + +Silvet::FeatureSet +Silvet::process(const float *const *inputBuffers, Vamp::RealTime timestamp) +{ + vector<double> data; + for (int i = 0; i < m_blockSize; ++i) data.push_back(inputBuffers[0][i]); + + if (m_resampler) { + data = m_resampler->process(data.data(), data.size()); + } + + vector<vector<double> > cqout = m_cq->process(data); + + return FeatureSet(); +} + +Silvet::FeatureSet +Silvet::getRemainingFeatures() +{ + + return FeatureSet(); +} +