Edinburgh Speech Tools 2.4-release
 
Loading...
Searching...
No Matches
tilt_synthesis_main.cc
1/*************************************************************************/
2/* */
3/* Centre for Speech Technology Research */
4/* University of Edinburgh, UK */
5/* Copyright (c) 1996 */
6/* All Rights Reserved. */
7/* */
8/* Permission is hereby granted, free of charge, to use and distribute */
9/* this software and its documentation without restriction, including */
10/* without limitation the rights to use, copy, modify, merge, publish, */
11/* distribute, sublicense, and/or sell copies of this work, and to */
12/* permit persons to whom this work is furnished to do so, subject to */
13/* the following conditions: */
14/* 1. The code must retain the above copyright notice, this list of */
15/* conditions and the following disclaimer. */
16/* 2. Any modifications must be clearly marked as such. */
17/* 3. Original authors' names are not deleted. */
18/* 4. The authors' names are not used to endorse or promote products */
19/* derived from this software without specific prior written */
20/* permission. */
21/* */
22/* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */
23/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
24/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
25/* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */
26/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
27/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
28/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
29/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
30/* THIS SOFTWARE. */
31/* */
32/*************************************************************************/
33/* Author : Paul Taylor */
34/* Date : February 1996 */
35/*-----------------------------------------------------------------------*/
36/* Event RFC Synthesis */
37/* */
38/*=======================================================================*/
39
40#include "EST_cmd_line.h"
41#include "EST_tilt.h"
42#include "EST_Track.h"
43#include "ling_class/EST_relation_aux.h"
44#include "EST_string_aux.h"
45
46/** @name <command>tilt_synthesis</command> <emphasis>Generate F0 contours from Tilt descriptions</emphasis>
47 * @id tilt_synthesis-manual
48 * @toc
49 */
50
51//@{
52
53void extract_channels(EST_Wave &single, const EST_Wave &multi, EST_IList &ch_list);
54
55/**@name Synopsis
56 */
57//@{
58
59//@synopsis
60
61/**
62tilt_synthesis generates a F0 contour, given a label file containing
63parameterised Tilt or RFC events.
64
65A detailed description of the Tilt intonation model can be found in the
66<link linkend="tilt-overview">Tilt model overview</link> section.
67
68
69*/
70
71//@}
72
73/**@name OPTIONS
74 */
75//@{
76
77//@options
78
79//@}
80
81
82int main (int argc, char *argv[])
83{
84 EST_Track fz, nfz;
85 EST_Relation ev;
86 EST_Option al, op;
87 EST_String out_file("-"), ev_format, pstring;
88 EST_StrList files, event_list;
89 EST_Item *e;
90
91 float shift;
92 const float default_frame_shift = 0.01; // i.e 10ms intervals
93
94 parse_command_line
95 (argc, argv,
96 EST_String("[input label file] -o [output file] [options]") +
97 "Summary: generate F0 file from tilt or RFC label file\n"
98 "use \"-\" to make input and output files stdin/out\n"
99 "-h Options help\n\n"+
100 "-noconn Synthesize events only - no connections in output\n"
101 "-o <ofile> Output F0 file\n"
102 "-otype <string> File type for output label file\n"
103 "-event_names <string> List of labels to be classed as events. \n"
104 " Lists are specified as quoted strings with spaces \n"
105 " separating each item, e.g.: \"a b c d\"\n\n"
106 "-s <float> Frame spacing of generated contour in seconds\n",
107 files, al);
108
109 out_file = al.present("-o") ? al.val("-o") : (EST_String)"-";
110 init_lib_ops(al, op);
111
112 ev.load(files.first());
113
114 // temporary fix until status of start and end is finalised
115 float prev_end = 0.0;
116
117 for (e = ev.head(); e; e = inext(e))
118 {
119 e->set("start", prev_end);
120 prev_end = e->F("end");
121 }
122
123 pstring = al.present("-event_names") ? al.val("-event_names"):
124 EST_String("a b ab pos");
125 StringtoStrList(pstring, event_list);
126
127 convert_to_broad(ev, event_list, "int_event");
128 shift = al.present("-s") ? al.fval("-s") : default_frame_shift;
129
130 if (ev.f("intonation_style") == "tilt")
131 tilt_synthesis(fz, ev, shift, al.present("-noconn"));
132 else
133 {
134// validate_rfc_stream(ev);
135 fill_rfc_types(ev);
136// cout << ev;
137 rfc_synthesis(fz, ev, shift, al.present("-noconn"));
138 }
139
140 fz.set_channel_name("F0", 0);
141
142 fz.save(out_file, al.val("-otype"));
143 return 0;
144}
145
146/** @name Input Intonation Files
147
148The input should be a label file containing the tilt parameters for the
149events in feature format. An example, in xlabel format, is shown below:
150</para>
151<para>
152<screen>
153intonation_style tilt
154#
1550.29 26 phrase_start ; ev.f0 115.234 ; position 0.29 ;
1560.53 26 a ; int_event 1 ; ev.f0 118.171 ; position 0.53 ; tilt.amp 21.8602 ;
157 tilt.dur 0.26 ; tilt.tilt -0.163727 ;
1580.77 26 a ; int_event 1 ; ev.f0 112.694 ; position 0.77 ; tilt.amp 27.0315 ;
159 tilt.dur 0.32 ; tilt.tilt -0.446791 ;
1601.53 26 a ; int_event 1 ; ev.f0 100.83 ; position 1.53 ; tilt.amp 7.507 ;
161 tilt.dur 0.22 ; tilt.tilt -0.296317 ;
1621.79 26 phrase_end ; ev.f0 92.9785 ; position 1.79 ;
163</screen>
164</para>
165<para>
166tilt_synthesis can also generate F0 contours from RFC parameters:
167</para>
168<para>
169<screen>
170intonation_style rfc
171#
1720.29 26 phrase_start ; ev.f0 115.234 ; position 0.29 ;
1730.53 26 a ; ev.f0 118.171 ; rfc.rise_amp 8.19178 ; rfc.rise_dur 0.12 ;
174 rfc.fall_amp -13.6684 ; rfc.fall_dur 0.14 ; position 0.53 ;
175 0.77 26 a ; ev.f0 112.694 ; rfc.rise_amp 6.50673 ; rfc.rise_dur 0.1 ;
176 rfc.fall_amp -20.5248 ; rfc.fall_dur 0.22 ; position 0.77 ;
1771.53 26 a ; ev.f0 100.83 ; rfc.rise_amp 1.55832 ; rfc.rise_dur 0.11 ;
178 rfc.fall_amp -6.09238 ; rfc.fall_dur 0.11 ; position 1.53 ;
1791.79 26 phrase_end ; ev.f0 92.9785 ; position 1.79 ;
180</screen>
181</para>
182<para>
183The feature in the header, "intonation_style tilt" or
184"intonation_style rfc" is needed for the tilt_synthesis program to know which
185type of synthesis to perform.
186
187*/
188
189//@{
190//@}
191
192//@}
193
194
195void override_lib_ops(EST_Option &a_list, EST_Option &al)
196{
197 // general options
198 a_list.override_val("sample_rate", al.val("-f", 0));
199}
200
void set(const EST_String &name, int ival)
Definition EST_Item.h:179
const float F(const EST_String &name) const
Definition EST_Item.h:134
float fval(const EST_String &rkey, int m=1) const
Definition EST_Option.cc:98
int override_val(const EST_String rkey, const EST_String rval)
add to end of list or overwrite. If rval is empty, do nothing
Definition EST_Option.cc:48
EST_Features f
EST_read_status load(const EST_String &filename, const EST_String &type="esps")
EST_Item * head() const
const V & val(const K &rkey, bool m=0) const
return value according to key (const)
Definition EST_TKVL.cc:145
const int present(const K &rkey) const
Returns true if key is present.
Definition EST_TKVL.cc:222
const T & first() const
return const reference to first item in list
Definition EST_TList.h:146
void set_channel_name(const EST_String &name, int channel)
set the name of the channel.
Definition EST_Track.cc:166
EST_write_status save(const EST_String name, const EST_String EST_filetype="")