/* * MidiTime.h - declaration of class MidiTime which provides data type for * position- and length-variables * * Copyright (c) 2004-2014 Tobias Doerffel = s_ticksPerTact/2 ) { return ( getTact() + 1 ) * s_ticksPerTact; } return getTact() * s_ticksPerTact; } MidiTime toAbsoluteTact() const { return getTact() * s_ticksPerTact; } MidiTime& operator=( const MidiTime& time ) { m_ticks = time.m_ticks; return *this; } MidiTime& operator+=( const MidiTime& time ) { m_ticks += time.m_ticks; return *this; } MidiTime& operator-=( const MidiTime& time ) { m_ticks -= time.m_ticks; return *this; } tact_t getTact() const { return m_ticks / s_ticksPerTact; } tact_t nextFullTact() const { if( m_ticks % s_ticksPerTact == 0 ) { return m_ticks / s_ticksPerTact; } return m_ticks / s_ticksPerTact + 1; } void setTicks( tick_t ticks ) { m_ticks = ticks; } tick_t getTicks() const { return m_ticks; } operator int() const { return m_ticks; } // calculate number of frame that are needed this time f_cnt_t frames( const float framesPerTick ) const { if( m_ticks >= 0 ) { return static_cast( m_ticks * framesPerTick ); } return 0; } static MidiTime fromFrames( const f_cnt_t frames, const float framesPerTick ) { return MidiTime( static_cast( frames / framesPerTick ) ); } static tick_t ticksPerTact() { return s_ticksPerTact; } static int stepsPerTact() { int steps = ticksPerTact() / DefaultBeatsPerTact; return qMax( 1, steps ); } static void setTicksPerTact( tick_t _tpt ) { s_ticksPerTact = _tpt; } private: tick_t m_ticks; static tick_t s_ticksPerTact; } ; #endif