Remove music button and MP3 decode, keep live capture only

- Remove Music button, OnMusic/RunMusicAsync/StopMusic and all music fields
- MusicAnalyzer: remove Analyze, DecodeToMono, MusicPattern record;
  keep ExtractFeatures/MapPitchToPeriod/BuildWaveFrame/TickFeature (used by LiveCapture)
- Remove unused NAudio.Wave and System.Diagnostics imports from MainForm
- Fix LiveCapture overlap: sliding window with 50% overlap (was dropping every other frame)
- Buttons resized to 80px (Test/Live/Pattern/Stop All)
This commit is contained in:
2026-08-08 19:52:56 +00:00
parent bbd9bb6d6b
commit e43b1f30cd
3 changed files with 27 additions and 235 deletions
+17 -3
View File
@@ -91,6 +91,7 @@ public class LiveCapture : IDisposable
var window = new FftSharp.Windows.Hanning();
var buffer = new double[MusicAnalyzer.WindowSize];
var tf = new MusicAnalyzer.TickFeature();
double[]? overlap = null; // last HopSize samples from previous window
while (_running)
{
@@ -98,10 +99,23 @@ public class LiveCapture : IDisposable
lock (_bufferLock)
{
if (_sampleBuffer.Count >= MusicAnalyzer.WindowSize)
int needed = overlap != null ? MusicAnalyzer.HopSize : MusicAnalyzer.WindowSize;
if (_sampleBuffer.Count >= needed)
{
for (int i = 0; i < MusicAnalyzer.WindowSize; i++)
buffer[i] = _sampleBuffer.Dequeue();
if (overlap != null)
{
Array.Copy(overlap, 0, buffer, 0, MusicAnalyzer.HopSize);
for (int i = 0; i < MusicAnalyzer.HopSize; i++)
buffer[MusicAnalyzer.HopSize + i] = _sampleBuffer.Dequeue();
}
else
{
for (int i = 0; i < MusicAnalyzer.WindowSize; i++)
buffer[i] = _sampleBuffer.Dequeue();
}
// Save last HopSize samples for next window's overlap
overlap = new double[MusicAnalyzer.HopSize];
Array.Copy(buffer, MusicAnalyzer.HopSize, overlap, 0, MusicAnalyzer.HopSize);
windowData = buffer;
}
}