Beispiel #1
0
void SigList::normalize()
{
	int z = 0;
	int n = 0;
	unsigned tick = 0;
	iSigEvent ee;

	for (iSigEvent e = begin(); e != end();)
	{
		if (z == e->second->z && n == e->second->n)
		{
			e->second->tick = tick;
			erase(ee);
		}
		z = e->second->z;
		n = e->second->n;
		ee = e;
		tick = e->second->tick;
		++e;
	}

	int bar = 0;
	for (iSigEvent e = begin(); e != end();)
	{
		e->second->bar = bar;
		int delta = e->first - e->second->tick;
		int ticksB = ticks_beat(e->second->n);
		int ticksM = ticksB * e->second->z;
		bar += delta / ticksM;
		if (delta % ticksM) // Teil eines Taktes
			++bar;
		++e;
	}
}
Beispiel #2
0
	void SigList::normalize()
	{
		TimeSignature sig(0, 0);
		unsigned tick = 0;
		iSigEvent ee;

		for (iSigEvent e = begin(); e != end();)
		{
			if (sig.z == e->second->sig.z && sig.n == e->second->sig.n)
			{
				e->second->tick = tick;
				erase(ee);
			}
			sig = e->second->sig;
			ee = e;
			tick = e->second->tick;
			++e;
		}

		int bar = 0;
		for (iSigEvent e = begin(); e != end();)
		{
			e->second->bar = bar;
			int delta = e->first - e->second->tick;
			int ticksB = ticks_beat(e->second->sig.n);
			int ticksM = ticksB * e->second->sig.z;
			bar += delta / ticksM;
			if (delta % ticksM) // Teil eines Taktes
				++bar;
			++e;
		}
	}
Beispiel #3
0
void TimeSigMap::tickValues(int t, int* bar, int* beat, int* tick) const
      {
      if (empty()) {
            *bar  = 0;
            *beat = 0;
            *tick = 0;
            return;
            }
      ciSigEvent e = upper_bound(t);
      if (empty() || e == begin()) {
            qDebug("tickValue(0x%x) not found", t);
            abort();
            }
      --e;
      int delta  = t - e->first;
      int ticksB = ticks_beat(e->second.timesig().denominator());
      int ticksM = ticksB * e->second.timesig().numerator();
      if (ticksM == 0) {
            qDebug("TimeSigMap::tickValues: at %d %s", t, qPrintable(e->second.timesig().print()));
            *bar  = 0;
            *beat = 0;
            *tick = 0;
            return;
            }
      *bar       = e->second.bar() + delta / ticksM;
      int rest   = delta % ticksM;
      *beat      = rest / ticksB;
      *tick      = rest % ticksB;
      }
Beispiel #4
0
int TimeSigMap::rasterStep(unsigned t, int raster) const
      {
      if (raster == 0) {
            ciSigEvent e = upper_bound(t);
            return ticks_beat(e->second.timesig().denominator()) * e->second.timesig().numerator();
            }
      return raster;
      }
Beispiel #5
0
int SigList::rasterStep(unsigned t, int raster) const
{
	if (raster == 0)
	{
		ciSigEvent e = upper_bound(t);
		assert(e != end());
		return ticks_beat(e->second->n) * e->second->z;
	}
	return raster;
}
Beispiel #6
0
	int SigList::ticksBeat(unsigned tick) const
	{
		ciSigEvent i = upper_bound(tick);
		if (i == end())
		{
			printf("SigList::ticksBeat event not found! tick:%d\n", tick);
			return 0;
		}
		return ticks_beat(i->second->sig.n);
	}
Beispiel #7
0
unsigned TimeSigMap::raster2(unsigned t, int raster) const
      {
      if (raster == 1)
            return t;
      ciSigEvent e = upper_bound(t);

      int delta  = t - e->first;
      int ticksM = ticks_beat(e->second.timesig().denominator()) * e->second.timesig().numerator();
      if (raster == 0)
            raster = ticksM;
      int rest   = delta % ticksM;
      int bb     = (delta/ticksM)*ticksM;
      return  e->first + bb + ((rest+raster-1)/raster)*raster;
      }
Beispiel #8
0
unsigned SigList::raster2(unsigned t, int raster) const
{
	if (raster == 1)
		return t;
	ciSigEvent e = upper_bound(t);
	assert(e != end());

	int delta = t - e->second->tick;
	int ticksM = ticks_beat(e->second->n) * e->second->z;
	if (raster == 0)
		raster = ticksM;
	int rest = delta % ticksM;
	int bb = (delta / ticksM) * ticksM;
	return e->second->tick + bb + ((rest + raster - 1) / raster) * raster;
}
Beispiel #9
0
	int SigList::rasterStep(unsigned t, int raster) const
	{
		if (raster == 0)
		{
			ciSigEvent e = upper_bound(t);
			if (e == end())
			{
				printf("SigList::rasterStep event not found tick:%d\n", t);
				//return 0;
				return raster;
			}

			return ticks_beat(e->second->sig.n) * e->second->sig.z;
		}
		return raster;
	}
