13 #ifndef OPENSHOT_AUDIORECORDER_H
14 #define OPENSHOT_AUDIORECORDER_H
17 #include <condition_variable>
28 #include <AppConfig.h>
29 #include <juce_audio_basics/juce_audio_basics.h>
30 #include <juce_audio_devices/juce_audio_devices.h>
45 std::string
codec =
"pcm_s16le";
53 std::map<std::string, std::string>
options;
60 std::vector<float>
rms;
63 std::vector<std::vector<float>>
vectors()
const
65 std::vector<std::vector<float>> output;
66 output.push_back(
peak);
67 output.push_back(
rms);
80 std::vector<std::vector<float>>
vectors()
const
82 std::vector<std::vector<float>> output;
130 int samples_per_second;
134 double pending_squared_sum;
135 int64_t emitted_visual_samples;
136 std::vector<float> max_samples;
137 std::vector<float> rms_samples;
143 static std::shared_ptr<openshot::Frame>
CreateFrame(
146 int64_t frame_number);
151 :
private juce::AudioIODeviceCallback
181 const float*
const* inputChannelData,
182 int numInputChannels,
183 float*
const* outputChannelData,
184 int numOutputChannels,
186 const juce::AudioIODeviceCallbackContext& context)
override;
192 void ValidateSettings()
const;
198 juce::AudioDeviceManager device_manager;
199 std::unique_ptr<openshot::FFmpegWriter> writer;
200 std::unique_ptr<AudioRecorderWaveformAccumulator> waveform_accumulator;
203 mutable std::mutex state_mutex;
204 mutable std::mutex queue_mutex;
205 std::condition_variable queue_condition;
206 std::deque<AudioRecorderBlock> queue;
207 std::thread writer_thread;
213 std::atomic<bool> is_open;
214 std::atomic<bool> is_recording;
215 std::atomic<bool> is_monitoring;
216 std::atomic<bool> writer_should_stop;
217 std::atomic<int64_t> samples_recorded;
218 std::atomic<int64_t> dropped_blocks;
219 int64_t next_frame_number;