implemented support for time-signatures other than 4/4
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1021 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
@@ -40,12 +40,14 @@ public:
|
||||
void loadSettings( const QDomElement & _this,
|
||||
const QString & _name );
|
||||
|
||||
inline int getNumerator( void )
|
||||
void reset( void );
|
||||
|
||||
inline int getNumerator( void ) const
|
||||
{
|
||||
return( m_numeratorModel.value() );
|
||||
}
|
||||
|
||||
inline int getDenominator( void )
|
||||
inline int getDenominator( void ) const
|
||||
{
|
||||
return( m_denominatorModel.value() );
|
||||
}
|
||||
@@ -56,11 +58,6 @@ private:
|
||||
lcdSpinBoxModel m_denominatorModel;
|
||||
|
||||
|
||||
signals:
|
||||
void numeratorChanged( void );
|
||||
void denominatorChanged( void );
|
||||
|
||||
|
||||
friend class meterDialog;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -30,40 +30,39 @@
|
||||
#include "types.h"
|
||||
|
||||
const int DefaultTicksPerTact = 192;
|
||||
const int DefaultStepsPerTact = 16;
|
||||
const int DefaultBeatsPerTact = DefaultTicksPerTact / DefaultStepsPerTact;
|
||||
|
||||
|
||||
class midiTime
|
||||
{
|
||||
public:
|
||||
inline midiTime( const tact _tact, const tick _ticks ) :
|
||||
m_tact( _tact ),
|
||||
m_ticks( _tact * s_ticksPerTact + _ticks )
|
||||
{
|
||||
}
|
||||
|
||||
inline midiTime( const tick _ticks = 0 ) :
|
||||
m_ticks( _ticks )
|
||||
{
|
||||
}
|
||||
|
||||
inline midiTime( const int _abs = 0 ) :
|
||||
m_tact( _abs / DefaultTicksPerTact ),
|
||||
m_ticks( _abs % DefaultTicksPerTact )
|
||||
inline midiTime( const midiTime & _t ) :
|
||||
m_ticks( _t.m_ticks )
|
||||
{
|
||||
}
|
||||
|
||||
inline midiTime( const midiTime & _t )
|
||||
{
|
||||
*this = _t;
|
||||
}
|
||||
|
||||
inline midiTime toNearestTact( void ) const
|
||||
{
|
||||
if( m_ticks >= DefaultTicksPerTact/2 )
|
||||
if( m_ticks % s_ticksPerTact >= s_ticksPerTact/2 )
|
||||
{
|
||||
return( m_tact * DefaultTicksPerTact +
|
||||
DefaultTicksPerTact );
|
||||
return( ( getTact() + 1 ) * s_ticksPerTact );
|
||||
}
|
||||
return( m_tact * DefaultTicksPerTact );
|
||||
return( getTact() * s_ticksPerTact );
|
||||
}
|
||||
|
||||
inline midiTime & operator=( const midiTime & _t )
|
||||
{
|
||||
m_tact = _t.m_tact;
|
||||
m_ticks = _t.m_ticks;
|
||||
return( *this );
|
||||
}
|
||||
@@ -80,14 +79,18 @@ public:
|
||||
static_cast<int>( _t ) );
|
||||
}
|
||||
|
||||
inline void setTact( tact _t )
|
||||
{
|
||||
m_tact = _t;
|
||||
}
|
||||
|
||||
inline tact getTact( void ) const
|
||||
{
|
||||
return( m_tact );
|
||||
return( m_ticks / s_ticksPerTact );
|
||||
}
|
||||
|
||||
inline tact nextFullTact( void ) const
|
||||
{
|
||||
if( m_ticks % s_ticksPerTact == 0 )
|
||||
{
|
||||
return( m_ticks / s_ticksPerTact );
|
||||
}
|
||||
return( m_ticks / s_ticksPerTact + 1 );
|
||||
}
|
||||
|
||||
inline void setTicks( tick _t )
|
||||
@@ -100,21 +103,17 @@ public:
|
||||
return( m_ticks );
|
||||
}
|
||||
|
||||
// converts time-class in an absolute value, useful for calculations,
|
||||
// comparisons and so on...
|
||||
inline operator int( void ) const
|
||||
{
|
||||
return( static_cast<int>( m_tact ) * DefaultTicksPerTact +
|
||||
static_cast<int>( m_ticks ) );
|
||||
return( m_ticks );
|
||||
}
|
||||
|
||||
// calculate number of frame that are needed this time
|
||||
inline f_cnt_t frames( const float _frames_per_tick ) const
|
||||
{
|
||||
if( m_tact >= 0 )
|
||||
if( m_ticks >= 0 )
|
||||
{
|
||||
return( static_cast<f_cnt_t>(
|
||||
( m_tact * DefaultTicksPerTact + m_ticks ) *
|
||||
return( static_cast<f_cnt_t>( m_ticks *
|
||||
_frames_per_tick ) );
|
||||
}
|
||||
return( 0 );
|
||||
@@ -128,10 +127,26 @@ public:
|
||||
}
|
||||
|
||||
|
||||
static tick ticksPerTact( void )
|
||||
{
|
||||
return( s_ticksPerTact );
|
||||
}
|
||||
|
||||
static int stepsPerTact( void )
|
||||
{
|
||||
return( ticksPerTact() / DefaultBeatsPerTact );
|
||||
}
|
||||
|
||||
static void setTicksPerTact( tick _tpt )
|
||||
{
|
||||
s_ticksPerTact = _tpt;
|
||||
}
|
||||
|
||||
private:
|
||||
tact m_tact;
|
||||
tick m_ticks;
|
||||
|
||||
static tick s_ticksPerTact;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
@@ -47,8 +47,6 @@ class patternFreezeThread;
|
||||
class sampleBuffer;
|
||||
|
||||
|
||||
const int DEFAULT_STEPS_PER_TACT = 16;
|
||||
const int BEATS_PER_TACT = DefaultTicksPerTact/DEFAULT_STEPS_PER_TACT;
|
||||
|
||||
|
||||
|
||||
@@ -70,6 +68,7 @@ public:
|
||||
|
||||
|
||||
virtual midiTime length( void ) const;
|
||||
midiTime beatPatternLength( void ) const;
|
||||
|
||||
note * addNote( const note & _new_note, const bool _quant_pos = TRUE );
|
||||
|
||||
@@ -159,6 +158,7 @@ protected slots:
|
||||
void clear( void );
|
||||
void freeze( void );
|
||||
void unfreeze( void );
|
||||
void changeTimeSignature( void );
|
||||
|
||||
|
||||
private:
|
||||
|
||||
@@ -244,7 +244,7 @@ private:
|
||||
|
||||
void copy_to_clipboard( const noteVector & _notes ) const;
|
||||
|
||||
void drawDetuningInfo( QPainter & _p, note * _n, Uint16 _x, Uint16 _y );
|
||||
void drawDetuningInfo( QPainter & _p, note * _n, int _x, int _y );
|
||||
bool mouseOverNote( void );
|
||||
note * noteUnderMouse( void );
|
||||
noteVector::const_iterator noteIteratorUnderMouse( void );
|
||||
|
||||
@@ -40,10 +40,10 @@ class pattern;
|
||||
class timeLine;
|
||||
|
||||
|
||||
const bpm_t MIN_BPM = 10;
|
||||
const bpm_t DEFAULT_BPM = 140;
|
||||
const bpm_t MAX_BPM = 999;
|
||||
const Uint16 MAX_SONG_LENGTH = 9999;
|
||||
const bpm_t MinTempo = 10;
|
||||
const bpm_t DefaultTempo = 140;
|
||||
const bpm_t MaxTempo = 999;
|
||||
const tick MaxSongLength = 9999 * DefaultTicksPerTact;
|
||||
|
||||
|
||||
class song : public trackContainer
|
||||
@@ -139,11 +139,6 @@ public:
|
||||
bpm_t getTempo( void );
|
||||
virtual automationPattern * tempoAutomationPattern( void );
|
||||
|
||||
const meterModel & getTimeSig( void ) const
|
||||
{
|
||||
return( m_timeSigModel );
|
||||
}
|
||||
|
||||
track * getAutomationTrack( void )
|
||||
{
|
||||
return( m_automationTrack );
|
||||
@@ -233,6 +228,13 @@ private:
|
||||
virtual ~song();
|
||||
|
||||
|
||||
inline int ticksPerTact( void ) const
|
||||
{
|
||||
return( DefaultTicksPerTact *
|
||||
m_timeSigModel.getNumerator() /
|
||||
m_timeSigModel.getDenominator() );
|
||||
}
|
||||
|
||||
inline tact currentTact( void ) const
|
||||
{
|
||||
return( m_playPos[m_playMode].getTact() );
|
||||
@@ -242,7 +244,7 @@ private:
|
||||
{
|
||||
return( m_playPos[m_playMode].getTicks() );
|
||||
}
|
||||
void setPlayPos( tact _tact_num, tick _tick, PlayModes _play_mode );
|
||||
void setPlayPos( tick _ticks, PlayModes _play_mode );
|
||||
|
||||
void saveControllerStates( QDomDocument & _doc, QDomElement & _this );
|
||||
void restoreControllerStates( const QDomElement & _this );
|
||||
@@ -252,6 +254,7 @@ private:
|
||||
|
||||
lcdSpinBoxModel m_tempoModel;
|
||||
meterModel m_timeSigModel;
|
||||
int m_oldTicksPerTact;
|
||||
sliderModel m_masterVolumeModel;
|
||||
sliderModel m_masterPitchModel;
|
||||
|
||||
@@ -296,7 +299,8 @@ private:
|
||||
|
||||
signals:
|
||||
void tempoChanged( bpm_t _new_bpm );
|
||||
void timeSignatureChanged( int _num, int _den );
|
||||
void timeSignatureChanged( int _old_ticks_per_tact,
|
||||
int _ticks_per_tact );
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -60,7 +60,6 @@ signals:
|
||||
private slots:
|
||||
void setHighQuality( bool );
|
||||
void scrolled( int _new_pos );
|
||||
void updateTimeLinePosition( void );
|
||||
|
||||
void masterVolumeChanged( int _new_val );
|
||||
void masterVolumePressed( void );
|
||||
|
||||
@@ -139,7 +139,7 @@ private:
|
||||
inline int markerX( const midiTime & _t ) const
|
||||
{
|
||||
return( m_xOffset + static_cast<int>( ( _t - m_begin ) *
|
||||
m_ppt / DefaultTicksPerTact ) );
|
||||
m_ppt / midiTime::ticksPerTact() ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ typedef signed int Sint32;
|
||||
typedef Uint32 minute;
|
||||
typedef Sint8 second;
|
||||
typedef Sint32 tact;
|
||||
typedef Sint16 tick;
|
||||
typedef Sint32 tick;
|
||||
typedef Uint8 volume;
|
||||
typedef Sint8 panning;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user