diff options
Diffstat (limited to 'muse_qt4_evolution/al/pos.cpp')
-rw-r--r-- | muse_qt4_evolution/al/pos.cpp | 616 |
1 files changed, 0 insertions, 616 deletions
diff --git a/muse_qt4_evolution/al/pos.cpp b/muse_qt4_evolution/al/pos.cpp deleted file mode 100644 index f8418a00..00000000 --- a/muse_qt4_evolution/al/pos.cpp +++ /dev/null @@ -1,616 +0,0 @@ -//============================================================================= -// 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. -//============================================================================= - -#include "al.h" -#include "pos.h" -#include "xml.h" -#include "tempo.h" -#include "sig.h" - -namespace AL { - -//--------------------------------------------------------- -// Pos -//--------------------------------------------------------- - -Pos::Pos() - { - _type = TICKS; - _tick = 0; - _frame = 0; - sn = -1; - } - -Pos::Pos(unsigned t, TType timeType) - { - _type = timeType; - if (_type == TICKS) - _tick = t; - else - _frame = t; - sn = -1; - } - -Pos::Pos(const QString& s) - { - int m, b, t; - sscanf(s.toLatin1().data(), "%04d.%02d.%03d", &m, &b, &t); - _tick = sigmap.bar2tick(m, b, t); - _type = TICKS; - sn = -1; - } - -Pos::Pos(int measure, int beat, int tick) - { - _tick = sigmap.bar2tick(measure, beat, tick); - _type = TICKS; - sn = -1; - } - -Pos::Pos(int min, int sec, int frame, int subframe) - { - double time = min * 60.0 + sec; - - double f = frame + subframe/100.0; - switch (AL::mtcType) { - case 0: // 24 frames sec - time += f * 1.0/24.0; - break; - case 1: // 25 - time += f * 1.0/25.0; - break; - case 2: // 30 drop frame - time += f * 1.0/30.0; - break; - case 3: // 30 non drop frame - time += f * 1.0/30.0; - break; - } - _type = FRAMES; - _frame = lrint(time * AL::sampleRate); - sn = -1; - } - -//--------------------------------------------------------- -// setType -//--------------------------------------------------------- - -void Pos::setType(TType t) - { - if (t == _type) - return; - - if (_type == TICKS) { - // convert from ticks to frames - _frame = tempomap.tick2frame(_tick, _frame, &sn); - } - else { - // convert from frames to ticks - _tick = tempomap.frame2tick(_frame, _tick, &sn); - } - _type = t; - } - -//--------------------------------------------------------- -// operator+= -//--------------------------------------------------------- - -Pos& Pos::operator+=(const Pos& a) - { - if (_type == FRAMES) - _frame += a.frame(); - else - _tick += a.tick(); - sn = -1; // invalidate cached values - return *this; - } - -//--------------------------------------------------------- -// operator-= -//--------------------------------------------------------- - -Pos& Pos::operator-=(const Pos& a) - { - if (_type == FRAMES) - _frame -= a.frame(); - else - _tick -= a.tick(); - sn = -1; // invalidate cached values - return *this; - } - -//--------------------------------------------------------- -// operator+= -//--------------------------------------------------------- - -Pos& Pos::operator+=(int a) - { - if (_type == FRAMES) - _frame += a; - else - _tick += a; - sn = -1; // invalidate cached values - return *this; - } - -//--------------------------------------------------------- -// operator-= -//--------------------------------------------------------- - -Pos& Pos::operator-=(int a) - { - if (_type == FRAMES) - _frame -= a; - else - _tick -= a; - sn = -1; // invalidate cached values - return *this; - } - -Pos operator+(const Pos& a, int b) - { - Pos c(a); - return c += b; - } - -Pos operator-(const Pos& a, int b) - { - Pos c(a); - return c -= b; - } - -Pos operator+(const Pos& a, const Pos& b) - { - Pos c(a); - return c += b; - } - -Pos operator-(const Pos& a, const Pos& b) - { - Pos c(a); - return c -= b; - } - -bool Pos::operator>=(const Pos& s) const - { - if (_type == FRAMES) - return _frame >= s.frame(); - else - return _tick >= s.tick(); - } - -bool Pos::operator>(const Pos& s) const - { - if (_type == FRAMES) - return _frame > s.frame(); - else - return _tick > s.tick(); - } - -bool Pos::operator<(const Pos& s) const - { - if (_type == FRAMES) - return _frame < s.frame(); - else - return _tick < s.tick(); - } - -bool Pos::operator<=(const Pos& s) const - { - if (_type == FRAMES) - return _frame <= s.frame(); - else - return _tick <= s.tick(); - } - -bool Pos::operator==(const Pos& s) const - { - if (_type == FRAMES) - return _frame == s.frame(); - else - return _tick == s.tick(); - } - -bool Pos::operator!=(const Pos& s) const - { - if (_type == FRAMES) - return _frame != s.frame(); - else - return _tick != s.tick(); - } - -//--------------------------------------------------------- -// tick -//--------------------------------------------------------- - -unsigned Pos::tick() const - { - if (_type == FRAMES) - _tick = tempomap.frame2tick(_frame, _tick, &sn); - return _tick; - } - -//--------------------------------------------------------- -// frame -//--------------------------------------------------------- - -unsigned Pos::frame() const - { - if (_type == TICKS) - _frame = tempomap.tick2frame(_tick, _frame, &sn); - return _frame; - } - -//--------------------------------------------------------- -// setTick -//--------------------------------------------------------- - -void Pos::setTick(unsigned pos) - { - _tick = pos; - sn = -1; - if (_type == FRAMES) - _frame = tempomap.tick2frame(pos, &sn); - } - -//--------------------------------------------------------- -// setFrame -//--------------------------------------------------------- - -void Pos::setFrame(unsigned pos) - { - _frame = pos; - sn = -1; - if (_type == TICKS) - _tick = tempomap.frame2tick(pos, &sn); - } - -//--------------------------------------------------------- -// write -//--------------------------------------------------------- - -void Pos::write(Xml& xml, const char* name) const - { - if (_type == TICKS) - xml.tagE(QString("%1 tick=\"%2\"").arg(name).arg(_tick)); - else - xml.tagE(QString("%1 frame=\"%2\"").arg(name).arg(_frame)); - } - -//--------------------------------------------------------- -// read -//--------------------------------------------------------- - -void Pos::read(QDomNode node) - { - sn = -1; - - QDomElement e = node.toElement(); - QString s; - s = e.attribute("tick"); - if (!s.isEmpty()) { - _tick = s.toInt(); - _type = TICKS; - } - s = e.attribute("frame"); - if (!s.isEmpty()) { - _frame = s.toInt(); - _type = FRAMES; - } - } - -//--------------------------------------------------------- -// PosLen -//--------------------------------------------------------- - -PosLen::PosLen() - { - _lenTick = 0; - _lenFrame = 0; - sn = -1; - } - -PosLen::PosLen(const PosLen& p) - : Pos(p) - { - _lenTick = p._lenTick; - _lenFrame = p._lenFrame; - sn = -1; - } - -//--------------------------------------------------------- -// dump -//--------------------------------------------------------- - -void PosLen::dump(int n) const - { - Pos::dump(n); - printf(" Len("); - switch(type()) { - case FRAMES: - printf("samples=%d)\n", _lenFrame); - break; - case TICKS: - printf("ticks=%d)\n", _lenTick); - break; - } - } - -void Pos::dump(int /*n*/) const - { - printf("Pos(%s, sn=%d, ", type() == FRAMES ? "Frames" : "Ticks", sn); - switch(type()) { - case FRAMES: - printf("samples=%d)", _frame); - break; - case TICKS: - printf("ticks=%d)", _tick); - break; - } - } - -//--------------------------------------------------------- -// write -//--------------------------------------------------------- - -void PosLen::write(Xml& xml, const char* name) const - { - if (type() == TICKS) - xml.tagE(QString("%1 tick=\"%2\" len=\"%3\"").arg(name).arg(tick()).arg(_lenTick)); - else - xml.tagE(QString("%1 sample=\"%2\" len=\"%3\"").arg(name).arg(frame()).arg(_lenFrame)); - } - -//--------------------------------------------------------- -// read -//--------------------------------------------------------- - -void PosLen::read(QDomNode node) - { - QDomElement e = node.toElement(); - QString s; - s = e.attribute("tick"); - if (!s.isEmpty()) { - setType(TICKS); - setTick(s.toInt()); - } - s = e.attribute("sample"); - if (!s.isEmpty()) { - setType(FRAMES); - setFrame(s.toInt()); - } - s = e.attribute("len"); - if (!s.isEmpty()) { - int n = s.toInt(); - if (type() == TICKS) - setLenTick(n); - else - setLenFrame(n); - } - } - -//--------------------------------------------------------- -// setLenTick -//--------------------------------------------------------- - -void PosLen::setLenTick(unsigned len) - { - _lenTick = len; - sn = -1; - if (type() == FRAMES) - _lenFrame = tempomap.tick2frame(len, &sn); - else - _lenTick = len; - } - -//--------------------------------------------------------- -// setLenFrame -//--------------------------------------------------------- - -void PosLen::setLenFrame(unsigned len) - { - sn = -1; - if (type() == TICKS) - _lenTick = tempomap.frame2tick(len, &sn); - else - _lenFrame = len; - } - -//--------------------------------------------------------- -// lenTick -//--------------------------------------------------------- - -unsigned PosLen::lenTick() const - { - if (type() == FRAMES) - _lenTick = tempomap.frame2tick(_lenFrame, _lenTick, &sn); - return _lenTick; - } - -//--------------------------------------------------------- -// lenFrame -//--------------------------------------------------------- - -unsigned PosLen::lenFrame() const - { - if (type() == TICKS) - _lenFrame = tempomap.tick2frame(_lenTick, _lenFrame, &sn); - return _lenFrame; - } - -//--------------------------------------------------------- -// end -//--------------------------------------------------------- - -Pos PosLen::end() const - { - Pos pos(*this); - pos.invalidSn(); - switch(type()) { - case FRAMES: - pos.setFrame(pos.frame() + _lenFrame); - break; - case TICKS: - pos.setTick(pos.tick() + _lenTick); - break; - } - return pos; - } - -//--------------------------------------------------------- -// setPos -//--------------------------------------------------------- - -void PosLen::setPos(const Pos& pos) - { - switch(pos.type()) { - case FRAMES: - setFrame(pos.frame()); - break; - case TICKS: - setTick(pos.tick()); - break; - } - } - -//--------------------------------------------------------- -// operator== -//--------------------------------------------------------- - -bool PosLen::operator==(const PosLen& pl) const { - if(type()==TICKS) - return (_lenTick==pl._lenTick && Pos::operator==((const Pos&)pl)); - else - return (_lenFrame==pl._lenFrame && Pos::operator==((const Pos&)pl)); -} - -//--------------------------------------------------------- -// mbt -//--------------------------------------------------------- - -void Pos::mbt(int* bar, int* beat, int* tk) const - { - sigmap.tickValues(tick(), bar, beat, (unsigned*)tk); - } - -//--------------------------------------------------------- -// msf -//--------------------------------------------------------- - -void Pos::msf(int* min, int* sec, int* fr, int* subFrame) const - { -#if 0 - //double has been replaced by float because it prevents (mysteriously) - //from a segfault that occurs at the launching of muse - /*double*/ float time = double(frame()) / double(AL::sampleRate); - *min = int(time) / 60; - *sec = int(time) % 60; - //double has been replaced by float because it prevents (mysteriously) - //from a segfault that occurs at the launching of muse - /*double*/ float rest = time - (*min * 60 + *sec); - switch(AL::mtcType) { - case 0: // 24 frames sec - rest *= 24; - break; - case 1: // 25 - rest *= 25; - break; - case 2: // 30 drop frame - rest *= 30; - break; - case 3: // 30 non drop frame - rest *= 30; - break; - } - *fr = int(rest); - *subFrame = int((rest- *fr)*100); -#else - // for further testing: - - double time = double(frame()) / double(AL::sampleRate); - *min = int(time) / 60; - *sec = int(time) % 60; - double rest = time - ((*min) * 60 + (*sec)); - switch(AL::mtcType) { - case 0: // 24 frames sec - rest *= 24; - break; - case 1: // 25 - rest *= 25; - break; - case 2: // 30 drop frame - rest *= 30; - break; - case 3: // 30 non drop frame - rest *= 30; - break; - } - *fr = lrint(rest); - *subFrame = lrint((rest - (*fr)) * 100.0); -#endif - } - -//--------------------------------------------------------- -// timesig -//--------------------------------------------------------- - -TimeSignature Pos::timesig() const - { - return sigmap.timesig(tick()); - } - -//--------------------------------------------------------- -// snap -// raster = 1 no snap -// raster = 0 snap to measure -// all other raster values snap to raster tick -//--------------------------------------------------------- - -void Pos::snap(int raster) - { - setTick(sigmap.raster(tick(), raster)); - } - -void Pos::upSnap(int raster) - { - setTick(sigmap.raster2(tick(), raster)); - } - -void Pos::downSnap(int raster) - { - setTick(sigmap.raster1(tick(), raster)); - } - -Pos Pos::snaped(int raster) const - { - return Pos(sigmap.raster(tick(), raster)); - } - -Pos Pos::upSnaped(int raster) const - { - return Pos(sigmap.raster2(tick(), raster)); - } - -Pos Pos::downSnaped(int raster) const - { - return Pos(sigmap.raster1(tick(), raster)); - } -} - |