FormantGrid Formant_downto_FormantGrid (Formant me) { FormantGrid thee = FormantGrid_createEmpty (my xmin, my xmax, my maxnFormants); cherror for (long iframe = 1; iframe <= my nx; iframe ++) { Formant_Frame frame = & my frame [iframe]; double t = Sampled_indexToX (me, iframe); for (long iformant = 1; iformant <= frame -> nFormants; iformant ++) { Formant_Formant pair = & frame -> formant [iformant]; FormantGrid_addFormantPoint (thee, iformant, t, pair -> frequency); cherror FormantGrid_addBandwidthPoint (thee, iformant, t, pair -> bandwidth); cherror } } end: iferror forget (thee); return thee; }
FormantGrid FormantGrid_create (double tmin, double tmax, long numberOfFormants, double initialFirstFormant, double initialFormantSpacing, double initialFirstBandwidth, double initialBandwidthSpacing) { FormantGrid me = FormantGrid_createEmpty (tmin, tmax, numberOfFormants); cherror for (long iformant = 1; iformant <= numberOfFormants; iformant ++) { FormantGrid_addFormantPoint (me, iformant, 0.5 * (tmin + tmax), initialFirstFormant + (iformant - 1) * initialFormantSpacing); cherror FormantGrid_addBandwidthPoint (me, iformant, 0.5 * (tmin + tmax), initialFirstBandwidth + (iformant - 1) * initialBandwidthSpacing); cherror } end: iferror forget (me); return me; }
FormantGrid Formant_downto_FormantGrid (Formant me) { try { autoFormantGrid thee = FormantGrid_createEmpty (my xmin, my xmax, my maxnFormants); for (long iframe = 1; iframe <= my nx; iframe ++) { Formant_Frame frame = & my d_frames [iframe]; double t = Sampled_indexToX (me, iframe); for (long iformant = 1; iformant <= frame -> nFormants; iformant ++) { Formant_Formant pair = & frame -> formant [iformant]; FormantGrid_addFormantPoint (thee.peek(), iformant, t, pair -> frequency); FormantGrid_addBandwidthPoint (thee.peek(), iformant, t, pair -> bandwidth); } } return thee.transfer(); } catch (MelderError) { Melder_throw (me, ": not converted to FormantGrid."); } }
FormantGrid FormantGrid_create (double tmin, double tmax, long numberOfFormants, double initialFirstFormant, double initialFormantSpacing, double initialFirstBandwidth, double initialBandwidthSpacing) { try { autoFormantGrid me = FormantGrid_createEmpty (tmin, tmax, numberOfFormants); for (long iformant = 1; iformant <= numberOfFormants; iformant ++) { FormantGrid_addFormantPoint (me.peek(), iformant, 0.5 * (tmin + tmax), initialFirstFormant + (iformant - 1) * initialFormantSpacing); FormantGrid_addBandwidthPoint (me.peek(), iformant, 0.5 * (tmin + tmax), initialFirstBandwidth + (iformant - 1) * initialBandwidthSpacing); } return me.transfer(); } catch (MelderError) { Melder_throw ("FormantGrid not created."); } }