Daniel Harvey dd96caa709 Fix Critical: streaming race, dirty buffer, dropped tail, fragmented header
- SeekBeyondBuffer and LoadTrackStreaming assign _activeStreamingTask before
  awaiting; DrainActiveStreamingTaskAsync awaits previous task before new
  stream starts, closing the concurrent-seek race on the JS StreamDecoder
- Always slice ArrayPool buffer to currentBytes before sending to JS interop;
  eliminates stale bytes from prior rentals reaching the audio decoder
- getSampleAlignedChunkSize accepts streamComplete flag; bypasses minimum
  chunk guard on final tail so trailing bytes are decoded, not dropped
- StreamDecoder accumulates headerSearchChunks until parseHeader succeeds,
  with 256 KB MAX_HEADER_SEARCH_BYTES bound; handles fragmented first chunks
  and extended WAV headers with LIST/INFO/JUNK chunks
- markStreamComplete early-returns when streamComplete already set to prevent
  double-drain and incorrect streamingCompleted flag after partial failure
- processedBytes advances only after successful decode; failed segments leave
  cursor in place rather than permanently skipping audio
- AudioInteropService.MarkStreamCompleteAsync wires C# loop exit to JS decoder
  ensuring tail drain fires even when Content-Length header is absent
2026-05-17 11:28:53 -04:00
2025-09-04 19:58:46 -04:00
2026-05-17 09:07:23 -04:00
2025-09-15 17:03:36 -04:00
2026-05-16 19:33:23 -04:00
2026-05-16 19:33:23 -04:00
2025-12-09 16:46:07 -05:00
2025-09-08 09:46:56 -04:00
2025-09-08 09:46:56 -04:00
S
Description
No description provided
19 MiB
2026-06-27 02:55:40 +00:00
Languages
C# 60.5%
TypeScript 17.6%
HTML 14.5%
CSS 5.4%
Shell 1.8%
Other 0.2%