#ifndef PARAM_H
#define PARAM_H
class Param;
#include "LabelText.h"
#include "Analysis.h"
/**
* Fenêtre de dialogue de réglage des paramètres: permet de definir tous les
* paramètres utilisés lors de l'analyse. Ces paramètres peuvent être chargés
* et sauvegardés au moyen des boutons appropriés. Ils sont décrits plus en details ci-dessous.
*
* @short Dialogue de réglage des paramètres
* @author Ph.Chose
* @version 10/99
*/
class Param
{
/**
* Type de boîte de sélection de fichier demandée
*/
enum FileSelectionType { LOAD, SAVE };
public:
/**
* Taille de la FFT
*/
int fft_size;
/**
* Taille de la fenêtre d'analyse
*/
int window_size;
/**
* Nombre maximal de partiels
*/
int max_partials_number;
/**
* Pas d'analyse
*/
int hop_size;
/**
* Repère temporel de début d'analyse
*/
float starting_time;
/**
* Repère tempore de fin d'analyse
*/
float ending_time;
/**
* Taille minimale d'un partiel
*/
int minPartialLength;
/**
* Variance en fréquence
*/
float freqVariance;
/**
* Variance en amplitude
*/
float amplVariance;
/**
* Variance en phase
*/
float phaseVariance;
/**
* Seuil absolu de fréquence
*/
float freqAbsThreshold;
/**
* Seuil relatif de fréquence
*/
float freqRelThreshold;
/**
* Paramètre additif fréquentiel
*/
float freqAdditive;
/**
* Paramètre additif d'amplitude
*/
float amplAdditive;
/**
* Paramètre additif de phase
*/
float phaseAdditive;
/**
* Gain de partie fréquentielle du score
*/
float freqGain;
/**
* Gain de la partie amplitude du score
*/
float amplGain;
/**
* Gain de la partie phase du score
*/
float phaseGain;
/**
* Drapeau de détection avancée de fréquences (partial++)
*/
int enhanced;
/**
* Drapeau de mise a jour temps-réel
*/
int updateRT;
/**
* Drapeau pour demander le calcul de la FFT
*/
int fftStep;
/**
* Drapeau pour demander la détection des pics
*/
int peaksStep;
/**
* Drapeau pour demander la détection des trajets de pics
*/
int partialsStep;
/**
* Fréquence minimale explorée
*/
float freqMin;
/**
* Fréquence maximale explorée
*/
float freqMax;
/**
* Fréquence d'échantillonage
* Ne sert que pour calculer les tailles de la fenêtre d'analyse et du pas d'analyse en secondes
*/
int samplingFrequency;
/**
* Drapeau pour bloquer le zoom au cours d'une analyse
*/
int freezeLimits;
/**
* Pointeur sur un objet Analysis
*/
Analysis* theAnalysis;
private:
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::fft_size
*/
LabelText* tfft;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::window_size
*/
LabelText* twindow;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::max_partials_number
*/
LabelText* tpartials;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::hop_size
*/
LabelText* thop;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::starting_time
*/
LabelText* tstart;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::ending_time
*/
LabelText* tend;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqVariance
*/
LabelText* tfreqV;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::amplVariance
*/
LabelText* tamplV;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::phaseVariance
*/
LabelText* tphaseV;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::minPartialLength
*/
LabelText* tminPartial;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqAbsThreshold
*/
LabelText* tfreqAbsThreshold;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqRelThreshold
*/
LabelText* tfreqRelThreshold;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqAdditive
*/
LabelText* tfreqA;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::amplAdditive
*/
LabelText* tamplA;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::phaseAdditive
*/
LabelText* tphaseA;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqGain
*/
LabelText* tfreqG;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::amplGain
*/
LabelText* tamplG;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::phaseGain
*/
LabelText* tphaseG;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqMin
*/
LabelText* tfreqMin;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::freqMax
*/
LabelText* tfreqMax;
/**
* Widget regroupant Label Text et Slider
* Variable contrôlée: @ref Param::samplingFrequency
*/
LabelText* tsamplingFrequency;
/**
* Bouton OK. Accepte les changements et referme le dialogue
*/
Widget buttonOk;
/**
* Bouton Cancel. Ferme le dialogue.
*/
Widget buttonCancel;
/**
* Bouton Load Parameters. Charge les paramètres à partir d'un fichier au format .param
*/
Widget buttonLoad;
/**
* Bouton Save Parameters. Sauve les paramètres dans un fichier au format .param
*/
Widget buttonSave;
/**
* Bouton Stop Analysis. Stoppe l'analyse en cours.
*/
Widget buttonStop;
/**
* Le dialogue lui-même.
*/
Widget dialog;
/**
* Check box pour la détection avancée de pics
*/
Widget checkEnhanced;
/**
* Check box pour la mise à jour de l'affichage grahique à chaque modification de paramètre
*/
Widget checkUpdate;
/**
* Check box pour valider le calcul de la FFT
*/
Widget checkFftStep;
/**
* Check box pour valider la détection de pics
*/
Widget checkPeaksStep;
/**
* Check box pour valider la détection des partiels
*/
Widget checkPartialsStep;
/**
* Check box pour permuter entre secondes et échantillon (unités des paramètres taille de fenêtre d'analyse
* et pas d'analyse.
*/
Widget checkSamsSecs;
/**
* Check box pour figer les limites de l'affichage graphique
*/
Widget checkFreezeLimits;
/**
* SAVE ou LOAD -> Choix pour la lecture ou l'écriture des paramètres
*/
FileSelectionType buttonClicked;
public:
/**
* Affiche le dialogue
*/
void display();
/**
* Constructeur.
* Initialise les paramètres à leurs valeurs par défaut et construit le dialogue
*
* @param parent widget père de la fenêtre de dialogue
*/
Param(Widget parent);
/**
* Destructeur.
* Libère la mémoire
*/
~Param();
/**
* Charge les paramètres à partir d'un fichier au format .param
*
* @param inFile nom du fichier de paramètre à charger
*/
void loadParameters(char inFile[]);
/**
* Sauve les paramètres dans un fichier au format .param
*
* @param outFile nom du fichier de sauvegarde
*/
void saveParameters(char outFile[]);
/**
* Récupère les paramètres des différentes widgets vers les variables de l'objet.
* Exemple: stocke dans @ref Param::fft_size la valeur stockée dans le widget @ref Param::tfft
*/
void getParameters();
/**
* Positionne les différents widgets en fonction des paramètres de la classe.
* Exemple: positionne le widget @ref Param::tfft à la valeur @ref Param::fft_size
*/
void setParameters();
/**
* Fonction callback du bouton Load (@ref Param::buttonLoad). Déclenche l'ouverture d'une boîte de dialogue
* afin de saisir le nom du fichier à ouvrir. Cette fonction est publique car elle
* est appelée par la classe @ref Menu lors du choix Options/Charger Paramètres.
*
* @param w widget père pour l'affichage de la FileSelectionBox
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
*/
static void loadButton(Widget w, XtPointer clientData, XtPointer);
/**
* Fonction callback du bouton Save (@ref Param::buttonSave). Déclenche l'ouverture d'une boîte de dialogue
* afin de saisir le nom du fichier de sauvegarde. Cette fonction est publique car elle
* est appelée par la classe @ref Menu lors du choix Options/Sauver Paramètres.
*
* @param w widget père pour l'affichage de la FileSelectionBox
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
*/
static void saveButton(Widget w, XtPointer clientData, XtPointer);
private:
/**
* Fonction callback du bouton Ok (@ref Param::buttonOk). Récupère les paramètres et ferme la boîte de dialogue.
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
*/
static void okButton(Widget,XtPointer clientData,XtPointer);
/**
* Fonction callback du bouton Cancel (@ref Param::buttonCancel). Ferme la boîte de dialogue.
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
*/
static void cancelButton(Widget,XtPointer clientData,XtPointer);
/**
* Fonction callback du bouton Stop Analysis (@ref Param::buttonStop). Stoppe l'analyse en cours.
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
*/
static void stopButton(Widget,XtPointer clientData,XtPointer);
/**
* Fonction callback du bouton Ok de la boîte de sélection des fichiers.
* @param w widget père
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
* @param selection pointeur sur la sélection de fichier (cf MOTIF)
*/
static void selectOk(Widget w, XtPointer clientData, XmFileSelectionBoxCallbackStruct* selection);
/**
* Fonction callback du bouton Cancel de la boîte de sélection des fichiers.
* @param w widget père
*/
static void selectCancel(Widget w,XtPointer,XtPointer);
/**
* Fonction callback de la check box permettant de permuter entre secondes et échantillon
* pour l'addichage de la taille de la fenêtre d'analyse et du pas d'analyse.
* @param clientData pointeur sur l'instance de la classe (callback MOTIF en C++)
*/
static void samsSecsCheck(Widget, XtPointer clientData, XtPointer);
};
#endif
| Generated by: chose@josquin on Wed Nov 10 20:57:01 199. |