Revision 57:82b3cdf6ca6b

View differences:

AgentFeeder.h
56 56

  
57 57
    typedef std::vector<NoteHypothesis> Hypotheses;
58 58

  
59
    Hypotheses getAcceptedHypotheses() const {
59
    const Hypotheses &getAcceptedHypotheses() const {
60 60
        return m_accepted;
61 61
    }
62 62

  
CepstralPitchTracker.cpp
53 53
    m_binFrom(0),
54 54
    m_binTo(0),
55 55
    m_bins(0),
56
    m_nAccepted(0),
56 57
    m_feeder(0)
57 58
{
58 59
}
......
243 244
{
244 245
    delete m_feeder;
245 246
    m_feeder = new AgentFeeder();
247
    m_nAccepted = 0;
246 248
}
247 249

  
248 250
void
......
268 270
    fs[1].push_back(nf);
269 271
}
270 272

  
273
void
274
CepstralPitchTracker::addNewFeatures(FeatureSet &fs)
275
{
276
    int n = m_feeder->getAcceptedHypotheses().size();
277
    if (n == m_nAccepted) return;
278

  
279
    AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses();
280

  
281
    for (int i = m_nAccepted; i < n; ++i) {
282
        addFeaturesFrom(accepted[i], fs);
283
    }
284

  
285
    m_nAccepted = n;
286
}
287

  
271 288
CepstralPitchTracker::FeatureSet
272 289
CepstralPitchTracker::process(const float *const *inputBuffers, RealTime timestamp)
273 290
{
274
    FeatureSet fs;
275

  
276 291
    double *rawcep = new double[m_blockSize];
277 292
    double magmean = Cepstrum(m_blockSize).process(inputBuffers[0], rawcep);
278 293

  
......
295 310

  
296 311
    if (maxbin < 0) {
297 312
        delete[] data;
298
        return fs;
313
        return FeatureSet();
299 314
    }
300 315

  
301 316
    double nextPeakVal = 0.0;
......
321 336
//        std::cerr << "magmean = " << magmean << ", confidence = " << confidence << std::endl;
322 337
    }
323 338

  
339
    delete[] data;
340

  
324 341
    NoteHypothesis::Estimate e;
325 342
    e.freq = peakfreq;
326 343
    e.time = timestamp;
......
328 345

  
329 346
    m_feeder->feed(e);
330 347

  
331
    delete[] data;
348
    FeatureSet fs;
349
    addNewFeatures(fs);
332 350
    return fs;
333 351
}
334 352

  
......
337 355
{
338 356
    m_feeder->finish();
339 357

  
340
    AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses();
341

  
342 358
    FeatureSet fs;
343
    for (int i = 0; i < accepted.size(); ++i) {
344
        addFeaturesFrom(accepted[i], fs);
345
    }
359
    addNewFeatures(fs);
346 360
    return fs;
347 361
}
CepstralPitchTracker.h
80 80
    int m_binTo;
81 81
    int m_bins; // count of "interesting" bins, those returned in m_cepOutput
82 82

  
83
    int m_nAccepted;
84

  
83 85
    AgentFeeder *m_feeder;
84 86
    void addFeaturesFrom(NoteHypothesis h, FeatureSet &fs);
87
    void addNewFeatures(FeatureSet &fs);
85 88
};
86 89

  
87 90
#endif

Also available in: Unified diff