annotate data/model/NoteData.h @ 867:42551e9c5b25 tonioni

Play these with a pitch now (since we support any frequency)
author Chris Cannam
date Wed, 08 Jan 2014 09:59:08 +0000
parents 9196cff56abe
children 59e7fe1b1003
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@852 24 NoteData(size_t _start, size_t _dur, int _mp, int _vel) :
Chris@852 25 start(_start), duration(_dur), midiPitch(_mp), frequency(0),
Chris@852 26 isMidiPitchQuantized(true), velocity(_vel) { };
Chris@852 27
Chris@852 28 size_t start; // audio sample frame
Chris@852 29 size_t duration; // in audio sample frames
Chris@852 30 int midiPitch; // 0-127
Chris@865 31 float frequency; // Hz, to be used if isMidiPitchQuantized false
Chris@852 32 bool isMidiPitchQuantized;
Chris@852 33 int velocity; // MIDI-style 0-127
Chris@865 34
Chris@865 35 float getFrequency() const {
Chris@865 36 if (isMidiPitchQuantized) {
Chris@865 37 return Pitch::getFrequencyForPitch(midiPitch);
Chris@865 38 } else {
Chris@865 39 return frequency;
Chris@865 40 }
Chris@865 41 }
Chris@852 42 };
Chris@852 43
Chris@852 44 typedef std::vector<NoteData> NoteList;
Chris@852 45
Chris@852 46 class NoteExportable
Chris@852 47 {
Chris@852 48 public:
Chris@852 49 virtual NoteList getNotes() const = 0;
Chris@852 50 virtual NoteList getNotes(size_t startFrame, size_t endFrame) const = 0;
Chris@852 51 };
Chris@852 52
Chris@852 53 #endif