<sect1 id='pitchmark-manual'> <title><command> pitchmark </command> <emphasis> Find instants of glottal closure in Largynograph file</emphasis></title> <para> * @toc </para> <sect2> <title>Synopsis</title> <para> </para> <!-- /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_synopsis --> <para> <cmdsynopsis><command>pitchmark</command>[input file] -o [output file] [options]Summary: pitchmark laryngograph (lx) files<arg>-h </arg> <arg>-itype <replaceable>string</replaceable></arg> <arg>-n <replaceable>int</replaceable></arg> <arg>-f <replaceable>int</replaceable></arg> <arg>-ibo <replaceable>string</replaceable></arg> <arg>-iswap </arg> <arg>-istype <replaceable>string</replaceable></arg> <arg>-c <replaceable>string</replaceable></arg> <arg>-start <replaceable>float</replaceable></arg> <arg>-end <replaceable>float</replaceable></arg> <arg>-from <replaceable>int</replaceable></arg> <arg>-to <replaceable>int</replaceable></arg> <arg>-otype <replaceable>string</replaceable> " {ascii}"</arg> <arg>-S <replaceable>float</replaceable></arg> <arg>-o <replaceable>ofile</replaceable></arg> <arg>-lx_lf <replaceable>int</replaceable></arg> <arg>-lx_lo <replaceable>int</replaceable></arg> <arg>-lx_hf <replaceable>int</replaceable></arg> <arg>-lx_ho <replaceable>int</replaceable></arg> <arg>-df_lf <replaceable>int</replaceable></arg> <arg>-df_lo <replaceable>int</replaceable></arg> <arg>-med_o <replaceable>int</replaceable></arg> <arg>-mean_o <replaceable>int</replaceable></arg> <arg>-inv </arg> <arg>-fill </arg> <arg>-min <replaceable>float</replaceable></arg> <arg>-max <replaceable>float</replaceable></arg> <arg>-def <replaceable>float</replaceable></arg> <arg>-pm <replaceable>ifile</replaceable></arg> <arg>-f0 <replaceable>ofile</replaceable></arg> <arg>-end <replaceable>float</replaceable></arg> <arg>-wave_end </arg> <arg>-inter </arg> <arg>-style <replaceable>string</replaceable></arg> </cmdsynopsis> </para> <!-- DONE /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_synopsis --> <para> <command>pitchmark</command> locates instants of glottal closure in a laryngograph waveform, and performs post-processing to produce even pitchmarks. EST does not currently provide any means of pitchmarking a speech waveform. Pitchmarking is performed by calling the <function>pitchmark()</function> function, which carries out the following operations: <orderedlist> <listitem><para>Double low pass filter the signal. This removes noise in the signal. The parameter <parameter>lx_lf</parameter> specifies the low pass cutoff frequency, and <parameter>lx_lo</parameter> specifies the order. Double filtering (feeding the waveform through the filter, then reversing the waveform and feeding it through again) is performed to reduce any phase shift beween the input and output of the filtering operation. </para></listitem> <listitem><para>Double high pass filter the signal. This removes the very low freqency swell that is often observed in laryngograph waveforms. The parameter <parameter>lx_hf</parameter> specifies the high pass cutoff frequency, and <parameter>lx_ho</parameter> specifies the order. Double filtering is performed to reduce any phase shift beween the input and output of the filtering operation. </para></listitem> <listitem><para>Calculate the delta signal. The filtered waveform is differentiated using the <function>delta()</function> function.</para></listitem> <listitem><para>Low pass filter the delta signal. Some noise may still be present in the signal, and this is removed by further low pass filtering. Experimentation has shown that simple mean smoothing is often more effective than FIR smoothing at this point. The parameter <parameter>mo</parameter> is used to specify the size of the mean smoothing window. If FIR smoothing is chosen, the parameter <parameter>df_lf</parameter> specifies the low pass cutoff frequency, and <parameter>df_lo</parameter> specifies the order. Double filtering is again used to avoid phase distortion. </para></listitem> <listitem><para>Pick zero crossings. Now simple zero-crossing is used to find the pitchmarks themselves. </para></listitem> </orderedlist> <command>pitchmark</command> also performs post-processing on the pitchmarks. This can be used to eliminate pitchmarks which occur too closely together, or to provide estimated evenly spaced pitchmarks during unvoiced regions. The -fill option switches <action>this facility on</action>, and -min, -max, -def, -end and -wave_end control its operation. </para> </sect2> <sect2> <title>OPTIONS</title> <para> </para> <!-- /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_options --> <para> <variablelist> <varlistentry><term>-h</term> <LISTITEM><PARA> Options help </PARA></LISTITEM> </varlistentry> <varlistentry><term>-itype</term> <LISTITEM><PARA> <replaceable>string</replaceable> Input file type (optional). If set to raw, this indicates that the input file does not have a header. While this can be used to specify file types other than raw, this is rarely used for other purposes as the file type of all the existing supported types can be determined automatically from the file's header. If the input file is unheadered, files are assumed to be shorts (16bit). Supported types are nist, est, esps, snd, riff, aiff, audlab, raw, ascii </PARA></LISTITEM> </varlistentry> <varlistentry><term>-n</term> <LISTITEM><PARA> <replaceable>int</replaceable> Number of channels in an unheadered input file </PARA></LISTITEM> </varlistentry> <varlistentry><term>-f</term> <LISTITEM><PARA> <replaceable>int</replaceable> Sample rate in Hertz for an unheadered input file </PARA></LISTITEM> </varlistentry> <varlistentry><term>-ibo</term> <LISTITEM><PARA> <replaceable>string</replaceable> Input byte order in an unheadered input file: possibliities are: MSB , LSB, native or nonnative. Suns, HP, SGI Mips, M68000 are MSB (big endian) Intel, Alpha, DEC Mips, Vax are LSB (little endian) </PARA></LISTITEM> </varlistentry> <varlistentry><term>-iswap</term> <LISTITEM><PARA> Swap bytes. (For use on an unheadered input file) </PARA></LISTITEM> </varlistentry> <varlistentry><term>-istype</term> <LISTITEM><PARA> <replaceable>string</replaceable> Sample type in an unheadered input file: short, mulaw, byte, ascii </PARA></LISTITEM> </varlistentry> <varlistentry><term>-c</term> <LISTITEM><PARA> <replaceable>string</replaceable> Select a single channel (starts from 0). Waveforms can have multiple channels. This option extracts a single channel for progcessing and discards the rest. </PARA></LISTITEM> </varlistentry> <varlistentry><term>-start</term> <LISTITEM><PARA> <replaceable>float</replaceable> Extract sub-wave starting at this time, specified in seconds </PARA></LISTITEM> </varlistentry> <varlistentry><term>-end</term> <LISTITEM><PARA> <replaceable>float</replaceable> Extract sub-wave ending at this time, specified in seconds </PARA></LISTITEM> </varlistentry> <varlistentry><term>-from</term> <LISTITEM><PARA> <replaceable>int</replaceable> Extract sub-wave starting at this sample point </PARA></LISTITEM> </varlistentry> <varlistentry><term>-to</term> <LISTITEM><PARA> <replaceable>int</replaceable> Extract sub-wave ending at this sample point </PARA></LISTITEM> </varlistentry> <varlistentry><term>-otype</term> <LISTITEM><PARA> <replaceable>string</replaceable> " {ascii}" Output file type, if unspecified ascii is assumed, types are: none, esps, est, est_binary, htk, htk_fbank, htk_mfcc, htk_user, htk_discrete, ssff, xmg, xgraph, ema, ema_swapped, ascii, label </PARA></LISTITEM> </varlistentry> <varlistentry><term>-S</term> <LISTITEM><PARA> <replaceable>float</replaceable> Frame spacing of output in seconds. If this is different from the internal spacing, the contour is resampled at this spacing </PARA></LISTITEM> </varlistentry> <varlistentry><term>-o</term> <LISTITEM><PARA> <replaceable>ofile</replaceable> Output filename, defaults to stdout </PARA></LISTITEM> </varlistentry> <varlistentry><term>-lx_lf</term> <LISTITEM><PARA> <replaceable>int</replaceable> lx low frequency cutoff </PARA></LISTITEM> </varlistentry> <varlistentry><term>-lx_lo</term> <LISTITEM><PARA> <replaceable>int</replaceable> lx low order </PARA></LISTITEM> </varlistentry> <varlistentry><term>-lx_hf</term> <LISTITEM><PARA> <replaceable>int</replaceable> lx high frequency cutoff </PARA></LISTITEM> </varlistentry> <varlistentry><term>-lx_ho</term> <LISTITEM><PARA> <replaceable>int</replaceable> lx high order </PARA></LISTITEM> </varlistentry> <varlistentry><term>-df_lf</term> <LISTITEM><PARA> <replaceable>int</replaceable> df low frequeny cutoff </PARA></LISTITEM> </varlistentry> <varlistentry><term>-df_lo</term> <LISTITEM><PARA> <replaceable>int</replaceable> df low order </PARA></LISTITEM> </varlistentry> <varlistentry><term>-med_o</term> <LISTITEM><PARA> <replaceable>int</replaceable> median smoothing order </PARA></LISTITEM> </varlistentry> <varlistentry><term>-mean_o</term> <LISTITEM><PARA> <replaceable>int</replaceable> mean smoothing order </PARA></LISTITEM> </varlistentry> <varlistentry><term>-inv</term> <LISTITEM><PARA> Invert polarity of lx signal. Often the lx signal is upside down. This option inverts the signal prior to processing. </PARA></LISTITEM> </varlistentry> <varlistentry><term>-fill</term> <LISTITEM><PARA> Insert and remove pitchmarks according to min, max and def period values. Often it is desirable to place limits on the values of the pitchmarks. This option enforces a minimum and maximum pitch period (specified by -man and -max). If the maximum pitch setting is low enough, this will esnure that unvoiced regions have evenly spaced pitchmarks </PARA></LISTITEM> </varlistentry> <varlistentry><term>-min</term> <LISTITEM><PARA> <replaceable>float</replaceable> Minimum allowed pitch period, in seconds </PARA></LISTITEM> </varlistentry> <varlistentry><term>-max</term> <LISTITEM><PARA> <replaceable>float</replaceable> Maximum allowed pitch period, in seconds </PARA></LISTITEM> </varlistentry> <varlistentry><term>-def</term> <LISTITEM><PARA> <replaceable>float</replaceable> Default pitch period in seconds, used for a guide as to what length pitch periods should be in unvoiced sections </PARA></LISTITEM> </varlistentry> <varlistentry><term>-pm</term> <LISTITEM><PARA> <replaceable>ifile</replaceable> Input is raw pitchmark file. This option is used to perform filling operations on an already existing set of pitchmarks </PARA></LISTITEM> </varlistentry> <varlistentry><term>-f0</term> <LISTITEM><PARA> <replaceable>ofile</replaceable> Calculate F0 from pitchmarks and save to file </PARA></LISTITEM> </varlistentry> <varlistentry><term>-end</term> <LISTITEM><PARA> <replaceable>float</replaceable> Specify the end time of the last pitchmark, for use with the -fill option </PARA></LISTITEM> </varlistentry> <varlistentry><term>-wave_end</term> <LISTITEM><PARA> Use the end of a waveform to specify when the last pitchmark position should be. The waveform file is only read to determine its end, no processing is performed </PARA></LISTITEM> </varlistentry> <varlistentry><term>-inter</term> <LISTITEM><PARA> Output intermediate waveforms. This will output the signal at various stages of processing. Examination of these waveforms is extremely useful in setting the parameters for similar waveforms </PARA></LISTITEM> </varlistentry> <varlistentry><term>-style</term> <LISTITEM><PARA> <replaceable>string</replaceable> "track" or "lab" </PARA></LISTITEM> </varlistentry> </variablelist> </para> <!-- DONE /amd/projects/festival/versions/v_mpiro/speech_tools_linux/bin/pitchmark -sgml_options --> </sect2> <sect2> <title>Examples</title> <para> </para> <formalpara><title>Basic Pitchmarking</title> <para> <screen> $ pitchmark kdt_010.lar -o kdt_010.pm -otype est </screen> </para> </formalpara> <formalpara><title>Pitchmarking with unvoiced regions filled</title> <para> The following fills unvoiced regions with pitch periods that are about 0.01 seconds long. It also post-processes the set of pitchmarks and ensures that noe are above 0.02 seconds long and none below 0.003. A final unvoiced region extending to the end of the wave is specified by using the -wave_end option. </para> </formalpara><para> <screen> $ pitchmark kdt_010.lar -o kdt_010.pm -otype est -fill -min 0.003 \ -max 0.02 -def 0.01 -wave_end </screen> </para> </sect2> </sect1>