autoCollection FFNet_createIrisExample (long numberOfHidden1, long numberOfHidden2) { try { autoCollection c = Collection_create (classDaata, 3); autoCategories uniq = Categories_sequentialNumbers (3); autoFFNet me = FFNet_create (4, numberOfHidden1, numberOfHidden2, 3, 0); FFNet_setOutputCategories (me.peek(), uniq.peek()); autostring32 name = FFNet_createNameFromTopology (me.peek()); Thing_setName (me.peek(), name.peek()); Collection_addItem_move (c.peek(), me.move()); autoTableOfReal iris = TableOfReal_createIrisDataset (); /* * Scale data to interval [0-1] */ for (long i = 1; i <= 150; i++) { for (long j = 1; j <= 4; j++) { iris -> data[i][j] /= 10.0; } } autoPattern ap; autoCategories ac; TableOfReal_to_Pattern_and_Categories (iris.peek(), 0, 0, 0, 0, & ap, & ac); Thing_setName (ap.peek(), U"iris"); Thing_setName (ac.peek(), U"iris"); Collection_addItem_move (c.peek(), ap.move()); Collection_addItem_move (c.peek(), ac.move()); return c; } catch (MelderError) { Melder_throw (U"Iris example not created."); } }
Configuration Configuration_createLetterRExample (int choice) { double x1[33] = { 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -3, -2, -1, 0, 1, 2.25, 3, 3, 2.25, 1, 0, -1, -2, -3, -4, -1, 0, 1, 2, 3 }; double y1[33] = { 0, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 3.5, 2, 1, -0.5, -1, -1, -1, -1, -1, -1, -2, -3, -4, -5, -6 }; double x2[33] = {0, 0.94756043346272423, 0.73504466902509913, 0.4528453515175927, 0.46311499024105723, 0.30345454816993439, 0.075184942115601547, -0.090010071904764719, -0.19630977381424003, -0.36341509807865086, -0.54216996409132612, -0.68704678013309872, -0.67370169194623086, -0.69336494336440502, -0.67809065144478664, -0.61382610572366281, -0.68656530656078996, -0.57704879646736551, -0.63417502349009069, -0.37153350651419026, -0.091809666009009777, 0.054833807442559397, 0.1445593164362155, 0.055587230806920782, 0.18201798315035453, 0.048445620192953162, 0.081595930742961439, 0.20063623749033621, 0.28546520751183313, 0.39384438699721991, 0.62832258520372286, 0.78548335015622228, 1.0610707888793069 }; double y2[33] = {0, 0.49630791172076621, 0.53320347382055022, 0.62384637225470441, 0.47592708487655661, 0.50364353255684202, 0.55311720162084443, 0.55118713773007066, 0.50007736370068601, 0.40432332354648709, 0.49817059660482677, 0.49803436631629411, 0.33213829258059019, 0.14585700576425648, -0.022110500334692869, -0.1752555003289698, -0.29448744336706828, -0.45639468287493545, -0.59177815505008013, -0.74980550818568981, -0.78095916436791279, -0.64447562732895125, -0.49526830813007033, -0.22443396573313243, -0.066378148077667398, -0.03498490725857361, 0.16196028200653381, 0.30633527000982519, -0.14894460651161745, -0.30808798640907431, -0.35920781945385832, -0.62766325578928184, -0.60389363590825562 }; try { double *x, *y; autoConfiguration me = Configuration_create (32, 2); if (choice == 2) { x = x2; y = y2; Thing_setName (me.peek(), U"R_fit"); } else { x = x1; y = y1; Thing_setName (me.peek(), U"R"); } for (long i = 1; i <= 32; i++) { char32 s[20]; Melder_sprint (s,20, i); TableOfReal_setRowLabel (me.peek(), i, s); my data [i][1] = x[i]; my data [i][2] = y[i]; } return me.transfer(); } catch (MelderError) { Melder_throw (U"Letter R Configuration not created."); } }
void _CollectionOfDaata_v_readText (_CollectionOfDaata* me, MelderReadText text, int formatVersion) { if (formatVersion < 0) { long l_size; autostring8 line = Melder_32to8 (MelderReadText_readLine (text)); if (! line.peek() || ! sscanf (line.peek(), "%ld", & l_size) || l_size < 0) Melder_throw (U"Collection::readText: cannot read size."); my _grow (l_size); for (long i = 1; i <= l_size; i ++) { long itemNumberRead; int n = 0, length, stringsRead; char klas [200], nameTag [2000]; do { line.reset (Melder_32to8 (MelderReadText_readLine (text))); if (! line.peek()) Melder_throw (U"Missing object line."); } while (strncmp (line.peek(), "Object ", 7)); stringsRead = sscanf (line.peek(), "Object %ld: class %s %s%n", & itemNumberRead, klas, nameTag, & n); if (stringsRead < 2) Melder_throw (U"Collection::readText: cannot read header of object ", i, U"."); if (itemNumberRead != i) Melder_throw (U"Collection::readText: read item number ", itemNumberRead, U" while expecting ", i, U"."); if (stringsRead == 3 && ! strequ (nameTag, "name")) Melder_throw (U"Collection::readText: wrong header at object ", i, U"."); my at [i] = (Daata) Thing_newFromClassName (Melder_peek8to32 (klas), nullptr).releaseToAmbiguousOwner(); my size ++; if (! Thing_isa (my at [i], classDaata) || ! Data_canReadText (my at [i])) Melder_throw (U"Cannot read item of class ", Thing_className (my at [i]), U" in collection."); Data_readText (my at [i], text, -1); if (stringsRead == 3) { if (line [n] == U' ') n ++; // skip space character length = strlen (line.peek()+n); if (length > 0 && (line.peek()+n) [length - 1] == '\n') (line.peek()+n) [length - 1] = '\0'; Thing_setName (my at [i], Melder_peek8to32 (line.peek()+n)); } } } else { int32_t l_size = texgeti4 (text); my _grow (l_size); for (int32_t i = 1; i <= l_size; i ++) { autostring32 className = texgetw2 (text); int elementFormatVersion; my at [i] = (Daata) Thing_newFromClassName (className.peek(), & elementFormatVersion).releaseToAmbiguousOwner(); my size ++; if (! Thing_isa (my at [i], classDaata) || ! Data_canReadText (my at [i])) Melder_throw (U"Cannot read item of class ", Thing_className (my at [i]), U" in collection."); autostring32 objectName = texgetw2 (text); Thing_setName (my at [i], objectName.peek()); Data_readText (my at [i], text, elementFormatVersion); } } }
static void saveDocument (TextEditor me, MelderFile file) { autostring32 text = GuiText_getString (my textWidget); MelderFile_writeText (file, text.peek(), Melder_getOutputEncoding ()); my dirty = false; MelderFile_copy (file, & my file); if (my v_fileBased ()) Thing_setName (me, Melder_fileToPath (file)); }
void Command_init (I, const wchar_t *name, Any data, int (*execute) (Any), int (*undo) (Any)) { iam (Command); Melder_assert (execute && undo); Thing_setName (me, name); my data = data; my execute = execute; my undo = undo; }
static int RunnerMFC_startExperiment (RunnerMFC me) { my data = (Data) my experiments -> item [my iexperiment]; Melder_assert (my data -> classInfo == classExperimentMFC); ExperimentMFC_start ((ExperimentMFC) my data); Thing_setName (me, ((ExperimentMFC) my data) -> name); my broadcastDataChanged (); Graphics_updateWs (my graphics); return 1; }
void gui_information (const wchar_t *message) { if (! theInfoEditor) { theInfoEditor = Thing_new (InfoEditor); theInfoEditor -> structTextEditor :: init (L""); Thing_setName (theInfoEditor, L"Praat Info"); } theInfoEditor -> textWidget -> f_setString (message); theInfoEditor -> d_windowForm -> f_show (); theInfoEditor -> d_windowForm -> f_drain (); }
void _CollectionOfDaata_v_readBinary (_CollectionOfDaata* me, FILE *f, int formatVersion) { if (formatVersion < 0) { int32 l_size = bingeti4 (f); if (l_size < 0) Melder_throw (U"Empty collection."); my _grow (l_size); for (int32_t i = 1; i <= l_size; i ++) { char klas [200], name [2000]; if (fscanf (f, "%s%s", klas, name) < 2) // BUG Melder_throw (U"Cannot read class and name."); my at [i] = (Daata) Thing_newFromClassName (Melder_peek8to32 (klas), nullptr).releaseToAmbiguousOwner(); my size ++; if (! Thing_isa (my at [i], classDaata)) Melder_throw (U"Cannot read item of class ", Thing_className (my at [i]), U"."); if (fgetc (f) != ' ') Melder_throw (U"Cannot read space."); Data_readBinary (my at [i], f, -1); if (strcmp (name, "?")) Thing_setName (my at [i], Melder_peek8to32 (name)); } } else { int32_t l_size = bingeti4 (f); if (Melder_debug == 44) Melder_casual (U"structCollection :: v_readBinary: Reading ", l_size, U" objects"); my _grow (l_size); for (int32_t i = 1; i <= l_size; i ++) { autostring8 klas = bingets1 (f); if (Melder_debug == 44) Melder_casual (U"structCollection :: v_readBinary: Reading object of type ", Melder_peek8to32 (klas.peek())); int elementFormatVersion; my at [i] = (Daata) Thing_newFromClassName (Melder_peek8to32 (klas.peek()), & elementFormatVersion).releaseToAmbiguousOwner(); my size ++; if (! Thing_isa (my at [i], classDaata) || ! Data_canReadBinary (my at [i])) Melder_throw (U"Objects of class ", Thing_className (my at [i]), U" cannot be read."); autostring32 name = bingetw2 (f); if (Melder_debug == 44) Melder_casual (U"structCollection :: v_readBinary: Reading object with name ", name.peek()); Thing_setName (my at [i], name.peek()); Data_readBinary (my at [i], f, elementFormatVersion); } } }
Any _Data_copy (Data me) { try { if (me == NULL) return NULL; autoData thee = (Data) _Thing_new (my classInfo); my v_copy (thee.peek()); Thing_setName (thee.peek(), my name); return thee.transfer(); } catch (MelderError) { Melder_throw (me, ": not copied."); } }
autoDaata _Data_copy (Daata me) { try { if (! me) return autoDaata(); autoDaata thee = Thing_newFromClass (my classInfo).static_cast_move <structDaata> (); my v_copy (thee.peek()); Thing_setName (thee.peek(), my name); return thee; } catch (MelderError) { Melder_throw (me, U": not copied."); } }
Daata _Data_copy (Daata me) { try { if (! me) return nullptr; autoDaata thee = static_cast <Daata> (Thing_newFromClass (my classInfo)); my v_copy (thee.peek()); Thing_setName (thee.peek(), my name); return thee.transfer(); } catch (MelderError) { Melder_throw (me, U": not copied."); } }
void TextGrid_setTierName (TextGrid me, long itier, const char32 *newName) { try { long ntiers = my tiers -> size; if (itier < 1 || itier > ntiers) Melder_throw (U"Tier number (", itier, U") should not be " U"larger than the number of tiers (", ntiers, U")."); Thing_setName ( (Thing) my tiers -> item [itier], newName); } catch (MelderError) { Melder_throw (me, U": tier name not set."); } }
autoAutosegment Autosegment_create (double tmin, double tmax, const char32 *label) { try { autoAutosegment me = Thing_new (Autosegment); Function_init (me.peek(), tmin, tmax); if (label) { Thing_setName (me.peek(), label); } return me; } catch (MelderError) { Melder_throw (U"Autosegment not created."); } }
autoExcitation Excitations_getItem (Excitations me, long item) { try { if (item < 1 || item > my size) { Melder_throw (U"Not a valid element number."); } autoExcitation thee = Data_copy ( (Excitation) my item[item]); Thing_setName (thee.peek(), Thing_getName ( (Thing) my item[item])); return thee; } catch (MelderError) { Melder_throw (me, U": no Excitation created."); } }
void Discriminant_setGroupLabels (Discriminant me, Strings thee) { if (my numberOfGroups != thy numberOfStrings) Melder_throw (U"The number of strings must equal the number of groups."); for (long i = 1; i <= my numberOfGroups; i++) { const char32 *noname = U"", *name; name = thy strings[i]; if (name == 0) { name = noname; } Thing_setName ( (Thing) my groups -> item[i], name); } }
Collection FFNet_createIrisExample (long numberOfHidden1, long numberOfHidden2) { TableOfReal iris = NULL; Collection c = NULL; FFNet me = NULL; Pattern thee = NULL; Categories him = NULL, uniq = NULL; long i, j; MelderString ffnetname = { 0 }; if (! (c = Collection_create (classData, 3)) || ! (uniq = Categories_sequentialNumbers (3)) || ! (me = FFNet_create (4, numberOfHidden1, numberOfHidden2, 3, 0)) || ! FFNet_setOutputCategories (me, uniq) || ! Collection_addItem (c, me) || ! (iris = TableOfReal_createIrisDataset ()) || ! TableOfReal_to_Pattern_and_Categories (iris, 0, 0, 0, 0, &thee, &him) || ! Collection_addItem (c, thee) || ! Collection_addItem (c, him)) goto end; /* Scale data to interval [0-1] */ for (i = 1; i <= 150; i++) { for (j = 1; j <= 4; j++) thy z[i][j] /= 10.0; } FFNet_createNameFromTopology (me, &ffnetname); Thing_setName (me, ffnetname.string); Thing_setName (thee, L"iris"); Thing_setName (him, L"iris"); MelderString_free (&ffnetname); end: forget (uniq); forget (iris); if (! Melder_hasError()) return c; forget (c); return NULL; }
Collection TextGrid_Sound_extractAllIntervals (TextGrid me, Sound sound, long tierNumber, int preserveTimes) { try { IntervalTier tier = TextGrid_checkSpecifiedTierIsIntervalTier (me, tierNumber); autoCollection collection = Collection_create (NULL, tier -> intervals -> size); for (long iseg = 1; iseg <= tier -> intervals -> size; iseg ++) { TextInterval segment = (TextInterval) tier -> intervals -> item [iseg]; autoSound interval = Sound_extractPart (sound, segment -> xmin, segment -> xmax, kSound_windowShape_RECTANGULAR, 1.0, preserveTimes); Thing_setName (interval.peek(), segment -> text ? segment -> text : L"untitled"); Collection_addItem (collection.peek(), interval.transfer()); } return collection.transfer(); } catch (MelderError) { Melder_throw (me, " & ", sound, ": intervals not extracted."); } }
autoSoundList TextGrid_Sound_extractAllIntervals (TextGrid me, Sound sound, long tierNumber, bool preserveTimes) { try { IntervalTier tier = TextGrid_checkSpecifiedTierIsIntervalTier (me, tierNumber); autoSoundList list = SoundList_create (); for (long iseg = 1; iseg <= tier -> intervals.size; iseg ++) { TextInterval segment = tier -> intervals.at [iseg]; autoSound interval = Sound_extractPart (sound, segment -> xmin, segment -> xmax, kSound_windowShape_RECTANGULAR, 1.0, preserveTimes); Thing_setName (interval.get(), segment -> text ? segment -> text : U"untitled"); list -> addItem_move (interval.move()); } return list; } catch (MelderError) { Melder_throw (me, U" & ", sound, U": intervals not extracted."); } }
autoCollection TextGrid_Sound_extractAllIntervals (TextGrid me, Sound sound, long tierNumber, int preserveTimes) { try { IntervalTier tier = TextGrid_checkSpecifiedTierIsIntervalTier (me, tierNumber); autoCollection collection = Collection_create (nullptr, tier -> numberOfIntervals ()); for (long iseg = 1; iseg <= tier -> numberOfIntervals (); iseg ++) { TextInterval segment = tier -> interval (iseg); autoSound interval = Sound_extractPart (sound, segment -> xmin, segment -> xmax, kSound_windowShape_RECTANGULAR, 1.0, preserveTimes); Thing_setName (interval.peek(), segment -> text ? segment -> text : U"untitled"); Collection_addItem_move (collection.peek(), interval.move()); } return collection; } catch (MelderError) { Melder_throw (me, U" & ", sound, U": intervals not extracted."); } }
static void menu_cb_ExtractSelectedSoundForOverlap (TimeSoundEditor me, EDITOR_ARGS_FORM) { EDITOR_FORM (U"Extract selected sound for overlap)", nullptr) WORD (U"Name", U"slice") POSITIVE (U"Overlap (s)", my default_extract_overlap ()) EDITOR_OK SET_REAL (U"Overlap", my pref_extract_overlap ()) EDITOR_DO Sound sound = my d_sound.data; Melder_assert (sound); my pref_extract_overlap () = GET_REAL (U"Overlap"); autoSound extract = Sound_extractPartForOverlap (sound, my d_startSelection, my d_endSelection, my pref_extract_overlap ()); Thing_setName (extract.peek(), GET_STRING (U"Name")); Editor_broadcastPublication (me, extract.transfer()); EDITOR_END }
Collection TextGrid_Sound_extractNonemptyIntervals (TextGrid me, Sound sound, long tierNumber, int preserveTimes) { try { IntervalTier tier = TextGrid_checkSpecifiedTierIsIntervalTier (me, tierNumber); autoCollection collection = Collection_create (NULL, tier -> numberOfIntervals ()); for (long iseg = 1; iseg <= tier -> numberOfIntervals (); iseg ++) { TextInterval segment = tier -> interval (iseg); if (segment -> text != NULL && segment -> text [0] != '\0') { autoSound interval = Sound_extractPart (sound, segment -> xmin, segment -> xmax, kSound_windowShape_RECTANGULAR, 1.0, preserveTimes); Thing_setName (interval.peek(), segment -> text ? segment -> text : L"untitled"); Collection_addItem (collection.peek(), interval.transfer()); } } if (collection -> size == 0) Melder_warning (L"No non-empty intervals were found."); return collection.transfer(); } catch (MelderError) { Melder_throw (me, " & ", sound, ": non-empty intervals not extracted."); } }
autoScriptEditor ScriptEditor_createFromScript_canBeNull (Editor environment, Script script) { try { for (long ieditor = 1; ieditor <= theReferencesToAllOpenScriptEditors.size; ieditor ++) { ScriptEditor editor = theReferencesToAllOpenScriptEditors.at [ieditor]; if (MelderFile_equal (& script -> file, & editor -> file)) { Editor_raise (editor); Melder_appendError (U"The script ", & script -> file, U" is already open and has been moved to the front."); if (editor -> dirty) Melder_appendError (U"Choose \"Reopen from disk\" if you want to revert to the old version."); Melder_flushError (); return autoScriptEditor(); // safe null } } autostring32 text = MelderFile_readText (& script -> file); autoScriptEditor me = ScriptEditor_createFromText (environment, text.peek()); MelderFile_copy (& script -> file, & my file); Thing_setName (me.peek(), Melder_fileToPath (& script -> file)); return me; } catch (MelderError) { Melder_throw (U"Script window not created."); } }
autoSoundList TextGrid_Sound_extractIntervalsWhere (TextGrid me, Sound sound, long tierNumber, int comparison_Melder_STRING, const char32 *text, bool preserveTimes) { try { IntervalTier tier = TextGrid_checkSpecifiedTierIsIntervalTier (me, tierNumber); autoSoundList list = SoundList_create (); long count = 0; for (long iseg = 1; iseg <= tier -> intervals.size; iseg ++) { TextInterval segment = tier -> intervals.at [iseg]; if (Melder_stringMatchesCriterion (segment -> text, comparison_Melder_STRING, text)) { autoSound interval = Sound_extractPart (sound, segment -> xmin, segment -> xmax, kSound_windowShape_RECTANGULAR, 1.0, preserveTimes); Thing_setName (interval.get(), Melder_cat (sound -> name ? sound -> name : U"", U"_", text, U"_", ++ count)); list -> addItem_move (interval.move()); } } if (list->size == 0) Melder_warning (U"No label that ", kMelder_string_getText (comparison_Melder_STRING), U" the text \"", text, U"\" was found."); return list; } catch (MelderError) { Melder_throw (me, U" & ", sound, U": intervals not extracted."); } }
static void menu_cb_ExtractSelectedSound_windowed (TimeSoundEditor me, EDITOR_ARGS_FORM) { EDITOR_FORM (U"Extract selected sound (windowed)", nullptr) WORD (U"Name", U"slice") OPTIONMENU_ENUM (U"Window shape", kSound_windowShape, my default_extract_windowShape ()) POSITIVE (U"Relative width", my default_extract_relativeWidth ()) BOOLEAN (U"Preserve times", my default_extract_preserveTimes ()) EDITOR_OK SET_ENUM (U"Window shape", kSound_windowShape, my pref_extract_windowShape ()) SET_REAL (U"Relative width", my pref_extract_relativeWidth ()) SET_INTEGER (U"Preserve times", my pref_extract_preserveTimes ()) EDITOR_DO Sound sound = my d_sound.data; Melder_assert (sound); my pref_extract_windowShape () = GET_ENUM (kSound_windowShape, U"Window shape"); my pref_extract_relativeWidth () = GET_REAL (U"Relative width"); my pref_extract_preserveTimes () = GET_INTEGER (U"Preserve times"); autoSound extract = Sound_extractPart (sound, my d_startSelection, my d_endSelection, my pref_extract_windowShape (), my pref_extract_relativeWidth (), my pref_extract_preserveTimes ()); Thing_setName (extract.peek(), GET_STRING (U"Name")); Editor_broadcastPublication (me, extract.transfer()); EDITOR_END }
static void openDocument (TextEditor me, MelderFile file) { if (theOpenTextEditors) { for (long ieditor = 1; ieditor <= theOpenTextEditors -> size; ieditor ++) { TextEditor editor = (TextEditor) theOpenTextEditors -> item [ieditor]; if (editor != me && MelderFile_equal (file, & editor -> file)) { Editor_raise (editor); Melder_appendError (U"Text file ", file, U" is already open."); forget (me); // don't forget me before Melder_appendError, because "file" is owned by one of my dialogs Melder_flushError (); return; } } } autostring32 text = MelderFile_readText (file); GuiText_setString (my textWidget, text.peek()); /* * GuiText_setString has invoked the changeCallback, * which has set `my dirty` to `true`. Fix this. */ my dirty = false; MelderFile_copy (file, & my file); Thing_setName (me, Melder_fileToPath (file)); }
ScriptEditor ScriptEditor_createFromScript (Editor environment, Script script) { try { if (theScriptEditors) { for (long ieditor = 1; ieditor <= theScriptEditors -> size; ieditor ++) { ScriptEditor editor = (ScriptEditor) theScriptEditors -> item [ieditor]; if (MelderFile_equal (& script -> file, & editor -> file)) { editor -> raise (); Melder_error_ ("The script ", & script -> file, " is already open and has been moved to the front."); if (editor -> dirty) Melder_error_ ("Choose \"Reopen from disk\" if you want to revert to the old version."); Melder_flushError (NULL); return NULL; // safe NULL } } } autostring text = MelderFile_readText (& script -> file); autoScriptEditor me = ScriptEditor_createFromText (environment, text.peek()); MelderFile_copy (& script -> file, & my file); Thing_setName (me.peek(), Melder_fileToPath (& script -> file)); return me.transfer(); } catch (MelderError) { Melder_throw ("Script window not created."); } }
Collection TextGrid_Sound_extractIntervalsWhere (TextGrid me, Sound sound, long tierNumber, int comparison_Melder_STRING, const wchar_t *text, int preserveTimes) { try { IntervalTier tier = TextGrid_checkSpecifiedTierIsIntervalTier (me, tierNumber); autoCollection collection = Collection_create (NULL, tier -> intervals -> size); long count = 0; for (long iseg = 1; iseg <= tier -> intervals -> size; iseg ++) { TextInterval segment = (TextInterval) tier -> intervals -> item [iseg]; if (Melder_stringMatchesCriterion (segment -> text, comparison_Melder_STRING, text)) { autoSound interval = Sound_extractPart (sound, segment -> xmin, segment -> xmax, kSound_windowShape_RECTANGULAR, 1.0, preserveTimes); wchar_t name [1000]; swprintf (name, 1000, L"%ls_%ls_%ld", sound -> name ? sound -> name : L"", text, ++ count); Thing_setName (interval.peek(), name); Collection_addItem (collection.peek(), interval.transfer()); } } if (collection -> size == 0) Melder_warning ("No label that ", kMelder_string_getText (comparison_Melder_STRING), " the text \"", text, "\" was found."); return collection.transfer(); } catch (MelderError) { Melder_throw (me, " & ", sound, ": intervals not extracted."); } }
int Praat_tests (int itest, char32 *arg1, char32 *arg2, char32 *arg3, char32 *arg4) { int64 n = Melder_atoi (arg1); double t = 0.0; (void) arg1; (void) arg2; (void) arg3; (void) arg4; Melder_clearInfo (); Melder_stopwatch (); switch (itest) { case kPraatTests_TIME_RANDOM_FRACTION: { for (int64 i = 1; i <= n; i ++) (void) NUMrandomFraction (); t = Melder_stopwatch (); } break; case kPraatTests_TIME_RANDOM_GAUSS: { for (int64 i = 1; i <= n; i ++) (void) NUMrandomGauss (0.0, 1.0); t = Melder_stopwatch (); } break; case kPraatTests_TIME_SORT: { long m = Melder_atoi (arg2); long *array = NUMvector <long> (1, m); for (int64 i = 1; i <= m; i ++) array [i] = NUMrandomInteger (1, 100); Melder_stopwatch (); for (int64 i = 1; i <= n; i ++) NUMsort_l (m, array); t = Melder_stopwatch (); NUMvector_free (array, 1); } break; case kPraatTests_TIME_INTEGER: { int64 sum = 0; for (int64 i = 1; i <= n; i ++) sum += i * (i - 1) * (i - 2); t = Melder_stopwatch (); MelderInfo_writeLine (sum); } break; case kPraatTests_TIME_FLOAT: { double sum = 0.0, fn = n; for (double fi = 1.0; fi <= fn; fi = fi + 1.0) sum += fi * (fi - 1.0) * (fi - 2.0); t = Melder_stopwatch (); MelderInfo_writeLine (sum); } break; case kPraatTests_TIME_FLOAT_TO_UNSIGNED_BUILTIN: { uint64_t sum = 0; double fn = n; for (double fi = 1.0; fi <= fn; fi = fi + 1.0) sum += (uint32) fi; t = Melder_stopwatch (); // 2.59 // 1.60 MelderInfo_writeLine (sum); } break; case kPraatTests_TIME_FLOAT_TO_UNSIGNED_EXTERN: { uint64_t sum = 0; double fn = n; for (double fi = 1.0; fi <= fn; fi = fi + 1.0) sum += (uint32) ((int32) (fi - 2147483648.0) + 2147483647L + 1); t = Melder_stopwatch (); // 1.60 MelderInfo_writeLine (sum); } break; case kPraatTests_TIME_UNSIGNED_TO_FLOAT_BUILTIN: { double sum = 0.0; uint32 nu = (uint32) n; for (uint32 iu = 1; iu <= nu; iu ++) sum += (double) iu; t = Melder_stopwatch (); // 1.35 MelderInfo_writeLine (sum); } break; case kPraatTests_TIME_UNSIGNED_TO_FLOAT_EXTERN: { double sum = 0.0; uint32 nu = (uint32) n; for (uint32 iu = 1; iu <= nu; iu ++) sum += (double) (int32) (iu - 2147483647L - 1) + 2147483648.0; t = Melder_stopwatch (); // 0.96 MelderInfo_writeLine (sum); } break; case kPraatTests_TIME_STRING_MELDER_32: { autoMelderString string; char32 word [] { U"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { MelderString_copy (& string, word); for (int j = 1; j <= 30; j ++) MelderString_append (& string, word); } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_MELDER_32_ALLOC: { char32 word [] { U"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { autoMelderString string; MelderString_copy (& string, word); for (int j = 1; j <= 30; j ++) MelderString_append (& string, word); } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_CPP_S: { std::string s = ""; char word [] { "abc" }; word [2] = (char) NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { s = word; for (int j = 1; j <= 30; j ++) s += word; } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_CPP_C: { std::basic_string<char> s = ""; char word [] { "abc" }; word [2] = (char) NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { s = word; for (int j = 1; j <= 30; j ++) s += word; } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_CPP_WS: { std::wstring s = L""; wchar_t word [] { L"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { s = word; for (int j = 1; j <= 30; j ++) s += word; } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_CPP_WC: { std::basic_string<wchar_t> s = L""; wchar_t word [] { L"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { s = word; for (int j = 1; j <= 30; j ++) s += word; } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_CPP_32: { std::basic_string<char32_t> s = U""; char32 word [] { U"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { s = word; for (int j = 1; j <= 30; j ++) s += word; } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRING_CPP_U32STRING: { std::u32string s = U""; char32 word [] { U"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { s = word; for (int j = 1; j <= 30; j ++) s += word; } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STRCPY: { char buffer [100]; char word [] { "abc" }; word [2] = (char) NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { strcpy (buffer, word); for (int j = 1; j <= 30; j ++) strcpy (buffer + strlen (buffer), word); } t = Melder_stopwatch (); MelderInfo_writeLine (Melder_peek8to32 (buffer)); } break; case kPraatTests_TIME_WCSCPY: { wchar_t buffer [100]; wchar_t word [] { L"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { wcscpy (buffer, word); for (int j = 1; j <= 30; j ++) wcscpy (buffer + wcslen (buffer), word); } t = Melder_stopwatch (); } break; case kPraatTests_TIME_STR32CPY: { char32 buffer [100]; char32 word [] { U"abc" }; word [2] = NUMrandomInteger ('a', 'z'); for (int64 i = 1; i <= n; i ++) { str32cpy (buffer, word); for (int j = 1; j <= 30; j ++) str32cpy (buffer + str32len (buffer), word); } t = Melder_stopwatch (); MelderInfo_writeLine (buffer); } break; case kPraatTests_TIME_GRAPHICS_TEXT_TOP: { autoPraatPicture picture; for (int64 i = 1; i <= n; i ++) { Graphics_textTop (GRAPHICS, false, U"hello world"); } t = Melder_stopwatch (); } break; case kPraatTests_THING_AUTO: { int numberOfThingsBefore = theTotalNumberOfThings; { Melder_casual (U"1\n"); autoDaata data = Thing_new (Daata); Thing_setName (data.get(), U"hello"); Melder_casual (U"2\n"); testData (data.get()); testAutoData (data.move()); autoDaata data18 = Thing_new (Daata); testAutoData (data18.move()); fprintf (stderr, "3\n"); autoDaata data2 = newAutoData (); fprintf (stderr, "4\n"); autoDaata data3 = newAutoData (); fprintf (stderr, "5\n"); //data2 = data; // disabled l-value copy assignment from same class fprintf (stderr, "6\n"); autoOrdered ordered = Thing_new (Ordered); fprintf (stderr, "7\n"); //data = ordered; // disabled l-value copy assignment from subclass data = ordered.move(); //ordered = data; // disabled l-value copy assignment from superclass //ordered = data.move(); // assignment from superclass to subclass is rightfully refused by compiler fprintf (stderr, "8\n"); data2 = newAutoData (); fprintf (stderr, "8a\n"); autoDaata data5 = newAutoData (); fprintf (stderr, "8b\n"); data2 = data5.move(); fprintf (stderr, "9\n"); //ordered = data; // rightfully refused by compiler fprintf (stderr, "10\n"); //autoOrdered ordered2 = Thing_new (Daata); // rightfully refused by compiler fprintf (stderr, "11\n"); autoDaata data4 = Thing_new (Ordered); // constructor fprintf (stderr, "12\n"); //autoDaata data6 = data4; // disabled l-value copy constructor from same class fprintf (stderr, "13\n"); autoDaata data7 = data4.move(); fprintf (stderr, "14\n"); autoOrdered ordered3 = Thing_new (Ordered); autoDaata data8 = ordered3.move(); fprintf (stderr, "15\n"); //autoDaata data9 = ordered; // disabled l-value copy constructor from subclass fprintf (stderr, "16\n"); autoDaata data10 = data7.move(); fprintf (stderr, "17\n"); autoDaata data11 = Thing_new (Daata); // constructor, move assignment, null destructor fprintf (stderr, "18\n"); data11 = Thing_new (Ordered); fprintf (stderr, "19\n"); testAutoDataRef (data11); fprintf (stderr, "20\n"); //data11 = nullptr; // disabled implicit assignment of pointer to autopointer fprintf (stderr, "21\n"); } int numberOfThingsAfter = theTotalNumberOfThings; fprintf (stderr, "Number of things: before %d, after %d\n", numberOfThingsBefore, numberOfThingsAfter); #if 1 MelderCallback<void,structDaata>::FunctionType f; typedef void (*DataFunc) (Daata); typedef void (*OrderedFunc) (Ordered); DataFunc dataFun; OrderedFunc orderedFun; MelderCallback<void,structDaata> dataFun2 (dataFun); MelderCallback<void,structOrdered> orderedFun2 (orderedFun); MelderCallback<void,structDaata> dataFun3 (orderedFun); //MelderCallback<void,structOrdered> orderedFun3 (dataFun); // rightfully refused by compiler autoDaata data = Thing_new (Daata); dataFun3 (data.get()); #endif } break; } MelderInfo_writeLine (Melder_single (t / n * 1e9), U" nanoseconds"); MelderInfo_close (); return 1; }
TextGrid TextGrid_readFromTIMITLabelFile (MelderFile file, int phnFile) { try { double dt = 1.0 / 16000; /* 1 / (TIMIT samplingFrequency) */ double xmax = dt; autofile f = Melder_fopen (file, "r"); // Ending time will only be known after all labels have been read. // We start with a sufficiently long duration (one hour) and correct this later. autoTextGrid me = TextGrid_create (0, 3600, U"wrd", 0); IntervalTier timit = (IntervalTier) my tiers -> item[1]; long linesRead = 0; char line[200], label[200]; while (fgets (line, 199, f)) { long it1, it2; linesRead++; if (sscanf (line, "%ld%ld%s", &it1, &it2, label) != 3) { Melder_throw (U"Incorrect number of items."); } if (it1 < 0 || it2 <= it1) { Melder_throw (U"Incorrect time at line ", linesRead); } xmax = it2 * dt; double xmin = it1 * dt; long ni = timit -> intervals -> size - 1; if (ni < 1) { ni = 1; // Some files do not start with a first line "0 <number2> h#". // Instead they start with "<number1> <number2> h#", where number1 > 0. // We override number1 with 0. */ if (xmin > 0 && phnFile) { xmin = 0; } } TextInterval interval = (TextInterval) timit -> intervals -> item[ni]; if (xmin < interval -> xmax && linesRead > 1) { xmin = interval -> xmax; Melder_warning (U"File \"", MelderFile_messageName (file), U"\": Start time set to previous end " U"time for label at line ", linesRead, U"."); } // standard: new TextInterval const char *labelstring = (strncmp (label, "h#", 2) ? label : TIMIT_DELIMITER); IntervalTier_add (timit, xmin, xmax, Melder_peek8to32 (labelstring)); } // Now correct the end times, based on last read interval. // (end time was set to large value!) if (timit -> intervals -> size < 2) { Melder_throw (U"Empty TextGrid"); } Collection_removeItem (timit -> intervals, timit -> intervals -> size); TextInterval interval = (TextInterval) timit -> intervals -> item[timit -> intervals -> size]; timit -> xmax = interval -> xmax; my xmax = xmax; if (phnFile) { // Create tier 2 with IPA symbols autoIntervalTier ipa = Data_copy (timit); Thing_setName (ipa.peek(), U"ipa"); // First change the data in ipa for (long i = 1; i <= ipa -> intervals -> size; i++) { interval = (TextInterval) timit -> intervals -> item[i]; TextInterval_setText ( (TextInterval) ipa -> intervals -> item[i], Melder_peek8to32 (timitLabelToIpaLabel (Melder_peek32to8 (interval -> text)))); } Collection_addItem (my tiers, ipa.transfer()); // Then: add to collection Thing_setName (timit, U"phn"); // rename wrd } f.close (file); return me.transfer(); } catch (MelderError) { Melder_throw (U"TextGrid not read from file ", file, U"."); } }
void structAutosegment :: v_copy (Daata thee_Daata) { Autosegment thee = static_cast <Autosegment> (thee_Daata); Autosegment_Parent :: v_copy (thee); if (name) Thing_setName (thee, name); }