Chris@9: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@9: Chris@9: /* Chris@9: pYIN - A fundamental frequency estimator for monophonic audio Chris@9: Centre for Digital Music, Queen Mary, University of London. Chris@9: Chris@9: This program is free software; you can redistribute it and/or Chris@9: modify it under the terms of the GNU General Public License as Chris@9: published by the Free Software Foundation; either version 2 of the Chris@9: License, or (at your option) any later version. See the file Chris@9: COPYING included with this distribution for more information. Chris@9: */ Chris@9: matthiasm@0: #include "MonoNote.h" matthiasm@0: #include matthiasm@0: matthiasm@0: #include matthiasm@0: #include matthiasm@0: #include matthiasm@0: matthiasm@0: using std::vector; matthiasm@0: using std::pair; matthiasm@0: matthiasm@0: MonoNote::MonoNote() : matthiasm@0: hmm() matthiasm@0: { matthiasm@0: } matthiasm@0: matthiasm@0: MonoNote::~MonoNote() matthiasm@0: { matthiasm@0: } matthiasm@0: matthiasm@0: const vector matthiasm@0: MonoNote::process(const vector > > pitchProb) matthiasm@0: { matthiasm@0: vector > obsProb; matthiasm@0: for (size_t iFrame = 0; iFrame < pitchProb.size(); ++iFrame) matthiasm@0: { matthiasm@0: obsProb.push_back(hmm.calculateObsProb(pitchProb[iFrame])); matthiasm@0: } matthiasm@0: matthiasm@0: vector *scale = new vector(pitchProb.size()); matthiasm@0: matthiasm@0: vector out; matthiasm@0: matthiasm@0: vector path = hmm.decodeViterbi(obsProb, scale); matthiasm@0: matthiasm@0: for (size_t iFrame = 0; iFrame < path.size(); ++iFrame) matthiasm@0: { matthiasm@0: double currPitch = -1; matthiasm@0: int stateKind = 0; matthiasm@0: matthiasm@0: currPitch = hmm.par.minPitch + (path[iFrame]/hmm.par.nSPP) * 1.0/hmm.par.nPPS; matthiasm@0: stateKind = (path[iFrame]) % hmm.par.nSPP + 1; matthiasm@0: matthiasm@0: out.push_back(FrameOutput(iFrame, currPitch, stateKind)); matthiasm@0: // std::cerr << path[iFrame] << " -- "<< pitchProb[iFrame][0].first << " -- "<< currPitch << " -- " << stateKind << std::endl; matthiasm@0: } matthiasm@0: delete scale; matthiasm@0: return(out); Chris@9: }