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"