@@ -46,6 +46,7 @@ class RecordStream:
4646 # Default recording parameters
4747 DEFAULT_SAMPLE_RATE = 16000 # 16kHz - good for voice
4848 DEFAULT_MAX_DURATION_MS = 60000 # 60 seconds max
49+ DEFAULT_FILESIZE = 1024 * 1024 * 1024 # 1GB data size because it can't be quickly set after recording
4950
5051 def __init__ (self , file_path , duration_ms , sample_rate , i2s_pins , on_complete ):
5152 """
@@ -128,7 +129,7 @@ def _create_wav_header(sample_rate, num_channels, bits_per_sample, data_size):
128129 return bytes (header )
129130
130131 @staticmethod
131- def _update_wav_header (f , data_size ):
132+ def _update_wav_header (file_path , data_size ):
132133 """
133134 Update WAV header with final data size.
134135
@@ -138,6 +139,8 @@ def _update_wav_header(f, data_size):
138139 """
139140 file_size = data_size + 36
140141
142+ f = open (file_path , 'r+b' )
143+
141144 # Update file size at offset 4
142145 f .seek (4 )
143146 f .write (file_size .to_bytes (4 , 'little' ))
@@ -146,6 +149,9 @@ def _update_wav_header(f, data_size):
146149 f .seek (40 )
147150 f .write (data_size .to_bytes (4 , 'little' ))
148151
152+ f .close ()
153+
154+
149155 # ----------------------------------------------------------------------
150156 # Desktop simulation - generate 440Hz sine wave
151157 # ----------------------------------------------------------------------
@@ -214,7 +220,7 @@ def record(self):
214220 self .sample_rate ,
215221 num_channels = 1 ,
216222 bits_per_sample = 16 ,
217- data_size = 0
223+ data_size = self . DEFAULT_FILESIZE
218224 )
219225 f .write (header )
220226 print (f"RecordStream: Header written ({ len (header )} bytes)" )
@@ -319,23 +325,8 @@ def record(self):
319325 f .close ()
320326 print (f"RecordStream: File closed in { time .ticks_diff (time .ticks_ms (), t0 )} ms" )
321327
322- # Now reopen to update header
323- # This avoids the massive delay caused by seeking backwards in a large file
324- # on ESP32 with SD card (FAT filesystem buffering issue)
325- print (f"RecordStream: Reopening file to update WAV header..." )
326- t0 = time .ticks_ms ()
327- f = open (self .file_path , 'r+b' )
328- print (f"RecordStream: File reopened in { time .ticks_diff (time .ticks_ms (), t0 )} ms" )
329-
330- print (f"RecordStream: Updating WAV header with data_size={ self ._bytes_recorded } " )
331- t0 = time .ticks_ms ()
332- self ._update_wav_header (f , self ._bytes_recorded )
333- print (f"RecordStream: Header updated in { time .ticks_diff (time .ticks_ms (), t0 )} ms" )
334-
335- print (f"RecordStream: Closing header file..." )
336- t0 = time .ticks_ms ()
337- f .close ()
338- print (f"RecordStream: Header file closed in { time .ticks_diff (time .ticks_ms (), t0 )} ms" )
328+ # Disabled because seeking takes too long on LittleFS2:
329+ #self._update_wav_header(self.file_path, self._bytes_recorded)
339330
340331 elapsed_ms = time .ticks_diff (time .ticks_ms (), start_time )
341332 print (f"RecordStream: Finished recording { self ._bytes_recorded } bytes ({ elapsed_ms } ms)" )
0 commit comments