|
|
#define MY_BIG_VAL 1000000 #define PI 3.14159265358979323846 #define ONE_OVER_TWO_PI .15915494309189533576 #define TWO_PI 6.28318530717958647692 //#define CROSSING 1 //#define NO_CROSSING 0 //#define YES 1 #define NO 0 #define HMM_ADDITIVE 0 #define HMM_FORMANT 1 //#define HMM_ADDITIVE_AMOR 2 extern int DEBUG; /** * Structure de tableau avec taille. * * @short Tableau dimensionné */ struct tab { /** * Tableau de données */ int* id; /** * Taille du tableau */ int nb; }; /** * Liste des index des partiels récemment décédés (Carnet mondain section décès) * * @short Liste des index des partiels récemment décédés */ class tab_time { public: /** * Tableau d'index des partiels */ int* label; /** * Nombre de trames écoulées depuis la mort de chaque partiel référence par @ref tab_time::label */ int* time; /** * Nombre de partiels référencés dans les tableaux @ref tab_time::label et @ref tab_time::time */ int nb; /** * Période de deuil durant laquelle la réutilisation de l'index du défunt est interdite */ int LatTime; /** * Ajoute un nouvel index dans la liste des morts */ void add(int new_label, int new_time) { label[nb] = new_label; time[nb] = new_time; nb++; } /** * Reserve la mémoire adequate pour les tableaux utilisés en interne * * @param maxNbOutput nombre maximal de morts dans la liste */ void initArrays(int maxNbOutput) { label = new int[maxNbOutput]; time = new int[maxNbOutput]; } /** * Constructeur */ tab_time() { nb = 0; LatTime = 10; } /** * Désalloue la mémoire réservée */ ~tab_time() { if (label) delete label; if (time) delete time; } /** * Retire un mort de la liste * * @param index index dans la liste du partiel mort à retirer */ void remove(int index) { nb--; label[index] = label[nb] ; time[index] = time[nb] ; } /** * Augmente d'une unité le delai de deuil d'un partiel mort * * @param index index dans la liste du partiel mort considéré */ void increase_time(int index) { time[index] += 1 ; } /** * Teste si un mort est mort depuis suffisamment longtemps pour le rayer de la liste * * @param index index dans la liste du partiel mort testé */ int too_old(int index) { return (time[index] > LatTime); } }; /** * Tableau de partiels * */ class partials { public: /** * Indices des partiels vivants */ int* Alive; /** * Indices des nouveaux partiels */ int* NewAlive; /** * Indices des partiels morts */ int* Dead; /** * Indices des partiels nouveaux-nés */ int* Born; /** * Nombre de partiels vivants */ int nbAlive; /** * Nombre de nouveaux partiels */ int nbNewAlive; /** * Nombre de partiels morts */ int nbDead; /** * Nombre de partiels nouveaux-nés */ int nbBorn; /** * Constructeur vide */ partials() { } /** * Destructeur. Libère la mémoire allouée dans la fonction @ref partials::initArrays */ ~partials() { if (Alive) delete Alive; if (NewAlive) delete NewAlive; if (Born) delete Born; if (Dead) delete Dead; } /** * Alloue la mémoire nécessaire * @param maxNbOutput nombre maximal de partiels simultanés */ void initArrays(int maxNbOutput) { Alive = new int[maxNbOutput]; NewAlive = new int[maxNbOutput]; Born = new int[maxNbOutput]; Dead = new int[maxNbOutput]; nbAlive = 0; nbDead = 0; nbBorn = maxNbOutput; for(int i=0 ; i < maxNbOutput ; i++ ) Born[i] = maxNbOutput - i - 1 ; } }; /** * Paramètres du programme. Structure destinée à recevoir les variances, paramètres additifs * ainsi que les gains pour le calcul des scores */ struct param { /** * Paramètre relié à la fréquence */ float freq; /** * Paramètre relié à l'amplitude */ float ampl; /** * Paramètre relié à la phase */ float ph; /** * Paramètres relié au lissage des partiels (cf @ref lines::viterbi_formant) */ float obs; };
Generated by: chose@josquin on Wed Nov 10 20:55:59 199. |