51 SampleRecorder() =
default;
53 Error setup(int32_t newNumChannels, AudioInputChannel newMode,
bool newKeepingReasons,
54 bool shouldRecordExtraMargins, AudioRecordingFolder newFolderID, int32_t buttonPressLatency,
55 Output* outputRecordingFrom);
56 void setRecordingThreshold();
57 void feedAudio(std::span<StereoSample> input,
bool applyGain =
false, uint8_t gainToApply = 5);
59 void endSyncedRecording(int32_t buttonLatencyForTempolessRecording);
60 bool inputLooksDifferential();
61 bool inputHasNoRightChannel();
62 void removeFromOutput() {
63 if (status < RecorderStatus::FINISHED_CAPTURING_BUT_STILL_WRITING) {
66 outputRecordingFrom =
nullptr;
72 gsl::owner<Sample*> sample;
74 int32_t numSamplesToRunBeforeBeginningCapturing;
75 uint32_t numSamplesBeenRunning;
76 uint32_t numSamplesCaptured;
78 uint32_t numSamplesExtraToCaptureAtEndSyncingWise;
80 int32_t firstUnwrittenClusterIndex = 0;
83 int32_t currentRecordClusterIndex = -1;
87 Cluster* currentRecordCluster =
nullptr;
89 uint32_t audioFileNumber;
90 AudioRecordingFolder folderID;
100 RecorderStatus status = RecorderStatus::CAPTURING_DATA;
101 AudioInputChannel mode;
102 Output* outputRecordingFrom;
106 bool haveAddedSampleToArray =
false;
108 bool allowFileAlterationAfter =
false;
109 bool allowNormalization =
true;
110 bool autoDeleteWhenDone =
false;
111 bool keepingReasonsForFirstClusters;
112 uint8_t recordingNumChannels;
113 bool hadCardError =
false;
114 bool reachedMaxFileSize =
false;
115 bool recordingExtraMargins =
false;
116 bool pointerHeldElsewhere =
false;
117 bool capturedTooMuch =
false;
118 bool thresholdRecording =
false;
121 bool recordingClippedRecently;
124 int32_t recordPeakLMinusR;
127 uint64_t recordSumLPlusR;
128 uint64_t recordSumLMinusR;
133 uint32_t audioDataLengthBytesAsWrittenToFile;
134 uint32_t loopEndSampleAsWrittenToFile;
136 float startValueThreshold;
140 std::optional<FatFS::File> file;
143 void setExtraBytesOnPreviousCluster(
Cluster* currentCluster, int32_t currentClusterIndex);
144 Error writeCluster(int32_t clusterIndex,
size_t numBytes);
145 Error alterFile(MonitoringAction action, int32_t lshiftAmount, uint32_t idealFileSizeBeforeAction,
147 uint64_t dataLengthAfterAction);
148 Error finalizeRecordedFile();
149 Error createNextCluster();
150 Error writeAnyCompletedClusters();
151 void finishCapturing();
152 void updateDataLengthInFirstCluster(
Cluster* cluster);
153 void totalSampleLengthNowKnown(uint32_t totalLength, uint32_t loopEndPointSamples = 0);
155 Error truncateFileDownToSize(uint32_t newFileSize);
156 Error writeOneCompletedCluster();