annotate data/model/NoteData.h @ 1552:05c3fbaec8ea

Introduce RelativelyFineZoomConstraint, which encodes more-or-less the scheme that was already used for the horizontal thumbwheel in the pane (which overrode the layers' own zoom constraints unless they said they couldn't support any other)
author Chris Cannam
date Wed, 10 Oct 2018 14:32:34 +0100
parents 6965c83c8fa7
children
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@1495 15 #ifndef SV_NOTE_DATA_H
Chris@1495 16 #define SV_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