annotate data/model/NoteData.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents 0d3d1ec7dfde
children cc27f35aa75c
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@929 24 NoteData(int _start, int _dur, int _mp, int _vel) :
Chris@852 25 start(_start), duration(_dur), midiPitch(_mp), frequency(0),
Chris@996 26 isMidiPitchQuantized(true), velocity(_vel), channel(0) { };
Chris@852 27
Chris@996 28 int start; // audio sample frame
Chris@996 29 int 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@865 38 return 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@929 51 virtual NoteList getNotesWithin(int startFrame, int endFrame) const = 0;
Chris@852 52 };
Chris@852 53
Chris@852 54 #endif