Mercurial > hg > silvet
view 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 source
/* -*- 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(); }