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."); } }
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."); } }