Pitch2Ola.c 3.29 KB
/*
    --------------------------------------------------------
    LIA_PHON : Un systeme complet de phonetisation de textes
    --------------------------------------------------------

    Copyright (C) 2001 FREDERIC BECHET

    ..................................................................

    This file is part of LIA_PHON

    LIA_PHON is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    ..................................................................

    For any publication related to scientific work using LIA_PHON,
    the following reference paper must be mentioned in the bibliography: 
        
    Bechet F., 2001, "LIA_PHON - Un systeme complet de phonetisation
    de textes", revue Traitement Automatique des Langues (T.A.L.)
    volume 42, numero 1/2001, edition Hermes
    ..................................................................
                              
    Contact :
              FREDERIC BECHET - LIA - UNIVERSITE D'AVIGNON
              AGROPARC BP1228 84911  AVIGNON  CEDEX 09  FRANCE
              frederic.bechet@lia.univ-avignon.fr
    ..................................................................
*/
/*  Extrait les parametres ola d'un fichier pitch avec le fichier phon  */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int TraitePhoneme(ch,file,debut,last)
 char *ch;
 FILE *file;
 int debut,*last;
{
int n,duree,limite,courant,pitch,p,nb;
char ch2[200];

printf("%s ",ch);

for(n=0;(ch[n])&&(ch[n]!=' ');n++);
if (ch[n]!=' ') { fprintf(stderr,"Bad Format\n"); exit(0); }

sscanf(ch+n+1,"%d",&duree);
for(nb=0,limite=debut+duree,courant=debut;courant<limite;courant+=10)
 if (fgets(ch2,200,file))
  {
  sscanf(ch2,"%d",&pitch);
  if ((nb<=12)&&(abs(pitch-(*last))>10)&&(*ch!='_'))
   {
   *last=pitch;
   nb++;
   p=(int)(((courant-debut)*100)/duree);
   if (p==0) p=2;
   printf("%d %d ",p,pitch);
   }
  }
printf("\n");
return limite;
}


int main(argc,argv)
 int argc;
 char **argv;
{
char ch[200];
FILE *file1,*file2;
int debut,pitch,n;
if (argc<=2)
 {
 fprintf(stderr,"Syntaxe : Pitch2Ola <fich ola> <fich pitch>\n");
 exit(0);
 }
if(!(file1=fopen(argv[1],"rt"))) { fprintf(stderr,"Can't open %d\n",argv[1]); exit(0); }
if(!(file2=fopen(argv[2],"rt"))) { fprintf(stderr,"Can't open %d\n",argv[2]); exit(0); }
/*  On Mange le titre du fichier pitch  */
fgets(ch,200,file2);
for(debut=pitch=0;fgets(ch,200,file1);)
 if (ch[0]==';') printf("%s",ch);
 else
  {
  ch[strlen(ch)-1]='\0';
  for(n=0;(ch[n])&&(ch[n]!=' ');n++);
  if (ch[n]!=' ') { fprintf(stderr,"bad format in %s\n",argv[1]); exit(0); }
  for(++n;(ch[n])&&(ch[n]!=' ')&&(ch[n]!='\n');n++);
  ch[n]='\0';
  debut=TraitePhoneme(ch,file2,debut,&pitch);
  }

exit(0); 
}