*** song_viejo.cpp	2013-07-05 18:29:42.677000000 -0500
--- song.cpp	2013-07-05 19:44:41.000000000 -0500
***************
*** 110,115 ****
--- 110,118 ----
  			this, SLOT( masterPitchChanged() ) );*/
  
  	qRegisterMetaType<note>( "note" );
+ 	elapsedmilliseconds = 0;
+ 	elapsedticks = 0;
+ 	elapsedtacts = 0;
  
  }
  
***************
*** 187,192 ****
--- 190,196 ----
  		switch( tl->behaviourAtStop() )
  		{
  			case timeLine::BackToZero:
+ 			  	elapsedmilliseconds = 0;
  				m_playPos[m_playMode].setTicks( 0 );
  				break;
  
***************
*** 195,200 ****
--- 199,205 ----
  				{
  					m_playPos[m_playMode].setTicks(
  						tl->savedPos().getTicks() );
+ 					elapsedmilliseconds = 0;
  					tl->savePos( -1 );
  				}
  				break;
***************
*** 208,213 ****
--- 213,219 ----
  				else
  				{
  					m_playPos[m_playMode].setTicks( 0 );
+ 					elapsedmilliseconds = 0;
  				}
  
  				m_playPos[m_playMode].setCurrentFrame( 0 );
***************
*** 351,356 ****
--- 357,363 ----
  		if( m_playPos[m_playMode] < tl->loopBegin() ||
  					m_playPos[m_playMode] >= tl->loopEnd() )
  		{
+ 		  	elapsedmilliseconds = (tl->loopBegin().getTicks()*60*1000/48)/getTempo();
  			m_playPos[m_playMode].setTicks(
  						tl->loopBegin().getTicks() );
  		}
***************
*** 414,419 ****
--- 421,427 ----
  				{
  					m_playPos[m_playMode].setTicks(
  						tl->loopBegin().getTicks() );
+ 					elapsedmilliseconds = ((tl->loopBegin().getTicks())*60*1000/48)/getTempo();
  				}
  			}
  
***************
*** 463,468 ****
--- 471,479 ----
  		total_frames_played += played_frames;
  		m_playPos[m_playMode].setCurrentFrame( played_frames +
  								current_frame );
+ 				elapsedmilliseconds += (((played_frames/frames_per_tick)*60*1000/48)/getTempo());
+ 		elapsedtacts = m_playPos[Mode_PlaySong].getTact();
+ 		elapsedticks = (m_playPos[Mode_PlaySong].getTicks()%ticksPerTact())/48;
  	}
  }
  
***************
*** 597,602 ****
--- 608,615 ----
  
  void song::setPlayPos( tick_t _ticks, PlayModes _play_mode )
  {
+     	elapsedticks += m_playPos[_play_mode].getTicks() - _ticks;
+ 	elapsedmilliseconds += (((( _ticks - m_playPos[_play_mode].getTicks()))*60*1000/48)/getTempo());
  	m_playPos[_play_mode].setTicks( _ticks );
  	m_playPos[_play_mode].setCurrentFrame( 0.0f );
  }
***************
*** 606,613 ****
  
  void song::stop()
  {
  	m_actions.push_back( ActionStop );
- 
  	engine::automationRecorder()->initRecord();
  }
  
--- 619,626 ----
  
  void song::stop()
  {
+   	elapsedmilliseconds = 0;
  	m_actions.push_back( ActionStop );
  	engine::automationRecorder()->initRecord();
  }
  