Beispiel #10
0
int TimeSigMap::bar2tick(int bar, int beat) const
      {
      ciSigEvent e;

      for (e = begin(); e != end(); ++e) {
            if (bar < e->second.bar())
                  break;
            }
      if (empty() || e == begin()) {
            qDebug("TimeSigMap::bar2tick(): not found(%d,%d) not found", bar, beat);
            if (empty())
                  qDebug("   list is empty");
            return 0;
            }
      --e;
      int ticksB = ticks_beat(e->second.timesig().denominator());
      int ticksM = ticksB * e->second.timesig().numerator();
      return e->first + (bar - e->second.bar()) * ticksM + ticksB * beat;
      }
Beispiel #11
0
unsigned SigList::raster(unsigned t, int raster) const
{
	if (raster == 1)
		return t;
	ciSigEvent e = upper_bound(t);
	if (e == end())
	{
		printf("SigList::raster(%x,)\n", t);
		// abort();
		return t;
	}
	int delta = t - e->second->tick;
	int ticksM = ticks_beat(e->second->n) * e->second->z;
	if (raster == 0)
		raster = ticksM;
	int rest = delta % ticksM;
	int bb = (delta / ticksM) * ticksM;
	return e->second->tick + bb + ((rest + raster / 2) / raster) * raster;
}
Beispiel #12
0
	unsigned SigList::raster2(unsigned t, int raster) const
	{
		if (raster == 1)
			return t;
		ciSigEvent e = upper_bound(t);
		if (e == end())
		{
			printf("SigList::raster2 event not found tick:%d\n", t);
			//return 0;
			return t;
		}

		int delta = t - e->second->tick;
		int ticksM = ticks_beat(e->second->sig.n) * e->second->sig.z;
		if (raster == 0)
			raster = ticksM;
		int rest = delta % ticksM;
		int bb = (delta / ticksM) * ticksM;
		return e->second->tick + bb + ((rest + raster - 1) / raster) * raster;
	}
Beispiel #13
0
unsigned SigList::bar2tick(int bar, int beat, unsigned tick) const
{
	ciSigEvent e;

	if (bar < 0)
		bar = 0;
	for (e = begin(); e != end();)
	{
		ciSigEvent ee = e;
		++ee;
		if (ee == end())
			break;
		if (bar < ee->second->bar)
			break;
		e = ee;
	}
	int ticksB = ticks_beat(e->second->n);
	int ticksM = ticksB * e->second->z;
	return e->second->tick + (bar - e->second->bar) * ticksM + ticksB * beat + tick;
}
Beispiel #14
0
	void SigList::tickValues(unsigned t, int* bar, int* beat, unsigned* tick) const
	{
		ciSigEvent e = upper_bound(t);
		if (e == end())
		{
			fprintf(stderr, "tickValues(0x%x) not found(%zd)\n", t, size());
			*bar = 0;
			*beat = 0;
			*tick = 0;
			return;
		}

		int delta = t - e->second->tick;
		int ticksB = ticks_beat(e->second->sig.n);
		int ticksM = ticksB * e->second->sig.z;
		*bar = e->second->bar + delta / ticksM;
		int rest = delta % ticksM;
		*beat = rest / ticksB;
		*tick = rest % ticksB;
	}
Beispiel #15
0
int TimeSigMap::bar2tick(int bar, int beat) const
      {
      // bar - index of current bar (terminology: bar == measure)
      // beat - index of beat in current bar
      auto e = begin();

      for (; e != end(); ++e) {
            if (bar < e->second.bar())
                  break;
            }
      if (empty() || e == begin()) {
            qDebug("TimeSigMap::bar2tick(): not found(%d,%d) not found", bar, beat);
            if (empty())
                  qDebug("   list is empty");
            return 0;
            }
      --e; // current TimeSigMap value
      int ticksB = ticks_beat(e->second.timesig().denominator()); // ticks per beat
      int ticksM = ticksB * e->second.timesig().numerator();      // bar length in ticks
      return e->first + (bar - e->second.bar()) * ticksM + ticksB * beat;
      }
Beispiel #16
0
int SigList::ticksBeat(unsigned tick) const
{
	ciSigEvent i = upper_bound(tick);
	assert(i != end());
	return ticks_beat(i->second->n);
}
Beispiel #17
0
int SigList::ticksMeasure(int Z, int N) const
{
	return ticks_beat(N) * Z;
}
Beispiel #18
0
	int SigList::ticksMeasure(const TimeSignature& sig) const
	{
		return ticks_beat(sig.n) * sig.z;
	}
Beispiel #19
0
int ticksPerMeasure(int numerator, int denominator)
      {
      return ticks_beat(denominator) * numerator;
      }