Chris@852: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
Chris@852: 
Chris@852: /*
Chris@852:     Sonic Visualiser
Chris@852:     An audio file viewer and annotation editor.
Chris@852:     Centre for Digital Music, Queen Mary, University of London.
Chris@852:     
Chris@852:     This program is free software; you can redistribute it and/or
Chris@852:     modify it under the terms of the GNU General Public License as
Chris@852:     published by the Free Software Foundation; either version 2 of the
Chris@852:     License, or (at your option) any later version.  See the file
Chris@852:     COPYING included with this distribution for more information.
Chris@852: */
Chris@852: 
Chris@852: #ifndef NOTE_DATA_H
Chris@852: #define NOTE_DATA_H
Chris@852: 
Chris@852: #include <vector>
Chris@852: 
Chris@865: #include "base/Pitch.h"
Chris@865: 
Chris@852: struct NoteData
Chris@852: {
Chris@1038:     NoteData(sv_frame_t _start, sv_frame_t _dur, int _mp, int _vel) :
Chris@852: 	start(_start), duration(_dur), midiPitch(_mp), frequency(0),
Chris@996: 	isMidiPitchQuantized(true), velocity(_vel), channel(0) { };
Chris@852:             
Chris@1038:     sv_frame_t start;       // audio sample frame
Chris@1038:     sv_frame_t duration;    // in audio sample frames
Chris@996:     int midiPitch;   // 0-127
Chris@865:     float frequency; // Hz, to be used if isMidiPitchQuantized false
Chris@852:     bool isMidiPitchQuantized;
Chris@996:     int velocity;    // MIDI-style 0-127
Chris@996:     int channel;     // MIDI 0-15
Chris@865: 
Chris@865:     float getFrequency() const {
Chris@865:         if (isMidiPitchQuantized) {
Chris@1038:             return float(Pitch::getFrequencyForPitch(midiPitch));
Chris@865:         } else {
Chris@865:             return frequency;
Chris@865:         }
Chris@865:     }
Chris@852: };
Chris@852: 
Chris@852: typedef std::vector<NoteData> NoteList;
Chris@852: 
Chris@852: class NoteExportable
Chris@852: {
Chris@852: public:
Chris@852:     virtual NoteList getNotes() const = 0;
Chris@1038:     virtual NoteList getNotesWithin(sv_frame_t startFrame, sv_frame_t endFrame) const = 0;
Chris@852: };
Chris@852: 
Chris@852: #endif