18 #include "playbackmanager.h"
23 #include "layersound.h"
24 #include "layermanager.h"
25 #include "soundmanager.h"
26 #include "soundclip.h"
27 #include "soundplayer.h"
29 PlaybackManager::PlaybackManager( QObject* parent ) :
BaseManager( parent )
33 bool PlaybackManager::init()
35 mTimer =
new QTimer(
this );
36 connect( mTimer, &QTimer::timeout,
this, &PlaybackManager::timerTick );
44 mIsLooping = e->isLooping();
45 mIsRangedPlayback = e->isRangedPlayback();
46 mMarkInFrame = e->getMarkInFrameNumber();
47 mMarkOutFrame = e->getMarkOutFrameNumber();
48 mFps = e->getFrameRate();
56 data->setLooping( mIsLooping );
57 data->setRangedPlayback( mIsRangedPlayback );
58 data->setMarkInFrameNumber( mMarkInFrame );
59 data->setMarkOutFrameNumber( mMarkOutFrame );
60 data->setFrameRate( mFps );
64 bool PlaybackManager::isPlaying()
66 return mTimer->isActive();
69 void PlaybackManager::play()
71 int projectLength = editor()->layers()->projectLength();
73 mStartFrame = ( mIsRangedPlayback ) ? mMarkInFrame : 1;
74 mEndFrame = ( mIsRangedPlayback ) ? mMarkOutFrame : projectLength;
76 if ( editor()->currentFrame() >= mEndFrame )
78 editor()->scrubTo( mStartFrame );
81 mTimer->setInterval( 1000.0f / mFps );
85 mCheckForSoundsHalfway =
true;
87 emit playStateChanged(
true);
90 void PlaybackManager::stop()
94 emit playStateChanged(
false);
97 void PlaybackManager::setFps(
int fps )
102 emit fpsChanged( mFps );
106 for (
int i = 0; i < object()->getLayerCount(); ++i )
108 Layer* layer = object()->getLayer( i );
109 if ( layer->type() == Layer::SOUND )
111 auto soundLayer =
dynamic_cast<LayerSound *
>(layer);
112 soundLayer->updateFrameLengths(mFps);
118 void PlaybackManager::playSounds(
int frame )
126 std::vector< LayerSound* > kSoundLayers;
127 for (
int i = 0; i < object()->getLayerCount(); ++i )
129 Layer* layer = object()->getLayer( i );
130 if ( layer->type() == Layer::SOUND )
132 kSoundLayers.push_back( static_cast< LayerSound* >( layer ) );
138 if (mCheckForSoundsHalfway)
141 if ( layer->keyExistsWhichCovers( frame ) )
143 KeyFrame* key = layer->getKeyFrameWhichCovers( frame );
146 clip->playFromPosition(frame, mFps);
151 mCheckForSoundsHalfway =
false;
153 else if ( layer->keyExists( frame ) )
155 KeyFrame* key = layer->getKeyFrameAt( frame );
161 mActiveSoundFrame = frame;
164 if ( frame >= mEndFrame )
166 KeyFrame* key = layer->getKeyFrameWhichCovers( mActiveSoundFrame );
173 void PlaybackManager::stopSounds()
175 std::vector< LayerSound* > kSoundLayers;
176 for (
int i = 0; i < object()->getLayerCount(); ++i )
178 Layer* layer = object()->getLayer( i );
179 if ( layer->type() == Layer::SOUND )
181 kSoundLayers.push_back( static_cast< LayerSound* >( layer ) );
187 layer->foreachKeyFrame( [](
KeyFrame* key )
195 void PlaybackManager::timerTick()
197 playSounds( editor()->currentFrame() );
199 if ( editor()->currentFrame() >= mEndFrame )
203 editor()->scrubTo( mStartFrame );
204 mCheckForSoundsHalfway =
true;
213 editor()->scrubForward();
217 void PlaybackManager::setLooping(
bool isLoop )
219 if ( mIsLooping != isLoop )
222 emit loopStateChanged( mIsLooping );
226 void PlaybackManager::enableRangedPlayback(
bool b )
228 if ( mIsRangedPlayback != b )
230 mIsRangedPlayback = b;
231 emit rangedPlaybackStateChanged( mIsRangedPlayback );
235 void PlaybackManager::enableSound(
bool b)
245 mCheckForSoundsHalfway =
true;