Mercurial > hg > svcore
comparison data/model/NoteModel.h @ 874:862fe7b20df7 tony_integration
Merge from tonioni branch
author | Chris Cannam |
---|---|
date | Tue, 28 Jan 2014 15:01:54 +0000 |
parents | 3a3541b357fe |
children | c48b07b34cb3 |
comparison
equal
deleted
inserted
replaced
862:786ee8d1f30e | 874:862fe7b20df7 |
---|---|
15 | 15 |
16 #ifndef _NOTE_MODEL_H_ | 16 #ifndef _NOTE_MODEL_H_ |
17 #define _NOTE_MODEL_H_ | 17 #define _NOTE_MODEL_H_ |
18 | 18 |
19 #include "IntervalModel.h" | 19 #include "IntervalModel.h" |
20 #include "NoteData.h" | |
20 #include "base/RealTime.h" | 21 #include "base/RealTime.h" |
21 #include "base/PlayParameterRepository.h" | 22 #include "base/PlayParameterRepository.h" |
23 #include "base/Pitch.h" | |
22 | 24 |
23 /** | 25 /** |
24 * NoteModel -- a concrete IntervalModel for notes. | 26 * NoteModel -- a concrete IntervalModel for notes. |
25 */ | 27 */ |
26 | 28 |
89 } | 91 } |
90 }; | 92 }; |
91 }; | 93 }; |
92 | 94 |
93 | 95 |
94 class NoteModel : public IntervalModel<Note> | 96 class NoteModel : public IntervalModel<Note>, public NoteExportable |
95 { | 97 { |
96 Q_OBJECT | 98 Q_OBJECT |
97 | 99 |
98 public: | 100 public: |
99 NoteModel(size_t sampleRate, size_t resolution, | 101 NoteModel(size_t sampleRate, size_t resolution, |
125 | 127 |
126 QString getTypeName() const { return tr("Note"); } | 128 QString getTypeName() const { return tr("Note"); } |
127 | 129 |
128 virtual bool canPlay() const { return true; } | 130 virtual bool canPlay() const { return true; } |
129 | 131 |
130 virtual QString getDefaultPlayPluginId() const | 132 virtual QString getDefaultPlayClipId() const |
131 { | 133 { |
132 return "dssi:_builtin:sample_player"; | 134 return "piano"; |
133 } | |
134 | |
135 virtual QString getDefaultPlayPluginConfiguration() const | |
136 { | |
137 return "<plugin program=\"piano\"/>"; | |
138 } | 135 } |
139 | 136 |
140 virtual void toXml(QTextStream &out, | 137 virtual void toXml(QTextStream &out, |
141 QString indent = "", | 138 QString indent = "", |
142 QString extraAttributes = "") const | 139 QString extraAttributes = "") const |
217 { | 214 { |
218 if (column == 5) return SortAlphabetical; | 215 if (column == 5) return SortAlphabetical; |
219 return SortNumeric; | 216 return SortNumeric; |
220 } | 217 } |
221 | 218 |
219 /** | |
220 * NoteExportable methods. | |
221 */ | |
222 | |
223 NoteList getNotes() const { | |
224 return getNotes(getStartFrame(), getEndFrame()); | |
225 } | |
226 | |
227 NoteList getNotes(size_t startFrame, size_t endFrame) const { | |
228 | |
229 PointList points = getPoints(startFrame, endFrame); | |
230 NoteList notes; | |
231 | |
232 for (PointList::iterator pli = | |
233 points.begin(); pli != points.end(); ++pli) { | |
234 | |
235 size_t duration = pli->duration; | |
236 if (duration == 0 || duration == 1) { | |
237 duration = getSampleRate() / 20; | |
238 } | |
239 | |
240 int pitch = lrintf(pli->value); | |
241 | |
242 int velocity = 100; | |
243 if (pli->level > 0.f && pli->level <= 1.f) { | |
244 velocity = lrintf(pli->level * 127); | |
245 } | |
246 | |
247 NoteData note(pli->frame, duration, pitch, velocity); | |
248 | |
249 if (getScaleUnits() == "Hz") { | |
250 note.frequency = pli->value; | |
251 note.midiPitch = Pitch::getPitchForFrequency(note.frequency); | |
252 note.isMidiPitchQuantized = false; | |
253 } | |
254 | |
255 notes.push_back(note); | |
256 } | |
257 | |
258 return notes; | |
259 } | |
260 | |
222 protected: | 261 protected: |
223 float m_valueQuantization; | 262 float m_valueQuantization; |
224 }; | 263 }; |
225 | 264 |
226 #endif | 265 #endif |