annotate data/model/NoteData.h @ 1455:ec9e65fcf749

The use of the begin/end pairs here just seems to cause too many rows to be deleted (from the visual representation, not the underlying model). Things apparently work better if we just modify the underlying model and let the change signals percolate back up again. To that end, update the change handlers so as to cover their proper ranges with dataChanged signals.
author Chris Cannam
date Mon, 23 Apr 2018 16:03:35 +0100
parents 48e9f538e6e9
children 6965c83c8fa7
rev   line source
Chris@852 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@852 2
Chris@852 3 /*
Chris@852 4 Sonic Visualiser
Chris@852 5 An audio file viewer and annotation editor.
Chris@852 6 Centre for Digital Music, Queen Mary, University of London.
Chris@852 7
Chris@852 8 This program is free software; you can redistribute it and/or
Chris@852 9 modify it under the terms of the GNU General Public License as
Chris@852 10 published by the Free Software Foundation; either version 2 of the
Chris@852 11 License, or (at your option) any later version. See the file
Chris@852 12 COPYING included with this distribution for more information.
Chris@852 13 */
Chris@852 14
Chris@852 15 #ifndef NOTE_DATA_H
Chris@852 16 #define NOTE_DATA_H
Chris@852 17
Chris@852 18 #include <vector>
Chris@852 19
Chris@865 20 #include "base/Pitch.h"
Chris@865 21
Chris@852 22 struct NoteData
Chris@852 23 {
Chris@1038 24 NoteData(sv_frame_t _start, sv_frame_t _dur, int _mp, int _vel) :
Chris@1429 25 start(_start), duration(_dur), midiPitch(_mp), frequency(0),
Chris@1429 26 isMidiPitchQuantized(true), velocity(_vel), channel(0) { };
Chris@852 27
Chris@1038 28 sv_frame_t start; // audio sample frame
Chris@1038 29 sv_frame_t duration; // in audio sample frames
Chris@996 30 int midiPitch; // 0-127
Chris@865 31 float frequency; // Hz, to be used if isMidiPitchQuantized false
Chris@852 32 bool isMidiPitchQuantized;
Chris@996 33 int velocity; // MIDI-style 0-127
Chris@996 34 int channel; // MIDI 0-15
Chris@865 35
Chris@865 36 float getFrequency() const {
Chris@865 37 if (isMidiPitchQuantized) {
Chris@1038 38 return float(Pitch::getFrequencyForPitch(midiPitch));
Chris@865 39 } else {
Chris@865 40 return frequency;
Chris@865 41 }
Chris@865 42 }
Chris@852 43 };
Chris@852 44
Chris@852 45 typedef std::vector<NoteData> NoteList;
Chris@852 46
Chris@852 47 class NoteExportable
Chris@852 48 {
Chris@852 49 public:
Chris@852 50 virtual NoteList getNotes() const = 0;
Chris@1038 51 virtual NoteList getNotesWithin(sv_frame_t startFrame, sv_frame_t endFrame) const = 0;
Chris@852 52 };
Chris@852 53
Chris@852 54 #endif