static void menu_cb_evaluate_noise_2_0 (EDITOR_ARGS) { EDITOR_IAM (OTGrammarEditor); Editor_save (me, L"Evaluate (noise 2.0)"); OTGrammar_newDisharmonies ((OTGrammar) my data, 2.0); Graphics_updateWs (my g); my broadcastDataChanged (); }
static void menu_cb_ReverseSelection (EDITOR_ARGS) { EDITOR_IAM (SoundEditor); Editor_save (me, L"Reverse selection"); Sound_reverse ((Sound) my data, my d_startSelection, my d_endSelection); my v_destroy_analysis (); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_octaveUp (EDITOR_ARGS) { EDITOR_IAM (PitchEditor); Pitch pitch = (Pitch) my data; Editor_save (me, L"Octave up"); Pitch_step (pitch, 2.0, 0.1, my d_startSelection, my d_endSelection); FunctionEditor_redraw (me); my broadcastDataChanged (); }
static void menu_cb_fifthDown (EDITOR_ARGS) { EDITOR_IAM (PitchEditor); Pitch pitch = (Pitch) my data; Editor_save (me, L"Fifth down"); Pitch_step (pitch, 1 / 1.5, 0.1, my d_startSelection, my d_endSelection); FunctionEditor_redraw (me); my broadcastDataChanged (); }
static void menu_cb_octaveDown (EDITOR_ARGS) { EDITOR_IAM (PitchEditor); Pitch pitch = (Pitch) my data; Editor_save (me, U"Octave down"); Pitch_step (pitch, 0.5, 0.1, my d_startSelection, my d_endSelection); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_addPointAtCursor (FormantGridEditor me, EDITOR_ARGS_DIRECT) { Editor_save (me, U"Add point"); FormantGrid grid = (FormantGrid) my data; Ordered tiers = my editingBandwidths ? grid -> bandwidths.get() : grid -> formants.get(); RealTier tier = (RealTier) tiers -> item [my selectedFormant]; RealTier_addPoint (tier, 0.5 * (my d_startSelection + my d_endSelection), my ycursor); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_removePoints (PointEditor me, EDITOR_ARGS_DIRECT) { Editor_save (me, U"Remove point(s)"); if (my startSelection == my endSelection) PointProcess_removePointNear ((PointProcess) my data, my startSelection); else PointProcess_removePointsBetween ((PointProcess) my data, my startSelection, my endSelection); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_removePoints (EDITOR_ARGS) { EDITOR_IAM (PointEditor); Editor_save (me, L"Remove point(s)"); if (my d_startSelection == my d_endSelection) PointProcess_removePointNear ((PointProcess) my data, my d_startSelection); else PointProcess_removePointsBetween ((PointProcess) my data, my d_startSelection, my d_endSelection); FunctionEditor_redraw (me); my broadcastDataChanged (); }
static void menu_cb_removePoints (RealTierEditor me, EDITOR_ARGS_DIRECT) { Editor_save (me, U"Remove point(s)"); if (my d_startSelection == my d_endSelection) AnyTier_removePointNear (my data, my d_startSelection); else AnyTier_removePointsBetween (my data, my d_startSelection, my d_endSelection); RealTierEditor_updateScaling (me); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_removeConstraint (EDITOR_ARGS) { EDITOR_IAM (OTMultiEditor); OTMulti grammar = (OTMulti) my data; if (my selectedConstraint < 1 || my selectedConstraint > grammar -> numberOfConstraints) Melder_throw (U"Select a constraint first."); OTConstraint constraint = & grammar -> constraints [grammar -> index [my selectedConstraint]]; Editor_save (me, U"Remove constraint"); OTMulti_removeConstraint (grammar, constraint -> name); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); }
static void menu_cb_addPointAtCursor (RealTierEditor me, EDITOR_ARGS_DIRECT) { if (NUMdefined (my v_minimumLegalValue ()) && my ycursor < my v_minimumLegalValue ()) Melder_throw (U"Cannot add a point below ", my v_minimumLegalValue (), my v_rightTickUnits (), U"."); if (NUMdefined (my v_maximumLegalValue ()) && my ycursor > my v_maximumLegalValue ()) Melder_throw (U"Cannot add a point above ", my v_maximumLegalValue (), my v_rightTickUnits (), U"."); Editor_save (me, U"Add point"); RealTier_addPoint ((RealTier) my data, 0.5 * (my d_startSelection + my d_endSelection), my ycursor); RealTierEditor_updateScaling (me); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_addPointAt (PointEditor me, EDITOR_ARGS_FORM) { EDITOR_FORM (U"Add point", nullptr) REAL (U"Position", U"0.0"); EDITOR_OK SET_REAL (U"Position", 0.5 * (my startSelection + my endSelection)); EDITOR_DO Editor_save (me, U"Add point"); PointProcess_addPoint ((PointProcess) my data, GET_REAL (U"Position")); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); EDITOR_END }
static void menu_cb_removePoints (FormantGridEditor me, EDITOR_ARGS_DIRECT) { Editor_save (me, U"Remove point(s)"); FormantGrid grid = (FormantGrid) my data; Ordered tiers = my editingBandwidths ? grid -> bandwidths.get() : grid -> formants.get(); RealTier tier = (RealTier) tiers -> item [my selectedFormant]; if (my d_startSelection == my d_endSelection) AnyTier_removePointNear (tier, my d_startSelection); else AnyTier_removePointsBetween (tier, my d_startSelection, my d_endSelection); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_removeConstraint (EDITOR_ARGS) { EDITOR_IAM (OTGrammarEditor); OTGrammar ot = (OTGrammar) my data; OTGrammarConstraint constraint; if (my selected < 1 || my selected > ot -> numberOfConstraints) Melder_throw (U"Select a constraint first."); constraint = & ot -> constraints [ot -> index [my selected]]; Editor_save (me, U"Remove constraint"); OTGrammar_removeConstraint (ot, constraint -> name); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); }
static void menu_cb_evaluate (EDITOR_ARGS) { EDITOR_IAM (OTGrammarEditor); EDITOR_FORM (L"Evaluate", 0) REAL (L"Noise", L"2.0") EDITOR_OK EDITOR_DO Editor_save (me, L"Evaluate"); OTGrammar_newDisharmonies ((OTGrammar) my data, GET_REAL (L"Noise")); Graphics_updateWs (my g); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_resetAllRankings (EDITOR_ARGS) { EDITOR_IAM (OTGrammarEditor); EDITOR_FORM (L"Reset all rankings", 0) REAL (L"Ranking", L"100.0") EDITOR_OK EDITOR_DO Editor_save (me, L"Reset all rankings"); OTGrammar_reset ((OTGrammar) my data, GET_REAL (L"Ranking")); Graphics_updateWs (my g); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_evaluate (EDITOR_ARGS) { EDITOR_IAM (OTMultiEditor); EDITOR_FORM (U"Evaluate", 0) REAL (U"Evaluation noise", U"2.0") EDITOR_OK EDITOR_DO Editor_save (me, U"Evaluate"); OTMulti_newDisharmonies ((OTMulti) my data, GET_REAL (U"Evaluation noise")); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); EDITOR_END }
static void menu_cb_resetAllRankings (EDITOR_ARGS) { EDITOR_IAM (OTMultiEditor); EDITOR_FORM (U"Reset all rankings", 0) REAL (U"Ranking", U"100.0") EDITOR_OK EDITOR_DO Editor_save (me, U"Reset all rankings"); OTMulti_reset ((OTMulti) my data, GET_REAL (U"Ranking")); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); EDITOR_END }
static void menu_cb_addPointAt (EDITOR_ARGS) { EDITOR_IAM (PointEditor); EDITOR_FORM (L"Add point", 0) REAL (L"Position", L"0.0"); EDITOR_OK SET_REAL (L"Position", 0.5 * (my d_startSelection + my d_endSelection)); EDITOR_DO Editor_save (me, L"Add point"); PointProcess_addPoint ((PointProcess) my data, GET_REAL (L"Position")); FunctionEditor_redraw (me); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_SetSelectionToZero (SoundEditor me, EDITOR_ARGS_DIRECT) { Sound sound = (Sound) my data; long first, last; Sampled_getWindowSamples (sound, my d_startSelection, my d_endSelection, & first, & last); Editor_save (me, U"Set to zero"); for (long channel = 1; channel <= sound -> ny; channel ++) { for (long i = first; i <= last; i ++) { sound -> z [channel] [i] = 0.0; } } my v_reset_analysis (); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); }
static void menu_cb_stopBand (EDITOR_ARGS) { EDITOR_IAM (SpectrumEditor); EDITOR_FORM (L"Filter (stop Hann band)", 0) REAL (L"Band smoothing (Hz)", my default_bandSmoothing ()) EDITOR_OK SET_REAL (L"Band smoothing", my p_bandSmoothing) EDITOR_DO my pref_bandSmoothing () = my p_bandSmoothing = GET_REAL (L"Band smoothing"); if (my d_endSelection <= my d_startSelection) Melder_throw (L"To apply a band-stop filter, first make a selection."); Editor_save (me, L"Stop band"); Spectrum_stopHannBand ((Spectrum) my data, my d_startSelection, my d_endSelection, my p_bandSmoothing); FunctionEditor_redraw (me); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_setCeiling (EDITOR_ARGS) { EDITOR_IAM (PitchEditor); EDITOR_FORM (L"Change ceiling", 0) POSITIVE (L"Ceiling (Hz)", L"600") EDITOR_OK Pitch pitch = (Pitch) my data; SET_REAL (L"Ceiling", pitch -> ceiling) EDITOR_DO Pitch pitch = (Pitch) my data; Editor_save (me, L"Change ceiling"); Pitch_setCeiling (pitch, GET_REAL (L"Ceiling")); FunctionEditor_redraw (me); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_addPointAt (FormantGridEditor me, EDITOR_ARGS_FORM) { EDITOR_FORM (U"Add point", nullptr) REAL (U"Time (s)", U"0.0") POSITIVE (U"Frequency (Hz)", U"200.0") EDITOR_OK SET_REAL (U"Time", 0.5 * (my d_startSelection + my d_endSelection)) SET_REAL (U"Frequency", my ycursor) EDITOR_DO Editor_save (me, U"Add point"); FormantGrid grid = (FormantGrid) my data; Ordered tiers = my editingBandwidths ? grid -> bandwidths.get() : grid -> formants.get(); RealTier tier = (RealTier) tiers -> item [my selectedFormant]; RealTier_addPoint (tier, GET_REAL (U"Time"), GET_REAL (U"Frequency")); FunctionEditor_redraw (me); Editor_broadcastDataChanged (me); EDITOR_END }
int structPitchEditor :: v_click (double xWC, double yWC, bool dummy) { Pitch pitch = (Pitch) our data; double dyUnv = Graphics_dyMMtoWC (d_graphics, HEIGHT_UNV); double dyIntens = Graphics_dyMMtoWC (d_graphics, HEIGHT_INTENS); double frequency = (yWC - dyUnv) / (1 - dyIntens - dyUnv) * pitch -> ceiling, tmid; double minimumDf = 1e30; int cand, bestCandidate = -1; long ibestFrame; Pitch_Frame bestFrame; ibestFrame = Sampled_xToNearestIndex (pitch, xWC); if (ibestFrame < 1) ibestFrame = 1; if (ibestFrame > pitch -> nx) ibestFrame = pitch -> nx; bestFrame = & pitch -> frame [ibestFrame]; tmid = Sampled_indexToX (pitch, ibestFrame); for (cand = 1; cand <= bestFrame -> nCandidates; cand ++) { double df = frequency - bestFrame -> candidate [cand]. frequency; if (fabs (df) < minimumDf) { minimumDf = fabs (df); bestCandidate = cand; } } if (bestCandidate != -1) { double bestFrequency = bestFrame -> candidate [bestCandidate]. frequency; double distanceWC = (frequency - bestFrequency) / pitch -> ceiling * (1 - dyIntens - dyUnv); double dx_mm = Graphics_dxWCtoMM (our d_graphics, xWC - tmid), dy_mm = Graphics_dyWCtoMM (our d_graphics, distanceWC); if (bestFrequency < pitch -> ceiling && // above ceiling: ignore ((bestFrequency <= 0.0 && fabs (xWC - tmid) <= 0.5 * pitch -> dx && frequency <= 0.0) || // voiceless: click within frame (bestFrequency > 0.0 && dx_mm * dx_mm + dy_mm * dy_mm <= RADIUS * RADIUS))) // voiced: click within circle { struct structPitch_Candidate help = bestFrame -> candidate [1]; Editor_save (this, L"Change path"); bestFrame -> candidate [1] = bestFrame -> candidate [bestCandidate]; bestFrame -> candidate [bestCandidate] = help; FunctionEditor_redraw (this); our broadcastDataChanged (); our d_startSelection = our d_endSelection = tmid; // cursor will snap to candidate return 1; } else { return PitchEditor_Parent :: v_click (xWC, yWC, dummy); // move cursor or drag selection } } return PitchEditor_Parent :: v_click (xWC, yWC, dummy); // move cursor or drag selection }
static void menu_cb_addPointAt (EDITOR_ARGS) { EDITOR_IAM (FormantGridEditor); EDITOR_FORM (L"Add point", 0) REAL (L"Time (s)", L"0.0") POSITIVE (L"Frequency (Hz)", L"200.0") EDITOR_OK SET_REAL (L"Time", 0.5 * (my startSelection + my endSelection)) SET_REAL (L"Frequency", my ycursor) EDITOR_DO Editor_save (me, L"Add point"); FormantGrid grid = (FormantGrid) my data; Ordered tiers = my editingBandwidths ? grid -> bandwidths : grid -> formants; RealTier tier = (RealTier) tiers -> item [my selectedFormant]; RealTier_addPoint (tier, GET_REAL (L"Time"), GET_REAL (L"Frequency")); FunctionEditor_redraw (me); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_voiceless (EDITOR_ARGS) { EDITOR_IAM (PitchEditor); Pitch pitch = (Pitch) my data; long ileft = Sampled_xToHighIndex (pitch, my d_startSelection); long iright = Sampled_xToLowIndex (pitch, my d_endSelection); if (ileft < 1) ileft = 1; if (iright > pitch -> nx) iright = pitch -> nx; Editor_save (me, L"Unvoice"); for (long i = ileft; i <= iright; i ++) { Pitch_Frame frame = & pitch -> frame [i]; for (long cand = 1; cand <= frame -> nCandidates; cand ++) { if (frame -> candidate [cand]. frequency == 0.0) { struct structPitch_Candidate help = frame -> candidate [1]; frame -> candidate [1] = frame -> candidate [cand]; frame -> candidate [cand] = help; } } } FunctionEditor_redraw (me); my broadcastDataChanged (); }
static void menu_cb_learnOneFromPartialOutput (EDITOR_ARGS) { EDITOR_IAM (OTGrammarEditor); EDITOR_FORM (U"Learn one from partial adult output", 0) LABEL (U"", U"Partial adult surface form (e.g. overt form):") SENTENCE (U"Partial output", U"") REAL (U"Evaluation noise", U"2.0") OPTIONMENU_ENUM (U"Update rule", kOTGrammar_rerankingStrategy, kOTGrammar_rerankingStrategy_SYMMETRIC_ALL) REAL (U"Plasticity", U"0.1") REAL (U"Rel. plasticity spreading", U"0.1") BOOLEAN (U"Honour local rankings", 1) NATURAL (U"Number of chews", U"1") EDITOR_OK EDITOR_DO Editor_save (me, U"Learn one from partial output"); OTGrammar_learnOneFromPartialOutput ((OTGrammar) my data, GET_STRING (U"Partial output"), GET_REAL (U"Evaluation noise"), GET_ENUM (kOTGrammar_rerankingStrategy, U"Update rule"), GET_INTEGER (U"Honour local rankings"), GET_REAL (U"Plasticity"), GET_REAL (U"Rel. plasticity spreading"), GET_INTEGER (U"Number of chews"), TRUE); OTGrammar_sort ((OTGrammar) my data); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); EDITOR_END }
static void menu_cb_learnOne (EDITOR_ARGS) { EDITOR_IAM (OTGrammarEditor); EDITOR_FORM (U"Learn one", U"OTGrammar: Learn one...") LABEL (U"", U"Underlying form:") SENTENCE (U"Input string", U"") LABEL (U"", U"Adult surface form:") SENTENCE (U"Output string", U"") REAL (U"Evaluation noise", U"2.0") OPTIONMENU_ENUM (U"Update rule", kOTGrammar_rerankingStrategy, kOTGrammar_rerankingStrategy_SYMMETRIC_ALL) REAL (U"Plasticity", U"0.1") REAL (U"Rel. plasticity spreading", U"0.1") BOOLEAN (U"Honour local rankings", 1) EDITOR_OK EDITOR_DO Editor_save (me, U"Learn one"); OTGrammar_learnOne ((OTGrammar) my data, GET_STRING (U"Input string"), GET_STRING (U"Output string"), GET_REAL (U"Evaluation noise"), GET_ENUM (kOTGrammar_rerankingStrategy, U"Update rule"), GET_INTEGER (U"Honour local rankings"), GET_REAL (U"Plasticity"), GET_REAL (U"Rel. plasticity spreading"), TRUE, TRUE, NULL); OTGrammar_sort ((OTGrammar) my data); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); EDITOR_END }
static void menu_cb_pathFinder (EDITOR_ARGS) { EDITOR_IAM (PitchEditor); EDITOR_FORM (L"Path finder", 0) REAL (L"Silence threshold", L"0.03") REAL (L"Voicing threshold", L"0.45") REAL (L"Octave cost", L"0.01") REAL (L"Octave-jump cost", L"0.35") REAL (L"Voiced/unvoiced cost", L"0.14") POSITIVE (L"Ceiling (Hz)", L"600") BOOLEAN (L"Pull formants", 0) EDITOR_OK Pitch pitch = (Pitch) my data; SET_REAL (L"Ceiling", pitch -> ceiling) EDITOR_DO Pitch pitch = (Pitch) my data; Editor_save (me, L"Path finder"); Pitch_pathFinder (pitch, GET_REAL (L"Silence threshold"), GET_REAL (L"Voicing threshold"), GET_REAL (L"Octave cost"), GET_REAL (L"Octave-jump cost"), GET_REAL (L"Voiced/unvoiced cost"), GET_REAL (L"Ceiling"), GET_INTEGER (L"Pull formants")); FunctionEditor_redraw (me); my broadcastDataChanged (); EDITOR_END }
static void menu_cb_learnOne (EDITOR_ARGS) { EDITOR_IAM (OTMultiEditor); EDITOR_FORM (U"Learn one", U"OTGrammar: Learn one...") OPTIONMENU_ENUM (U"Update rule", kOTGrammar_rerankingStrategy, kOTGrammar_rerankingStrategy_SYMMETRIC_ALL) OPTIONMENU (U"Direction", 3) OPTION (U"forward") OPTION (U"backward") OPTION (U"bidirectionally") REAL (U"Plasticity", U"0.1") REAL (U"Rel. plasticity spreading", U"0.1") EDITOR_OK EDITOR_DO Editor_save (me, U"Learn one"); Melder_free (my form1); Melder_free (my form2); my form1 = GuiText_getString (my form1Text); my form2 = GuiText_getString (my form2Text); OTMulti_learnOne ((OTMulti) my data, my form1, my form2, GET_ENUM (kOTGrammar_rerankingStrategy, U"Update rule"), GET_INTEGER (U"Direction"), GET_REAL (U"Plasticity"), GET_REAL (U"Rel. plasticity spreading")); Graphics_updateWs (my g); Editor_broadcastDataChanged (me); EDITOR_END }