Sovellus äänen- ja puheenkäsittelyyn / kitaran viritykseen.
Flutter/skittapp/          # Flutter-sovellus (UI + äänenkaappaus)
  lib/
    core/
      audio/
        audio_recorder.dart      # PCM16-kehysten kaappaus mikrofonista
      ipc/
        python_bridge.dart       # Abstrakti rajapinta
        python_bridge_http.dart  # HTTP-yhteys (FastAPI)
        python_bridge_stdio.dart # STDIO-yhteys (prosessi)
    features/
      tuner/
        presentation/
          tuner_page.dart        # Päänäkymä
          widgets/               # Mittarit ja visualisoinnit
        application/
          tuner_controller.dart  # ChangeNotifier-pohjainen controller
        domain/                  # Tilat ja presetit
    utils/                       # Apuluokat
    app/                         # App wrapper
    main.dart                    # Entry point
Python/                    # Python-palvelimet (placeholder)
  pitch_service_http.py    # FastAPI HTTP-palvelin
  pitch_service_stdio.py   # STDIO-versio
  requirements.txt         # Python-riippuvuudet
  README.md                # Python-ohjeet
- AudioRecorderService kaappaa mikrofonista PCM16-dataa (48 kHz, mono)
- Puskuroi tasapituisiksi kehyksiksi (esim. 4096 näytettä = ~85 ms)
- TunerController lähettää kehykset PythonBridge:lle
- Python-palvelu analysoi ja palauttaa tuloksen (f0, RMS, jne.)
- UI päivittyy ChangeNotifier-patternilla
- 
PythonBridgeHttp: HTTP REST API (kehitys/testaus) - Käynnistä: python3 Python/pitch_service_http.py
- Endpoint: http://127.0.0.1:8000/process_frame
 
- Käynnistä: 
- 
PythonBridgeStdio: Prosessi-IPC (tuotanto) - Käynnistä: python3 Python/pitch_service_stdio.py
- JSON-rivit stdin/stdout-kommunikaatio
 
- Käynnistä: 
Tällä hetkellä Python-palvelimet palauttavat vain:
- RMS: Äänenvoimakkuustaso
- Muut kentät (f0, note, cents): null/placeholder
cd Flutter/skittapp
flutter pub getcd Python
pip install -r requirements.txt
# HTTP-versio
python3 pitch_service_http.py
# TAI stdio-versio
python3 pitch_service_stdio.pycd Flutter/skittapp
flutter runHuom:
- HTTP-versio edellyttää että pitch_service_http.pyon käynnissä
- Voit vaihtaa stdio-versioon muuttamalla TunerPage:ninitState-metodissa bridge-tyyppiä
- Android: RECORD_AUDIO(AndroidManifest.xml) ✅
- iOS: NSMicrophoneUsageDescription(Info.plist) ✅
- macOS: com.apple.security.device.microphone(entitlements) ✅
- ✅ Audio-puskurointi ja kehysten lähetys
- ✅ Python HTTP/STDIO-sillat placeholder-datalla
- ⬜ Toteuta oikea f0-estimointi (CREPE, YIN, pYIN)
- ⬜ Nuotintunnistus ja cents-laskenta
- ⬜ UI-parannukset ja visualisoinnit
- ⬜ PyInstaller-bundle tuotantoon (stdio)
# Käynnistä palvelin
python3 Python/pitch_service_http.py
# Toisessa terminaalissa: testaa
curl http://127.0.0.1:8000/health
# Käynnistä Flutter-sovellus ja paina "Aloita viritys"
# RMS-arvo päivittyy kun puhut/soitat