annotate data/model/test/MockWaveModel.cpp @ 1248:58dd6a6fe414 piper

Update to use listargs variant of Piper stuff (so that the plugin winnowing feature from the penultimate commit actually works)
author Chris Cannam
date Thu, 03 Nov 2016 15:38:17 +0000
parents 1309b66eff53
children 54af1e21705c
rev   line source
Chris@1086 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1086 2
Chris@1086 3 /*
Chris@1086 4 Sonic Visualiser
Chris@1086 5 An audio file viewer and annotation editor.
Chris@1086 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1086 7 This file copyright 2006 Chris Cannam.
Chris@1086 8
Chris@1086 9 This program is free software; you can redistribute it and/or
Chris@1086 10 modify it under the terms of the GNU General Public License as
Chris@1086 11 published by the Free Software Foundation; either version 2 of the
Chris@1086 12 License, or (at your option) any later version. See the file
Chris@1086 13 COPYING included with this distribution for more information.
Chris@1086 14 */
Chris@1086 15
Chris@1086 16 #include "MockWaveModel.h"
Chris@1086 17
Chris@1137 18 #include <cmath>
Chris@1137 19
Chris@1086 20 using namespace std;
Chris@1086 21
Chris@1088 22 MockWaveModel::MockWaveModel(vector<Sort> sorts, int length, int pad)
Chris@1086 23 {
Chris@1086 24 for (auto sort: sorts) {
Chris@1088 25 m_data.push_back(generate(sort, length, pad));
Chris@1086 26 }
Chris@1086 27 }
Chris@1086 28
Chris@1096 29 vector<float>
Chris@1096 30 MockWaveModel::getData(int channel, sv_frame_t start, sv_frame_t count) const
Chris@1086 31 {
Chris@1086 32 sv_frame_t i = 0;
Chris@1086 33
Chris@1091 34 // cerr << "MockWaveModel::getData(" << channel << "," << start << "," << count << "): ";
Chris@1086 35
Chris@1096 36 vector<float> data;
Chris@1096 37
Chris@1086 38 while (i < count) {
Chris@1086 39 sv_frame_t idx = start + i;
Chris@1086 40 if (!in_range_for(m_data[channel], idx)) break;
Chris@1096 41 data.push_back(m_data[channel][idx]);
Chris@1096 42 // cerr << data[i] << " ";
Chris@1086 43 ++i;
Chris@1086 44 }
Chris@1086 45
Chris@1091 46 // cerr << endl;
Chris@1086 47
Chris@1096 48 return data;
Chris@1086 49 }
Chris@1086 50
Chris@1096 51 vector<vector<float>>
Chris@1086 52 MockWaveModel::getMultiChannelData(int fromchannel, int tochannel,
Chris@1096 53 sv_frame_t start, sv_frame_t count) const
Chris@1086 54 {
Chris@1096 55 vector<vector<float>> data(tochannel - fromchannel + 1);
Chris@1096 56
Chris@1086 57 for (int c = fromchannel; c <= tochannel; ++c) {
Chris@1096 58 data.push_back(getData(c, start, count));
Chris@1086 59 }
Chris@1086 60
Chris@1096 61 return data;
Chris@1086 62 }
Chris@1086 63
Chris@1086 64 vector<float>
Chris@1088 65 MockWaveModel::generate(Sort sort, int length, int pad) const
Chris@1086 66 {
Chris@1086 67 vector<float> data;
Chris@1086 68
Chris@1088 69 for (int i = 0; i < pad; ++i) {
Chris@1088 70 data.push_back(0.f);
Chris@1088 71 }
Chris@1088 72
Chris@1086 73 for (int i = 0; i < length; ++i) {
Chris@1086 74
Chris@1087 75 double v = 0.0;
Chris@1086 76
Chris@1086 77 switch (sort) {
Chris@1087 78 case DC: v = 1.0; break;
Chris@1087 79 case Sine: v = sin((2.0 * M_PI / 8.0) * i); break;
Chris@1087 80 case Cosine: v = cos((2.0 * M_PI / 8.0) * i); break;
Chris@1086 81 case Nyquist: v = (i % 2) * 2 - 1; break;
Chris@1087 82 case Dirac: v = (i == 0) ? 1.0 : 0.0; break;
Chris@1086 83 }
Chris@1086 84
Chris@1087 85 data.push_back(float(v));
Chris@1086 86 }
Chris@1086 87
Chris@1088 88 for (int i = 0; i < pad; ++i) {
Chris@1088 89 data.push_back(0.f);
Chris@1088 90 }
Chris@1088 91
Chris@1086 92 return data;
Chris@1086 93 }
Chris@1086 94