55 SampleRecorder() =
default;
57 Error setup(int32_t newNumChannels, AudioInputChannel newMode,
bool newKeepingReasons,
58 bool shouldRecordExtraMargins, AudioRecordingFolder newFolderID, int32_t buttonPressLatency,
61 void feedAudio(std::span<StereoSample> input,
bool applyGain =
false, uint8_t gainToApply = 5);
63 void endSyncedRecording(int32_t buttonLatencyForTempolessRecording);
64 bool inputLooksDifferential();
65 bool inputHasNoRightChannel();
66 void removeFromOutput() {
67 if (status < RecorderStatus::FINISHED_CAPTURING_BUT_STILL_WRITING) {
70 outputRecordingFrom =
nullptr;
76 gsl::owner<Sample*> sample;
78 int32_t numSamplesToRunBeforeBeginningCapturing;
79 uint32_t numSamplesBeenRunning;
80 uint32_t numSamplesCaptured;
82 uint32_t numSamplesExtraToCaptureAtEndSyncingWise;
84 int32_t firstUnwrittenClusterIndex = 0;
87 int32_t currentRecordClusterIndex = -1;
91 Cluster* currentRecordCluster =
nullptr;
93 uint32_t audioFileNumber;
94 AudioRecordingFolder folderID;
104 RecorderStatus status = RecorderStatus::CAPTURING_DATA;
105 AudioInputChannel mode;
106 Output* outputRecordingFrom;
110 bool haveAddedSampleToArray =
false;
112 bool allowFileAlterationAfter =
false;
113 bool allowNormalization =
true;
114 bool autoDeleteWhenDone =
false;
115 bool keepingReasonsForFirstClusters;
116 uint8_t recordingNumChannels;
117 bool hadCardError =
false;
118 bool reachedMaxFileSize =
false;
119 bool recordingExtraMargins =
false;
120 bool pointerHeldElsewhere =
false;
121 bool capturedTooMuch =
false;
122 bool thresholdRecording =
false;
123 uint32_t minThresholdMargin = 0;
126 bool recordingClippedRecently;
129 int32_t recordPeakLMinusR;
132 uint64_t recordSumLPlusR;
133 uint64_t recordSumLMinusR;
138 uint32_t audioDataLengthBytesAsWrittenToFile;
139 uint32_t loopEndSampleAsWrittenToFile;
141 float startValueThreshold;
145 std::optional<FatFS::File> file;
148 void setExtraBytesOnPreviousCluster(
Cluster* currentCluster, int32_t currentClusterIndex);
149 Error writeCluster(int32_t clusterIndex,
size_t numBytes);
150 Error alterFile(MonitoringAction action, int32_t lshiftAmount, uint32_t idealFileSizeBeforeAction,
152 uint64_t dataLengthAfterAction);
153 Error finalizeRecordedFile();
154 Error createNextCluster();
155 Error writeAnyCompletedClusters();
156 void finishCapturing();
157 void updateDataLengthInFirstCluster(
Cluster* cluster);
158 void totalSampleLengthNowKnown(uint32_t totalLength, uint32_t loopEndPointSamples = 0);
160 Error truncateFileDownToSize(uint32_t newFileSize);
161 Error writeOneCompletedCluster();