OpenShot Library | libopenshot  0.4.0
AudioPlaybackThread.h
Go to the documentation of this file.
1 
10 // Copyright (c) 2008-2019 OpenShot Studios, LLC
11 //
12 // SPDX-License-Identifier: LGPL-3.0-or-later
13 
14 #ifndef OPENSHOT_AUDIO_PLAYBACK_THREAD_H
15 #define OPENSHOT_AUDIO_PLAYBACK_THREAD_H
16 
17 #include "ReaderBase.h"
18 #include "RendererBase.h"
19 #include "AudioReaderSource.h"
20 #include "AudioDevices.h"
21 #include "AudioReaderSource.h"
22 #include "Qt/VideoCacheThread.h"
23 
24 #include <OpenShotAudio.h>
25 #include <AppConfig.h>
26 #include <juce_audio_basics/juce_audio_basics.h>
27 #include <juce_audio_devices/juce_audio_devices.h>
28 
29 namespace openshot
30 {
31 
32 // Forward decls
33 class ReaderBase;
34 class Frame;
35 class PlayerPrivate;
36 class QtPlayer;
37 
38 
43 private:
46 
48  static AudioDeviceManagerSingleton* m_pInstance;
49 
50 public:
52  std::string initialise_error;
53 
56 
59 
62 
65  static AudioDeviceManagerSingleton* Instance(int rate, int channels);
66 
68  juce::AudioDeviceManager audioDeviceManager;
69 
71  void CloseAudioDevice();
72  };
73 
77  class AudioPlaybackThread : juce::Thread
78  {
79  juce::AudioSourcePlayer player;
80  juce::AudioTransportSource transport;
81  juce::MixerAudioSource mixer;
82  AudioReaderSource *source;
83  double sampleRate;
84  int numChannels;
85  juce::WaitableEvent play;
86  bool is_playing;
87  juce::TimeSliceThread time_thread;
88  openshot::VideoCacheThread *videoCache;
89  std::mutex transportMutex;
90  std::condition_variable transportCondition;
91 
96 
98  void NotifyTransportStateChanged();
99 
101  void Reader(openshot::ReaderBase *reader);
102 
104  std::shared_ptr<openshot::Frame> getFrame();
105 
107  void Play();
108 
110  void Seek(int64_t new_position);
111 
113  void Stop();
114 
116  void run();
117 
119  void setSpeed(int new_speed) { if (source) source->setSpeed(new_speed); }
120 
122  int getSpeed() const { if (source) return source->getSpeed(); else return 1; }
123 
125  std::string getError()
126  {
128  }
129 
131  double getDefaultSampleRate()
132  {
134  }
135 
137  AudioDeviceInfo getCurrentAudioDevice()
138  {
140  }
141 
143  AudioDeviceList getAudioDeviceNames()
144  {
145  AudioDevices devs;
146  return devs.getNames();
147  };
148 
149  friend class PlayerPrivate;
150  friend class QtPlayer;
151 };
152 
153 } // namespace openshot
154 
155 #endif // OPENSHOT_AUDIO_PLAYBACK_THREAD_H
openshot::AudioDeviceManagerSingleton::initialise_error
std::string initialise_error
Error found during JUCE initialise method.
Definition: AudioPlaybackThread.h:52
openshot::AudioDeviceInfo
This struct hold information about Audio Devices.
Definition: AudioDevices.h:26
openshot::AudioDeviceList
std::vector< std::pair< std::string, std::string > > AudioDeviceList
Definition: AudioDevices.h:42
openshot
This namespace is the default namespace for all code in the openshot library.
Definition: Compressor.h:28
openshot::AudioDeviceManagerSingleton::Instance
static AudioDeviceManagerSingleton * Instance()
Override with default sample rate & channels (44100, 2) and no preferred audio device.
Definition: AudioPlaybackThread.cpp:39
openshot::AudioDeviceManagerSingleton::audioDeviceManager
juce::AudioDeviceManager audioDeviceManager
Public device manager property.
Definition: AudioPlaybackThread.h:68
openshot::AudioPlaybackThread
The audio playback thread.
Definition: AudioPlaybackThread.h:77
openshot::AudioDevices::getNames
AudioDeviceList getNames()
Definition: AudioDevices.cpp:21
openshot::AudioDeviceManagerSingleton
Singleton wrapper for AudioDeviceManager (to prevent multiple instances).
Definition: AudioPlaybackThread.h:42
openshot::VideoCacheThread
The video cache class.
Definition: VideoCacheThread.h:29
openshot::PlayerPrivate
The private part of QtPlayer class, which contains an audio thread and video thread,...
Definition: PlayerPrivate.h:30
openshot::AudioDevices
A class which probes the available audio devices.
Definition: AudioDevices.h:45
openshot::AudioReaderSource::setSpeed
void setSpeed(int new_speed)
Set Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster,...
Definition: AudioReaderSource.h:84
AudioReaderSource.h
Header file for AudioReaderSource class.
VideoCacheThread.h
Source file for VideoCacheThread class.
ReaderBase.h
Header file for ReaderBase class.
openshot::QtPlayer
This class is used to playback a video from a reader.
Definition: QtPlayer.h:32
openshot::AudioDeviceManagerSingleton::CloseAudioDevice
void CloseAudioDevice()
Close audio device.
Definition: AudioPlaybackThread.cpp:178
openshot::ReaderBase
This abstract class is the base class, used by all readers in libopenshot.
Definition: ReaderBase.h:75
openshot::AudioDeviceManagerSingleton::defaultSampleRate
double defaultSampleRate
Default sample rate (as detected)
Definition: AudioPlaybackThread.h:55
openshot::AudioDeviceManagerSingleton::currentAudioDevice
AudioDeviceInfo currentAudioDevice
Current open audio device (or last attempted device - if none were successful)
Definition: AudioPlaybackThread.h:58
openshot::AudioReaderSource::getSpeed
int getSpeed() const
Get Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster,...
Definition: AudioReaderSource.h:86
AudioDevices.h
Header file for Audio Device Info struct.
RendererBase.h
Header file for RendererBase class.
openshot::AudioReaderSource
This class is used to expose any ReaderBase derived class as an AudioSource in JUCE.
Definition: AudioReaderSource.h:31