Critical bugs found in code analysis
Bug 1 — SegmentSlicer: hardcoded MP3 format (ignores user selection)
File: app/src/main/java/com/example/vocalremover/data/SegmentSlicer.kt
Segment output filenames are hardcoded to .mp3 regardless of user-selected format in ProcessingConfig.
Fix: Use config.format.extension instead of hardcoded "mp3".
Bug 2 — WaveformCanvas: wrong segment time-to-X calculation
File: app/src/main/java/com/example/vocalremover/ui/components/WaveformCanvas.kt
The formula (segment.start / (duration / 1000f)) * size.width is incorrect — segments are in seconds, duration in milliseconds.
Fix: Use (segment.start * 1000f / duration) * size.width
Bug 3 — ResultsScreen: segments never passed from MainViewModel
File: app/src/main/java/com/example/vocalremover/ui/screens/ResultsScreen.kt
segments: List<Segment> = emptyList() — always empty, waveform never shows vocal regions.
Fix: Pass segments from ViewModel state through Screen.Results and into ResultsScreen.
Bug 4 — MediaExtractorWaveformGenerator: incorrect signed PCM parsing
File: app/src/main/java/com/example/vocalremover/data/waveform/MediaExtractorWaveformGenerator.kt
Manual bit manipulation for 16-bit PCM is error-prone. Use ByteBuffer.getShort() instead.
Acceptance Criteria
Critical bugs found in code analysis
Bug 1 — SegmentSlicer: hardcoded MP3 format (ignores user selection)
File:
app/src/main/java/com/example/vocalremover/data/SegmentSlicer.ktSegment output filenames are hardcoded to
.mp3regardless of user-selected format inProcessingConfig.Fix: Use
config.format.extensioninstead of hardcoded"mp3".Bug 2 — WaveformCanvas: wrong segment time-to-X calculation
File:
app/src/main/java/com/example/vocalremover/ui/components/WaveformCanvas.ktThe formula
(segment.start / (duration / 1000f)) * size.widthis incorrect — segments are in seconds, duration in milliseconds.Fix: Use
(segment.start * 1000f / duration) * size.widthBug 3 — ResultsScreen: segments never passed from MainViewModel
File:
app/src/main/java/com/example/vocalremover/ui/screens/ResultsScreen.ktsegments: List<Segment> = emptyList()— always empty, waveform never shows vocal regions.Fix: Pass
segmentsfrom ViewModel state throughScreen.Resultsand intoResultsScreen.Bug 4 — MediaExtractorWaveformGenerator: incorrect signed PCM parsing
File:
app/src/main/java/com/example/vocalremover/data/waveform/MediaExtractorWaveformGenerator.ktManual bit manipulation for 16-bit PCM is error-prone. Use
ByteBuffer.getShort()instead.Acceptance Criteria