File indexing completed on 2024-04-21 03:49:56

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2014 Sanjiban Bairagya <sanjiban22393@gmail.com>
0004 //
0005 
0006 #include "SoundTrack.h"
0007 
0008 #include "PlaybackSoundCueItem.h"
0009 
0010 namespace Marble
0011 {
0012 
0013 SoundTrack::SoundTrack( PlaybackSoundCueItem* item )
0014 {
0015     m_item = item;
0016     m_progress = 0;
0017     m_delayBeforeTrackStarts = 0;
0018     m_paused = true;
0019     connect( &m_timer, SIGNAL(timeout()), this, SLOT(playSlot()) );
0020 }
0021 
0022 void SoundTrack::setDelayBeforeTrackStarts( double delay )
0023 {
0024     m_delayBeforeTrackStarts = delay;
0025     m_timer.setSingleShot( true );
0026     m_timer.setInterval( m_delayBeforeTrackStarts * 1000 );
0027 }
0028 
0029 double SoundTrack::delayBeforeTrackStarts() const
0030 {
0031     return m_delayBeforeTrackStarts;
0032 }
0033 
0034 void SoundTrack::play()
0035 {
0036     m_paused = false;
0037     m_playTime = QDateTime::currentDateTime();
0038     if( m_progress <= m_delayBeforeTrackStarts ){
0039         m_timer.start( ( m_delayBeforeTrackStarts - m_progress ) * 1000 );
0040     } else {
0041         m_item->play();
0042     }
0043 }
0044 
0045 void SoundTrack::playSlot()
0046 {
0047     m_item->play();
0048 }
0049 
0050 void SoundTrack::pause()
0051 {
0052     m_paused = true;
0053     m_pauseTime = QDateTime::currentDateTime();
0054     m_progress += m_playTime.msecsTo( m_pauseTime );
0055     if( m_timer.isActive() ){
0056         m_timer.stop();
0057     } else {
0058         m_item->pause();
0059     }
0060 }
0061 
0062 void SoundTrack::seek( double offset )
0063 {
0064     m_timer.stop();
0065     m_progress = offset;
0066     m_playTime = QDateTime::currentDateTime().addMSecs( -offset * 1000 );
0067 
0068     if( offset <= m_delayBeforeTrackStarts ){
0069         if( !m_paused ){
0070             m_pauseTime = QDateTime();
0071             m_item->stop();
0072             m_timer.start( ( m_delayBeforeTrackStarts - m_progress ) * 1000 );
0073         } else {
0074             m_pauseTime = QDateTime::currentDateTime();
0075         }
0076     } else {
0077         if( !m_paused ){
0078             m_pauseTime = QDateTime();
0079             m_item->seek( offset - m_delayBeforeTrackStarts );
0080         } else {
0081             m_pauseTime = QDateTime::currentDateTime();
0082             m_item->seek( offset - m_delayBeforeTrackStarts );
0083         }
0084     }
0085 }
0086 
0087 void SoundTrack::stop()
0088 {
0089     m_paused = true;
0090     m_item->stop();
0091     m_timer.stop();
0092     m_playTime = QDateTime();
0093     m_pauseTime = QDateTime();
0094     m_progress = 0;
0095 }
0096 
0097 void SoundTrack::setPaused( bool pause )
0098 {
0099     m_paused = pause;
0100 }
0101 
0102 }
0103 
0104 #include "moc_SoundTrack.cpp"