comparison data/model/NoteModel.h @ 1429:48e9f538e6e9

Untabify
author Chris Cannam
date Thu, 01 Mar 2018 18:02:22 +0000
parents 57633d605547
children 6965c83c8fa7
comparison
equal deleted inserted replaced
1428:87ae75da6527 1429:48e9f538e6e9
38 struct Note 38 struct Note
39 { 39 {
40 public: 40 public:
41 Note(sv_frame_t _frame) : frame(_frame), value(0.0f), duration(0), level(1.f) { } 41 Note(sv_frame_t _frame) : frame(_frame), value(0.0f), duration(0), level(1.f) { }
42 Note(sv_frame_t _frame, float _value, sv_frame_t _duration, float _level, QString _label) : 42 Note(sv_frame_t _frame, float _value, sv_frame_t _duration, float _level, QString _label) :
43 frame(_frame), value(_value), duration(_duration), level(_level), label(_label) { } 43 frame(_frame), value(_value), duration(_duration), level(_level), label(_label) { }
44 44
45 int getDimensions() const { return 3; } 45 int getDimensions() const { return 3; }
46 46
47 sv_frame_t frame; 47 sv_frame_t frame;
48 float value; 48 float value;
54 54
55 void toXml(QTextStream &stream, 55 void toXml(QTextStream &stream,
56 QString indent = "", 56 QString indent = "",
57 QString extraAttributes = "") const 57 QString extraAttributes = "") const
58 { 58 {
59 stream << 59 stream <<
60 QString("%1<point frame=\"%2\" value=\"%3\" duration=\"%4\" level=\"%5\" label=\"%6\" %7/>\n") 60 QString("%1<point frame=\"%2\" value=\"%3\" duration=\"%4\" level=\"%5\" label=\"%6\" %7/>\n")
61 .arg(indent).arg(frame).arg(value).arg(duration).arg(level) 61 .arg(indent).arg(frame).arg(value).arg(duration).arg(level)
62 .arg(XmlExportable::encodeEntities(label)).arg(extraAttributes); 62 .arg(XmlExportable::encodeEntities(label)).arg(extraAttributes);
63 } 63 }
64 64
65 QString toDelimitedDataString(QString delimiter, DataExportOptions opts, sv_samplerate_t sampleRate) const { 65 QString toDelimitedDataString(QString delimiter, DataExportOptions opts, sv_samplerate_t sampleRate) const {
66 QStringList list; 66 QStringList list;
73 if (label != "") list << label; 73 if (label != "") list << label;
74 return list.join(delimiter); 74 return list.join(delimiter);
75 } 75 }
76 76
77 struct Comparator { 77 struct Comparator {
78 bool operator()(const Note &p1, 78 bool operator()(const Note &p1,
79 const Note &p2) const { 79 const Note &p2) const {
80 if (p1.frame != p2.frame) return p1.frame < p2.frame; 80 if (p1.frame != p2.frame) return p1.frame < p2.frame;
81 if (p1.value != p2.value) return p1.value < p2.value; 81 if (p1.value != p2.value) return p1.value < p2.value;
82 if (p1.duration != p2.duration) return p1.duration < p2.duration; 82 if (p1.duration != p2.duration) return p1.duration < p2.duration;
83 if (p1.level != p2.level) return p1.level < p2.level; 83 if (p1.level != p2.level) return p1.level < p2.level;
84 return p1.label < p2.label; 84 return p1.label < p2.label;
85 } 85 }
86 }; 86 };
87 87
88 struct OrderComparator { 88 struct OrderComparator {
89 bool operator()(const Note &p1, 89 bool operator()(const Note &p1,
90 const Note &p2) const { 90 const Note &p2) const {
91 return p1.frame < p2.frame; 91 return p1.frame < p2.frame;
92 } 92 }
93 }; 93 };
94 }; 94 };
95 95
96 96
97 class NoteModel : public IntervalModel<Note>, public NoteExportable 97 class NoteModel : public IntervalModel<Note>, public NoteExportable
98 { 98 {
99 Q_OBJECT 99 Q_OBJECT
100 100
101 public: 101 public:
102 NoteModel(sv_samplerate_t sampleRate, int resolution, 102 NoteModel(sv_samplerate_t sampleRate, int resolution,
103 bool notifyOnAdd = true) : 103 bool notifyOnAdd = true) :
104 IntervalModel<Note>(sampleRate, resolution, notifyOnAdd), 104 IntervalModel<Note>(sampleRate, resolution, notifyOnAdd),
105 m_valueQuantization(0) 105 m_valueQuantization(0)
106 { 106 {
107 PlayParameterRepository::getInstance()->addPlayable(this); 107 PlayParameterRepository::getInstance()->addPlayable(this);
108 } 108 }
109 109
110 NoteModel(sv_samplerate_t sampleRate, int resolution, 110 NoteModel(sv_samplerate_t sampleRate, int resolution,
111 float valueMinimum, float valueMaximum, 111 float valueMinimum, float valueMaximum,
112 bool notifyOnAdd = true) : 112 bool notifyOnAdd = true) :
113 IntervalModel<Note>(sampleRate, resolution, 113 IntervalModel<Note>(sampleRate, resolution,
114 valueMinimum, valueMaximum, 114 valueMinimum, valueMaximum,
115 notifyOnAdd), 115 notifyOnAdd),
116 m_valueQuantization(0) 116 m_valueQuantization(0)
117 { 117 {
118 PlayParameterRepository::getInstance()->addPlayable(this); 118 PlayParameterRepository::getInstance()->addPlayable(this);
119 } 119 }
120 120
121 virtual ~NoteModel() 121 virtual ~NoteModel()
122 { 122 {
123 PlayParameterRepository::getInstance()->removePlayable(this); 123 PlayParameterRepository::getInstance()->removePlayable(this);
141 { 141 {
142 std::cerr << "NoteModel::toXml: extraAttributes = \"" 142 std::cerr << "NoteModel::toXml: extraAttributes = \""
143 << extraAttributes.toStdString() << std::endl; 143 << extraAttributes.toStdString() << std::endl;
144 144
145 IntervalModel<Note>::toXml 145 IntervalModel<Note>::toXml
146 (out, 146 (out,
147 indent, 147 indent,
148 QString("%1 subtype=\"note\" valueQuantization=\"%2\"") 148 QString("%1 subtype=\"note\" valueQuantization=\"%2\"")
149 .arg(extraAttributes).arg(m_valueQuantization)); 149 .arg(extraAttributes).arg(m_valueQuantization));
150 } 150 }
151 151
152 /** 152 /**
153 * TabularModel methods. 153 * TabularModel methods.
154 */ 154 */
225 return getNotesWithin(getStartFrame(), getEndFrame()); 225 return getNotesWithin(getStartFrame(), getEndFrame());
226 } 226 }
227 227
228 NoteList getNotesWithin(sv_frame_t startFrame, sv_frame_t endFrame) const { 228 NoteList getNotesWithin(sv_frame_t startFrame, sv_frame_t endFrame) const {
229 229
230 PointList points = getPoints(startFrame, endFrame); 230 PointList points = getPoints(startFrame, endFrame);
231 NoteList notes; 231 NoteList notes;
232 232
233 for (PointList::iterator pli = 233 for (PointList::iterator pli =
234 points.begin(); pli != points.end(); ++pli) { 234 points.begin(); pli != points.end(); ++pli) {
235 235
236 sv_frame_t duration = pli->duration; 236 sv_frame_t duration = pli->duration;
237 if (duration == 0 || duration == 1) { 237 if (duration == 0 || duration == 1) {
238 duration = sv_frame_t(getSampleRate() / 20); 238 duration = sv_frame_t(getSampleRate() / 20);
239 } 239 }
240 240
241 int pitch = int(lrintf(pli->value)); 241 int pitch = int(lrintf(pli->value));