Krotos Modules 3
Loading...
Searching...
No Matches
KwidgetProcessor_Recorder.h
Go to the documentation of this file.
1#pragma once
2namespace krotos
3{
4 //==============================================================================
17 class KwidgetProcessor_Recorder : public KwidgetProcessor, public Thread
18 {
19 public:
21
24
25 void prepare(double sampleRate, int samplesPerBlock) override;
26
27 void process(AudioBuffer<float>& buffer) override;
28
29 void noteOn(int midiNoteNumber, float velocity, int) override;
30 void noteOff(float velocity) override;
31
33 void stopRecording();
34
35 private:
41 bool bufferIsSilent(AudioSampleBuffer& inputBuffer);
42
44 void stop();
45
46 void startRecording();
47
49 void resetWriter();
50
51 void run() override;
52
56 void updateReleaseTime();
57
58 // These are Volatile Atomic because they signalling between the message and audio threads
59 volatile std::atomic<bool> m_recording{false}; // Keeps track of whether we are recoding or not
60 volatile std::atomic<bool> m_stopRecordingRequest{
61 false}; // Set true requests the recording to be brought to a halt after the m_postRollInSeconds delay
62 volatile std::atomic<int> m_inactiveFramesBeforeStop{0}; // Set to a calculated value in the prepare() mathod
63 int m_lastSamplesPerBlock{0}; // Track blocksize between process calls
64 int m_postRollSamples{0}; // Number of samples for roll off (sr*postRollSeconds)
65 int m_tailFramesCounter{0}; // Counts how many frames we continue recording after MIDI activity ends
66 bool m_recordingPending{false}; // flag for recording on state recall
67
70
71 double m_sampleRate{0.0};
72
73 // multi threading it
74 TimeSliceThread m_backgroundThread{getOwner().getKwidgetID() + "thread"};
75 std::unique_ptr<AudioFormatWriter::ThreadedWriter> m_threadedWriter;
76 CriticalSection m_writerLock;
77 std::atomic<AudioFormatWriter::ThreadedWriter*> m_activeWriter{nullptr};
78
79 const int NUM_BUFFER_SAMPLES{32768};
80 const int NUM_BUFFER_CHANNELS{2};
81
84
85 const float minus_infinity_dB = -100.0f;
86
88
89 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KwidgetProcessor_Recorder)
90 };
91} // namespace krotos
Definition Kwidget_Recorder.h:4
Definition Kwidget.h:8
const String & getKwidgetID() const
Definition Kwidget.cpp:367
The processing power of the KwidgetRecorder that performs the recording of the plugins output and wri...
Definition KwidgetProcessor_Recorder.h:18
std::atomic< AudioFormatWriter::ThreadedWriter * > m_activeWriter
Definition KwidgetProcessor_Recorder.h:77
int m_postRollSamples
Definition KwidgetProcessor_Recorder.h:64
volatile std::atomic< int > m_inactiveFramesBeforeStop
Definition KwidgetProcessor_Recorder.h:62
void updateReleaseTime()
Update the cached release time from the internal settings file.
Definition KwidgetProcessor_Recorder.cpp:243
void process(AudioBuffer< float > &buffer) override
Definition KwidgetProcessor_Recorder.cpp:145
int m_tailFramesCounter
Definition KwidgetProcessor_Recorder.h:65
Kwidget_Recorder * m_kwidgetRecorder
Definition KwidgetProcessor_Recorder.h:87
void noteOn(int midiNoteNumber, float velocity, int) override
Definition KwidgetProcessor_Recorder.cpp:197
std::unique_ptr< AudioFormatWriter::ThreadedWriter > m_threadedWriter
Definition KwidgetProcessor_Recorder.h:75
void startRecording()
Definition KwidgetProcessor_Recorder.cpp:52
void run() override
Definition KwidgetProcessor_Recorder.cpp:238
volatile std::atomic< bool > m_recording
Definition KwidgetProcessor_Recorder.h:59
bool bufferIsSilent(AudioSampleBuffer &inputBuffer)
Definition KwidgetProcessor_Recorder.cpp:101
CriticalSection m_writerLock
Definition KwidgetProcessor_Recorder.h:76
const int NUM_BUFFER_CHANNELS
Definition KwidgetProcessor_Recorder.h:80
Uuid m_uniqueId
Definition KwidgetProcessor_Recorder.h:82
void noteOff(float velocity) override
Definition KwidgetProcessor_Recorder.cpp:218
void prepare(double sampleRate, int samplesPerBlock) override
Definition KwidgetProcessor_Recorder.cpp:29
const int NUM_BUFFER_SAMPLES
Definition KwidgetProcessor_Recorder.h:79
File m_writingFile
Definition KwidgetProcessor_Recorder.h:68
double m_sampleRate
Definition KwidgetProcessor_Recorder.h:71
KwidgetProcessor_Recorder(Kwidget &owner)
Definition KwidgetProcessor_Recorder.cpp:4
bool m_recordingPending
Definition KwidgetProcessor_Recorder.h:66
TimeSliceThread m_backgroundThread
Definition KwidgetProcessor_Recorder.h:74
volatile std::atomic< bool > m_stopRecordingRequest
Definition KwidgetProcessor_Recorder.h:60
~KwidgetProcessor_Recorder()
Definition KwidgetProcessor_Recorder.cpp:17
File m_tempDir
Definition KwidgetProcessor_Recorder.h:83
int m_lastSamplesPerBlock
Definition KwidgetProcessor_Recorder.h:63
const float minus_infinity_dB
Definition KwidgetProcessor_Recorder.h:85
void resetWriter()
Definition KwidgetProcessor_Recorder.cpp:227
void stop()
Definition KwidgetProcessor_Recorder.cpp:113
String m_latestFileName
Definition KwidgetProcessor_Recorder.h:69
void stopRecording()
Definition KwidgetProcessor_Recorder.cpp:139
An interface for an audio processor designed for modular use.
Definition KwidgetProcessor.h:8
Kwidget & getOwner() const
Definition KwidgetProcessor.h:164
Definition AirAbsorptionFilter.cpp:2
Definition Kwidget_Recorder.h:20