13#ifndef OPENSHOT_AUDIORECORDER_H
14#define OPENSHOT_AUDIORECORDER_H
17#include <condition_variable>
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;
128 const float*
const* input_channel_data,
129 int num_input_channels,
151 int samples_per_second;
155 double pending_squared_sum;
156 int64_t emitted_visual_samples;
157 std::vector<float> max_samples;
158 std::vector<float> rms_samples;
164 static std::shared_ptr<openshot::Frame>
CreateFrame(
167 int64_t frame_number);
172 :
private juce::AudioIODeviceCallback
202 const float*
const* inputChannelData,
203 int numInputChannels,
204 float*
const* outputChannelData,
205 int numOutputChannels,
207 const juce::AudioIODeviceCallbackContext& context)
override;
213 void ValidateSettings()
const;
214 juce::String OpenDevice(
int device_channels);
220 juce::AudioDeviceManager device_manager;
221 std::unique_ptr<openshot::FFmpegWriter> writer;
222 std::unique_ptr<AudioRecorderWaveformAccumulator> waveform_accumulator;
225 mutable std::mutex state_mutex;
226 mutable std::mutex queue_mutex;
227 std::condition_variable queue_condition;
228 std::deque<AudioRecorderBlock> queue;
229 std::thread writer_thread;
235 std::atomic<bool> is_open;
236 std::atomic<bool> is_recording;
237 std::atomic<bool> is_monitoring;
238 std::atomic<bool> writer_should_stop;
239 std::atomic<int64_t> samples_recorded;
240 std::atomic<int64_t> dropped_blocks;
241 int64_t next_frame_number;
Header file for ChannelLayout class.
AudioLevelData ProcessBlock(const AudioRecorderBlock &block) const
AudioRecorder(const AudioRecorderSettings &settings)
void SetWaveformCallback(std::function< void(const AudioWaveformChunk &)> callback)
void SetLevelCallback(std::function< void(const AudioLevelData &)> callback)
~AudioRecorder() override
AudioRecorderStats GetStats() const
bool IsMonitoring() const
void audioDeviceAboutToStart(juce::AudioIODevice *device) override
openshot::AudioWaveformData GetWaveformSnapshot() const
void audioDeviceStopped() override
AudioLevelData GetLevelSnapshot() const
void audioDeviceIOCallbackWithContext(const float *const *inputChannelData, int numInputChannels, float *const *outputChannelData, int numOutputChannels, int numSamples, const juce::AudioIODeviceCallbackContext &context) override
static std::shared_ptr< openshot::Frame > CreateFrame(const AudioRecorderBlock &block, openshot::ChannelLayout channel_layout, int64_t frame_number)
This namespace is the default namespace for all code in the openshot library.
ChannelLayout
This enumeration determines the audio channel layout (such as stereo, mono, 5 point surround,...
std::vector< float > peak
std::vector< std::vector< float > > vectors() const
std::vector< std::vector< float > > channels
int waveform_samples_per_second
std::map< std::string, std::string > options
openshot::ChannelLayout channel_layout