/*************************************************************************/
/* */
/* Centre for Speech Technology Research */
/* University of Edinburgh, UK */
/* Copyright (c) 1996 */
/* All Rights Reserved. */
/* */
/* Permission is hereby granted, free of charge, to use and distribute */
/* this software and its documentation without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of this work, and to */
/* permit persons to whom this work is furnished to do so, subject to */
/* the following conditions: */
/* 1. The code must retain the above copyright notice, this list of */
/* conditions and the following disclaimer. */
/* 2. Any modifications must be clearly marked as such. */
/* 3. Original authors' names are not deleted. */
/* 4. The authors' names are not used to endorse or promote products */
/* derived from this software without specific prior written */
/* permission. */
/* */
/* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */
/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
/* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */
/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
/* THIS SOFTWARE. */
/* */
/*************************************************************************/
/* Author : Paul Taylor */
/* Date : February 1996 */
/*-----------------------------------------------------------------------*/
/* Event RFC Synthesis */
/* */
/*=======================================================================*/
#include "EST_cmd_line.h"
#include "EST_tilt.h"
#include "EST_Track.h"
#include "ling_class/EST_relation_aux.h"
#include "EST_string_aux.h"
/** @name tilt_synthesisGenerate F0 contours from Tilt descriptions
* @id tilt_synthesis-manual
* @toc
*/
//@{
void extract_channels(EST_Wave &single, const EST_Wave &multi, EST_IList &ch_list);
/**@name Synopsis
*/
//@{
//@synopsis
/**
tilt_synthesis generates a F0 contour, given a label file containing
parameterised Tilt or RFC events.
A detailed description of the Tilt intonation model can be found in the
Tilt model overview section.
*/
//@}
/**@name OPTIONS
*/
//@{
//@options
//@}
int main (int argc, char *argv[])
{
EST_Track fz, nfz;
EST_Relation ev;
EST_Option al, op;
EST_String out_file("-"), ev_format, pstring;
EST_StrList files, event_list;
EST_Item *e;
float shift;
const float default_frame_shift = 0.01; // i.e 10ms intervals
parse_command_line
(argc, argv,
EST_String("[input label file] -o [output file] [options]") +
"Summary: generate F0 file from tilt or RFC label file\n"
"use \"-\" to make input and output files stdin/out\n"
"-h Options help\n\n"+
"-noconn Synthesize events only - no connections in output\n"
"-o Output F0 file\n"
"-otype File type for output label file\n"
"-event_names List of labels to be classed as events. \n"
" Lists are specified as quoted strings with spaces \n"
" separating each item, e.g.: \"a b c d\"\n\n"
"-s Frame spacing of generated contour in seconds\n",
files, al);
out_file = al.present("-o") ? al.val("-o") : (EST_String)"-";
init_lib_ops(al, op);
ev.load(files.first());
// temporary fix until status of start and end is finalised
float prev_end = 0.0;
for (e = ev.head(); e; e = e->next())
{
e->set("start", prev_end);
prev_end = e->F("end");
}
pstring = al.present("-event_names") ? al.val("-event_names"):
EST_String("a b ab pos");
StringtoStrList(pstring, event_list);
convert_to_broad(ev, event_list, "int_event");
shift = al.present("-s") ? al.fval("-s") : default_frame_shift;
if (ev.f("intonation_style") == "tilt")
tilt_synthesis(fz, ev, shift, al.present("-noconn"));
else
{
// validate_rfc_stream(ev);
fill_rfc_types(ev);
// cout << ev;
rfc_synthesis(fz, ev, shift, al.present("-noconn"));
}
fz.set_channel_name("F0", 0);
fz.save(out_file, al.val("-otype"));
return 0;
}
/** @name Input Intonation Files
The input should be a label file containing the tilt parameters for the
events in feature format. An example, in xlabel format, is shown below:
intonation_style tilt
#
0.29 26 phrase_start ; ev.f0 115.234 ; position 0.29 ;
0.53 26 a ; int_event 1 ; ev.f0 118.171 ; position 0.53 ; tilt.amp 21.8602 ;
tilt.dur 0.26 ; tilt.tilt -0.163727 ;
0.77 26 a ; int_event 1 ; ev.f0 112.694 ; position 0.77 ; tilt.amp 27.0315 ;
tilt.dur 0.32 ; tilt.tilt -0.446791 ;
1.53 26 a ; int_event 1 ; ev.f0 100.83 ; position 1.53 ; tilt.amp 7.507 ;
tilt.dur 0.22 ; tilt.tilt -0.296317 ;
1.79 26 phrase_end ; ev.f0 92.9785 ; position 1.79 ;
tilt_synthesis can also generate F0 contours from RFC parameters:
intonation_style rfc
#
0.29 26 phrase_start ; ev.f0 115.234 ; position 0.29 ;
0.53 26 a ; ev.f0 118.171 ; rfc.rise_amp 8.19178 ; rfc.rise_dur 0.12 ;
rfc.fall_amp -13.6684 ; rfc.fall_dur 0.14 ; position 0.53 ;
0.77 26 a ; ev.f0 112.694 ; rfc.rise_amp 6.50673 ; rfc.rise_dur 0.1 ;
rfc.fall_amp -20.5248 ; rfc.fall_dur 0.22 ; position 0.77 ;
1.53 26 a ; ev.f0 100.83 ; rfc.rise_amp 1.55832 ; rfc.rise_dur 0.11 ;
rfc.fall_amp -6.09238 ; rfc.fall_dur 0.11 ; position 1.53 ;
1.79 26 phrase_end ; ev.f0 92.9785 ; position 1.79 ;
The feature in the header, "intonation_style tilt" or
"intonation_style rfc" is needed for the tilt_synthesis program to know which
type of synthesis to perform.
*/
//@{
//@}
//@}
void override_lib_ops(EST_Option &a_list, EST_Option &al)
{
// general options
a_list.override_val("sample_rate", al.val("-f", 0));
}