52 SampleRecorder() =
default;
54 Error setup(int32_t newNumChannels, AudioInputChannel newMode,
bool newKeepingReasons,
55 bool shouldRecordExtraMargins, AudioRecordingFolder newFolderID, int32_t buttonPressLatency,
56 Output* outputRecordingFrom);
57 void setRecordingThreshold();
58 void feedAudio(deluge::dsp::StereoBuffer<q31_t> input,
bool applyGain =
false, uint8_t gainToApply = 5);
60 void endSyncedRecording(int32_t buttonLatencyForTempolessRecording);
61 bool inputLooksDifferential();
62 bool inputHasNoRightChannel();
63 void removeFromOutput() {
64 if (status < RecorderStatus::FINISHED_CAPTURING_BUT_STILL_WRITING) {
67 outputRecordingFrom =
nullptr;
73 gsl::owner<Sample*> sample;
75 int32_t numSamplesToRunBeforeBeginningCapturing;
76 uint32_t numSamplesBeenRunning;
77 uint32_t numSamplesCaptured;
79 uint32_t numSamplesExtraToCaptureAtEndSyncingWise;
81 int32_t firstUnwrittenClusterIndex = 0;
84 int32_t currentRecordClusterIndex = -1;
88 Cluster* currentRecordCluster =
nullptr;
90 uint32_t audioFileNumber;
91 AudioRecordingFolder folderID;
101 RecorderStatus status = RecorderStatus::CAPTURING_DATA;
102 AudioInputChannel mode;
103 Output* outputRecordingFrom;
107 bool haveAddedSampleToArray =
false;
109 bool allowFileAlterationAfter =
false;
110 bool allowNormalization =
true;
111 bool autoDeleteWhenDone =
false;
112 bool keepingReasonsForFirstClusters;
113 uint8_t recordingNumChannels;
114 bool hadCardError =
false;
115 bool reachedMaxFileSize =
false;
116 bool recordingExtraMargins =
false;
117 bool pointerHeldElsewhere =
false;
118 bool capturedTooMuch =
false;
119 bool thresholdRecording =
false;
122 bool recordingClippedRecently;
125 int32_t recordPeakLMinusR;
128 uint64_t recordSumLPlusR;
129 uint64_t recordSumLMinusR;
134 uint32_t audioDataLengthBytesAsWrittenToFile;
135 uint32_t loopEndSampleAsWrittenToFile;
137 float startValueThreshold;
141 std::optional<FatFS::File> file;
144 void setExtraBytesOnPreviousCluster(
Cluster* currentCluster, int32_t currentClusterIndex);
145 Error writeCluster(int32_t clusterIndex,
size_t numBytes);
146 Error alterFile(MonitoringAction action, int32_t lshiftAmount, uint32_t idealFileSizeBeforeAction,
148 uint64_t dataLengthAfterAction);
149 Error finalizeRecordedFile();
150 Error createNextCluster();
151 Error writeAnyCompletedClusters();
152 void finishCapturing();
153 void updateDataLengthInFirstCluster(
Cluster* cluster);
154 void totalSampleLengthNowKnown(uint32_t totalLength, uint32_t loopEndPointSamples = 0);
156 Error truncateFileDownToSize(uint32_t newFileSize);
157 Error writeOneCompletedCluster();