diff options
Diffstat (limited to 'attic/muse_qt4_evolution/al/tempo.h')
-rw-r--r-- | attic/muse_qt4_evolution/al/tempo.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/attic/muse_qt4_evolution/al/tempo.h b/attic/muse_qt4_evolution/al/tempo.h new file mode 100644 index 00000000..e2342003 --- /dev/null +++ b/attic/muse_qt4_evolution/al/tempo.h @@ -0,0 +1,101 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id:$ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __TEMPO_H__ +#define __TEMPO_H__ + +namespace AL { + +#ifndef MAX_TICK +#define MAX_TICK (0x7fffffff/100) +#endif + +class Xml; + +//--------------------------------------------------------- +// Tempo Event +//--------------------------------------------------------- + +struct TEvent { + int tempo; + unsigned tick; // new tempo at tick + unsigned frame; // precomputed time for tick in sec + + int read(QDomNode); + void write(Xml&, int) const; + + TEvent() { } + TEvent(unsigned t, unsigned tk) { + tempo = t; + tick = tk; + frame = 0; + } + }; + +//--------------------------------------------------------- +// TempoList +//--------------------------------------------------------- + +typedef std::map<unsigned, TEvent*, std::less<unsigned> > TEMPOLIST; +typedef TEMPOLIST::iterator iTEvent; +typedef TEMPOLIST::const_iterator ciTEvent; +typedef TEMPOLIST::reverse_iterator riTEvent; +typedef TEMPOLIST::const_reverse_iterator criTEvent; + +class TempoList : public TEMPOLIST { + int _tempoSN; // serial no to track tempo changes + bool useList; + int _tempo; // tempo if not using tempo list + int _globalTempo; // %percent 50-200% + + void normalize(); + void add(unsigned tick, int tempo); + void change(unsigned tick, int newTempo); + void del(iTEvent); + void del(unsigned tick); + + public: + TempoList(); + void clear(); + + void read(QDomNode); + void write(Xml&) const; + void dump() const; + + int tempo(unsigned tick) const; + unsigned tick2frame(unsigned tick, unsigned frame, int* sn) const; + unsigned tick2frame(unsigned tick, int* sn = 0) const; + unsigned frame2tick(unsigned frame, int* sn = 0) const; + unsigned frame2tick(unsigned frame, unsigned tick, int* sn) const; + int tempoSN() const { return _tempoSN; } + void setTempo(unsigned tick, int newTempo); + void addTempo(unsigned t, int tempo); + void delTempo(unsigned tick); + void changeTempo(unsigned tick, int newTempo); + bool setMasterFlag(unsigned tick, bool val); + int globalTempo() const { return _globalTempo; } + void setGlobalTempo(int val); + }; + +extern TempoList tempomap; +} + +#endif + |