Mercurial > hg > svapp
diff audioio/AudioGenerator.h @ 275:6c6950bd7d53
Refactor to combine the two synthetic playback methods, with a single separate method to extract the basic note data from model
author | Chris Cannam |
---|---|
date | Mon, 15 Apr 2013 17:23:14 +0100 |
parents | e81c1ea227ee |
children | cba1e2a3d14b |
line wrap: on
line diff
--- a/audioio/AudioGenerator.h Mon Apr 15 16:13:41 2013 +0100 +++ b/audioio/AudioGenerator.h Mon Apr 15 17:23:14 2013 +0100 @@ -28,6 +28,7 @@ #include <set> #include <map> +#include <vector> class AudioGenerator : public QObject { @@ -101,8 +102,26 @@ bool m_soloing; std::set<Model *> m_soloModelSet; + struct NoteData { + + NoteData(size_t _start, size_t _dur, int _mp, int _vel) : + start(_start), duration(_dur), midiPitch(_mp), frequency(0), + isMidiPitchQuantized(true), velocity(_vel) { }; + + size_t start; // audio sample frame + size_t duration; // in audio sample frames + int midiPitch; // 0-127 + int frequency; // Hz, to be used if isMidiPitchQuantized false + bool isMidiPitchQuantized; + int velocity; // MIDI-style 0-127 + }; + + typedef std::vector<NoteData> NoteList; + struct NoteOff { + NoteOff(int _p, size_t _f) : pitch(_p), frame(_f) { } + int pitch; size_t frame; @@ -132,13 +151,11 @@ (DenseTimeValueModel *model, size_t startFrame, size_t frameCount, float **buffer, float gain, float pan, size_t fadeIn, size_t fadeOut); - virtual size_t mixSparseOneDimensionalModel - (SparseOneDimensionalModel *model, size_t startFrame, size_t frameCount, + virtual size_t mixSyntheticNoteModel + (Model *model, size_t startFrame, size_t frameCount, float **buffer, float gain, float pan, size_t fadeIn, size_t fadeOut); - - virtual size_t mixNoteModel - (NoteModel *model, size_t startFrame, size_t frameCount, - float **buffer, float gain, float pan, size_t fadeIn, size_t fadeOut); + + NoteList getNotes(Model *model, size_t startFrame, size_t endFrame); static const size_t m_pluginBlockSize; };