# Hagerman & Olofsson 4 phases - RSB en sortie d'aide auditive (R / Shiny)
===============================================================================

Portage R du projet MATLAB HO_4phases_MATLAB (moteur stabilise + app). Du
pattern .wav brut jusqu'au RSB en sortie d'aide auditive, par la methode de
Hagerman & Olofsson a 4 phases. Interface web Shiny equivalente a l'app MATLAB.

# Principe
-------------------------------------------------------------------------------
- Pattern .wav STEREO :
    * piste 1 / left  = micro de reference   -> RSB d'ENTREE
    * piste 2 / right = sortie aide auditive  -> RSB de SORTIE
- Pour chaque RSB (+10, +5, 0, -5, -10 dB), 4 sequences SpN, SmN, mSpN, mSmN.
- Clap de depart pour le decoupage ; calibration stereo a 94 dB SPL.
- Extraction (par RSB, par piste) :
    Speech = (SpN + SmN - mSpN - mSmN) / 4
    Noise  = (SpN - SmN + mSpN - mSmN) / 4
    Error  = (SpN + SmN + mSpN + mSmN) / 4   (selection begin/end)
    RSB    = 20*log10(rms(Speech)) - 20*log10(rms(Noise))
- Alignement double (debut+fin) sur SpN ; fenetre de mesure t1/t2 (retire le
  lead-in de tete). Tout est fidele au moteur MATLAB (memes formules, memes
  reglages dans ho_params()).

# Fichiers
-------------------------------------------------------------------------------
  ho_core_v2.R   moteur (portage 1:1 des ho_*.m MATLAB)
  ho_plots_v2.R  graphiques ggplot2 (alignes sur l'app MATLAB)
  app.R          interface Shiny (bslib)

# Lancement
-------------------------------------------------------------------------------
Dans R/RStudio :
    setwd(".../HO_4phases_R_v2")
    shiny::runApp("app.R")
ou ouvrir app.R dans RStudio et cliquer "Run App".

Etapes dans l'interface :
  1. Fichiers : calibration (.wav 94 dB SPL), enregistrement 1 (algos off),
     et eventuellement enregistrement 2 (algos max).
  2. Calibration : niveau de reference (94 dB SPL par defaut).
  3. Aide auditive : marque/modele, labels, type signal/bruit, angles.
  4. Analyse : methode d'alignement (Enveloppe par defaut), puis "Lancer".
Une barre d'avancement suit le decoupage et l'alignement.

# Onglets de resultats (identiques a l'app MATLAB)
-------------------------------------------------------------------------------
- RSB de sortie : points aux valeurs REELLES (RSB(in) reel mesure piste 1 en
  abscisse, RSB(out) reel piste 2 en ordonnee), axe gradue -15..+15 dB,
  ligne y=x ; mesure 2 en surimpression de la mesure 1.
- Gains : deux graphiques cote a cote, gain du SIGNAL (gauche) et du BRUIT
  (droite), une courbe par RSB (-10 -> +10) avec degrade rouge->bleu, echelle
  log 125 Hz - 8000 Hz. Trace pour la mesure aidee (m2 si presente, sinon m1).
- EDI : distorsion d'enveloppe signal et bruit, par RSB, echelle 0 a 1.
- Enveloppes : deux graphiques, sortie aide auditive (gauche) et micro de
  reference (droite) ; Signal+Bruit en pointilles gris, signal extrait en
  rouge, bruit extrait en bleu (dB SPL), pour un RSB et un intervalle choisis.

# Methode d'alignement
-------------------------------------------------------------------------------
Comme dans l'original, deux methodes sont disponibles :
  - "Enveloppe de Hilbert" (defaut) : robuste, recommande ;
  - "Structure fine" : cross-correlation du signal brut ; peut desaligner sur
    des signaux deja synchrones (S+N et S-N s'annulent a 0 dB) ;
  - "Aucun" : pas de recalage.

# Sorties (dossier results_HO/ a cote de l'enregistrement 1)
-------------------------------------------------------------------------------
- m1_off/ , m2_on/ : CSV des RSB et .wav speech/noise extraits (entree in_,
  sortie out_).

# Dependances
-------------------------------------------------------------------------------
shiny, bslib, ggplot2, patchwork, tuneR, seewave, signal
(installes automatiquement au premier lancement si absents).

# Lien avec le MATLAB
-------------------------------------------------------------------------------
Ce panel reproduit exactement le moteur et les graphiques de
HO_4phases_MATLAB/. Toute evolution validee en MATLAB (ex: reglage win_t1/t2)
doit etre reportee dans ho_params() de ho_core_v2.R.
