Mercurial > hg > svcore
diff 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 |
line wrap: on
line diff
--- a/data/model/NoteModel.h Wed Dec 11 21:40:27 2013 +0000 +++ b/data/model/NoteModel.h Tue Jan 28 15:01:54 2014 +0000 @@ -17,8 +17,10 @@ #define _NOTE_MODEL_H_ #include "IntervalModel.h" +#include "NoteData.h" #include "base/RealTime.h" #include "base/PlayParameterRepository.h" +#include "base/Pitch.h" /** * NoteModel -- a concrete IntervalModel for notes. @@ -91,7 +93,7 @@ }; -class NoteModel : public IntervalModel<Note> +class NoteModel : public IntervalModel<Note>, public NoteExportable { Q_OBJECT @@ -127,14 +129,9 @@ virtual bool canPlay() const { return true; } - virtual QString getDefaultPlayPluginId() const + virtual QString getDefaultPlayClipId() const { - return "dssi:_builtin:sample_player"; - } - - virtual QString getDefaultPlayPluginConfiguration() const - { - return "<plugin program=\"piano\"/>"; + return "piano"; } virtual void toXml(QTextStream &out, @@ -219,6 +216,48 @@ return SortNumeric; } + /** + * NoteExportable methods. + */ + + NoteList getNotes() const { + return getNotes(getStartFrame(), getEndFrame()); + } + + NoteList getNotes(size_t startFrame, size_t endFrame) const { + + PointList points = getPoints(startFrame, endFrame); + NoteList notes; + + for (PointList::iterator pli = + points.begin(); pli != points.end(); ++pli) { + + size_t duration = pli->duration; + if (duration == 0 || duration == 1) { + duration = getSampleRate() / 20; + } + + int pitch = lrintf(pli->value); + + int velocity = 100; + if (pli->level > 0.f && pli->level <= 1.f) { + velocity = lrintf(pli->level * 127); + } + + NoteData note(pli->frame, duration, pitch, velocity); + + if (getScaleUnits() == "Hz") { + note.frequency = pli->value; + note.midiPitch = Pitch::getPitchForFrequency(note.frequency); + note.isMidiPitchQuantized = false; + } + + notes.push_back(note); + } + + return notes; + } + protected: float m_valueQuantization; };