1 /*
2 
3 Pencil2D - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2012-2020 Matthew Chiawen Chang
6 
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 */
17 
18 #ifndef SOUNDCLIP_H
19 #define SOUNDCLIP_H
20 
21 #include <memory>
22 #include "keyframe.h"
23 
24 class SoundPlayer;
25 
26 class SoundClip : public KeyFrame
27 {
28 public:
29     explicit SoundClip();
30     explicit SoundClip(const SoundClip&);
31     ~SoundClip() override;
32     SoundClip& operator=(const SoundClip& a);
33 
34     SoundClip* clone() override;
35 
36     Status init(const QString& strSoundFile);
37     bool isValid() const;
38 
setSoundClipName(const QString & sName)39     void setSoundClipName(const QString& sName) { mOriginalSoundClipName = sName; }
soundClipName()40     QString soundClipName() const { return mOriginalSoundClipName; }
41 
42     void attachPlayer(SoundPlayer* player);
43     void detachPlayer();
player()44     SoundPlayer* player() const { return mPlayer.get(); }
45 
46     void play();
47     void playFromPosition(int frameNumber, int fps);
48     void pause();
49     void stop();
50 
51     int64_t duration() const;
52     void setDuration(const int64_t& duration);
53 
54     void updateLength(int fps);
55 
56 private:
57     std::shared_ptr<SoundPlayer> mPlayer;
58 
59     QString mOriginalSoundClipName;
60 
61     // Duration in seconds.
62     // This is stored to update the length of the frame when the FPS changes.
63     int64_t mDuration = 0;
64 };
65 
66 #endif // SOUNDCLIP_H
67