1 /* praat_KlattGrid_init.cpp
2 *
3 * Copyright (C) 2009-2021 David Weenink
4 *
5 * This code is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or (at
8 * your option) any later version.
9 *
10 * This code is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this work. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 /*
20 djmw 20090420
21 */
22
23 #include "IntensityTierEditor.h"
24 #include "KlattGridEditors.h"
25 #include "KlattTable.h"
26
27 #include "praat_TimeFunction.h"
28
29 /******************* KlattGrid *********************************/
30
31 #define KlattGrid_4formants_addCommonField(formantType) \
32 OPTIONMENU_ENUM (kKlattGridFormantType, formantType, U"Formant type", kKlattGridFormantType::DEFAULT)
33
34 #define KlattGrid_6formants_addCommonField(formantType) \
35 OPTIONMENU_ENUM (kKlattGridFormantType, formantType, U"Formant type", kKlattGridFormantType::DEFAULT)
36
37
38 #define KlattGrid_PhonationGridPlayOptions_addCommonFields(useVoicing,useFlutter,useDoublePulsing,useCollisionPhase,useSpectralTilt,flowFunctionType,useFlowDerivative,useAspiration,useBreathiness) \
39 BOOLEAN (useVoicing, U"Voicing", true) \
40 BOOLEAN (useFlutter, U"Flutter", true) \
41 BOOLEAN (useDoublePulsing, U"Double pulsing", true) \
42 BOOLEAN (useCollisionPhase, U"Collision phase", true) \
43 BOOLEAN (useSpectralTilt, U"Spectral tilt", true) \
44 OPTIONMENU (flowFunctionType, U"Flow function", 1) \
45 OPTION (U"Powers in tiers") \
46 OPTION (U"t^2-t^3") \
47 OPTION (U"t^3-t^4") \
48 BOOLEAN (useFlowDerivative, U"Flow derivative", true) \
49 BOOLEAN (useAspiration, U"Aspiration", true) \
50 BOOLEAN (useBreathiness, U"Breathiness", true)
51
KlattGrid_PhonationGridPlayOptions(KlattGrid me,int useVoicing,int useFlutter,int useDoublePulsing,int useCollisionPhase,int useSpectralTilt,int flowFunctionType,int useFlowDerivative,int useAspiration,int useBreathiness)52 static void KlattGrid_PhonationGridPlayOptions (KlattGrid me, int useVoicing, int useFlutter, int useDoublePulsing,
53 int useCollisionPhase, int useSpectralTilt, int flowFunctionType, int useFlowDerivative, int useAspiration, int useBreathiness)
54 {
55 PhonationGridPlayOptions pp = my phonation -> options.get();
56 pp -> voicing = useVoicing;
57 pp -> flutter = useFlutter;
58 pp -> doublePulsing = useDoublePulsing;
59 pp -> collisionPhase = useCollisionPhase;
60 pp -> spectralTilt = useSpectralTilt;
61 pp -> flowFunction = flowFunctionType;
62 pp -> flowDerivative = useFlowDerivative;
63 pp -> aspiration = useAspiration;
64 pp -> breathiness = useBreathiness;
65 }
66
67 #define KlattGrid_formantSelection_vocalTract_commonFields(filterModel,fromOralFormant,toOralFormant,fromNasalFormant,toNasalFormant,fromNasalAntiFormant,toNasalAntiFormant) \
68 OPTIONMENU_ENUM (kKlattGridFilterModel, filterModel, U"Filter model", kKlattGridFilterModel::DEFAULT) \
69 INTEGER (fromOralFormant, U"left Oral formant range", U"1") \
70 INTEGER (toOralFormant, U"right Oral formant range", U"5") \
71 INTEGER (fromNasalFormant, U"left Nasal formant range", U"1") \
72 INTEGER (toNasalFormant, U"right Nasal formant range", U"1") \
73 INTEGER (fromNasalAntiFormant, U"left Nasal antiformant range", U"1") \
74 INTEGER (toNasalAntiFormant, U"right Nasal antiformant range", U"1")
75
KlattGrid_formantSelection_vocalTract(KlattGrid me,kKlattGridFilterModel filterModel,integer fromOralFormant,integer toOralFormant,integer fromNasalFormant,integer toNasalFormant,integer fromNasalAntiFormant,integer toNasalAntiFormant)76 static void KlattGrid_formantSelection_vocalTract (KlattGrid me, kKlattGridFilterModel filterModel, integer fromOralFormant,
77 integer toOralFormant, integer fromNasalFormant, integer toNasalFormant, integer fromNasalAntiFormant, integer toNasalAntiFormant)
78 {
79 VocalTractGridPlayOptions pv = my vocalTract -> options.get();
80 pv -> filterModel = filterModel;
81 pv -> startOralFormant = fromOralFormant;
82 pv -> endOralFormant = toOralFormant;
83 pv -> startNasalFormant = fromNasalFormant;
84 pv -> endNasalFormant = toNasalFormant;
85 pv -> startNasalAntiFormant = fromNasalAntiFormant;
86 pv -> endNasalAntiFormant = toNasalAntiFormant;
87 }
88
89 #define KlattGrid_formantSelection_coupling_commonFields(fromTrachealFormant,toTrachealFormant,fromTrachealAntiFormant,toTrachealAntiFormant,fromDeltaFormant,toDeltaFormant,fromDeltaBandwidth,toDeltaBandwidth) \
90 INTEGER (fromTrachealFormant, U"left Tracheal formant range", U"1") \
91 INTEGER (toTrachealFormant, U"right Tracheal formant range", U"1") \
92 INTEGER (fromTrachealAntiFormant, U"left Tracheal antiformant range", U"1") \
93 INTEGER (toTrachealAntiFormant, U"right Tracheal antiformant range", U"1") \
94 INTEGER (fromDeltaFormant, U"left Delta formant range", U"1") \
95 INTEGER (toDeltaFormant, U"right Delta formant range", U"1") \
96 INTEGER (fromDeltaBandwidth, U"left Delta bandwidth range", U"1") \
97 INTEGER (toDeltaBandwidth, U"right Delta bandwidth range", U"1")
98
KlattGrid_formantSelection_coupling(KlattGrid me,integer fromTrachealFormant,integer toTrachealFormant,integer fromTrachealAntiFormant,integer toTrachealAntiFormant,integer fromDeltaFormant,integer toDeltaFormant,integer fromDeltaBandwidth,integer toDeltaBandwidth)99 static void KlattGrid_formantSelection_coupling (KlattGrid me, integer fromTrachealFormant, integer toTrachealFormant,
100 integer fromTrachealAntiFormant, integer toTrachealAntiFormant, integer fromDeltaFormant, integer toDeltaFormant,
101 integer fromDeltaBandwidth, integer toDeltaBandwidth)
102 {
103 CouplingGridPlayOptions pc = my coupling -> options.get();
104 pc -> startTrachealFormant = fromTrachealFormant;
105 pc -> endTrachealFormant = toTrachealFormant;
106 pc -> startTrachealAntiFormant = fromTrachealAntiFormant;
107 pc -> endTrachealAntiFormant = toTrachealAntiFormant;
108 pc -> startDeltaFormant = fromDeltaFormant;
109 pc -> endDeltaFormant = toDeltaFormant;
110 pc -> startDeltaBandwidth = fromDeltaBandwidth;
111 pc -> endDeltaFormant = toDeltaBandwidth;
112 }
113
114 #define KlattGrid_formantSelection_frication_commonFields(fromFricationFormant,toFricationFormant,useFricationBypass) \
115 INTEGER (fromFricationFormant, U"left Frication formant range", U"1") \
116 INTEGER (toFricationFormant, U"right Frication formant range", U"6") \
117 BOOLEAN (useFricationBypass, U"Frication bypass", true)
118
KlattGrid_formantSelection_frication(KlattGrid me,integer fromFricationFormant,integer toFricationFormant,int useFricationBypass)119 static void KlattGrid_formantSelection_frication (KlattGrid me, integer fromFricationFormant, integer toFricationFormant, int useFricationBypass) {
120 FricationGridPlayOptions pf = my frication -> options.get();
121 pf -> startFricationFormant = fromFricationFormant;
122 pf -> endFricationFormant = toFricationFormant;
123 pf -> bypass = useFricationBypass;
124 }
125
DIRECT(CREATE_ONE__KlattGrid_createExample)126 DIRECT (CREATE_ONE__KlattGrid_createExample) {
127 CREATE_ONE
128 autoKlattGrid result = KlattGrid_createExample();
129 CREATE_ONE_END (U"example")
130 }
131
132 FORM (CREATE_ONE__KlattGrid_createFromVowel, U"Create KlattGrid from vowel", U"Create KlattGrid from vowel...") {
133 WORD (name, U"Name", U"a")
134 POSITIVE (duration, U"Duration (s)", U"0.4")
135 POSITIVE (f0start, U"Pitch (Hz)", U"125.0")
136 REAL (f1, U"F1 (Hz)", U"800.0")
137 POSITIVE (b1, U"B1 (Hz)", U"50.0")
138 REAL (f2, U"F2 (Hz)", U"1200.0")
139 POSITIVE (b2, U"B2 (Hz)", U"50.0")
140 REAL (f3, U"F3 (Hz)", U"2300.0")
141 POSITIVE (b3, U"B3 (Hz)", U"100.0")
142 REAL (f4, U"F4 (Hz)", U"2800.0")
143 POSITIVE (bandWidthFraction, U"Bandwidth fraction", U"0.05")
144 REAL (formantFrequencyInterval, U"Formant frequency interval (Hz)", U"1000.0")
145 OK
146 DO
147 CREATE_ONE
148 autoKlattGrid result = KlattGrid_createFromVowel (duration, f0start, f1, b1, f2, b2, f3, b3, f4, bandWidthFraction, formantFrequencyInterval);
149 CREATE_ONE_END (name)
150 }
151
152 FORM (CREATE_ONE__KlattGrid_create, U"Create KlattGrid", U"Create KlattGrid...") {
153 WORD (name, U"Name", U"kg")
154 REAL (fromTime, U"Start time (s)", U"0.0")
155 REAL (toTime, U"End time (s)", U"1.0")
156 INTEGER (numberOfOralFormants, U"Number of oral formants", U"6")
157 INTEGER (numberOfNasalFormants, U"Number of nasal formants", U"1")
158 INTEGER (numberOfNasalAntiFormants, U"Number of nasal antiformants", U"1")
159 INTEGER (numberOfFricationFormants, U"Number of frication formants", U"6")
160 LABEL (U"Coupling between source and filter")
161 INTEGER (numberOfTrachealFormants, U"Number of tracheal formants", U"1")
162 INTEGER (numberOfTrachealAntiFormants, U"Number of tracheal antiformants", U"1")
163 INTEGER (numberOfDeltaFormants, U"Number of delta formants", U"1")
164 OK
165 DO
166 Melder_require (fromTime < toTime,
167 U"The start time must lie before the end time.");
168 Melder_require (numberOfOralFormants >= 0 && numberOfNasalFormants >= 0 && numberOfNasalAntiFormants >= 0
169 && numberOfTrachealFormants >= 0 && numberOfTrachealAntiFormants >= 0
170 && numberOfFricationFormants >= 0 && numberOfDeltaFormants >= 0,
171 U"No number of formants should be negative.");
172 CREATE_ONE
173 autoKlattGrid result = KlattGrid_create (fromTime, toTime, numberOfOralFormants, numberOfNasalFormants, numberOfNasalAntiFormants, numberOfTrachealFormants, numberOfTrachealAntiFormants, numberOfFricationFormants, numberOfDeltaFormants);
174 CREATE_ONE_END (name)
175 }
176
177 #define KlattGrid_INSTALL_TIER_EDITOR(Name) \
178 DIRECT (EDITOR_ONE_KlattGrid_edit##Name##Tier) { \
179 EDITOR_ONE (a,KlattGrid) \
180 autoKlattGrid_##Name##TierEditor editor = KlattGrid_##Name##TierEditor_create (ID_AND_FULL_NAME, me); \
181 EDITOR_ONE_END \
182 }
183
184 KlattGrid_INSTALL_TIER_EDITOR (Pitch)
KlattGrid_INSTALL_TIER_EDITOR(VoicingAmplitude)185 KlattGrid_INSTALL_TIER_EDITOR (VoicingAmplitude)
186 KlattGrid_INSTALL_TIER_EDITOR (Flutter)
187 KlattGrid_INSTALL_TIER_EDITOR (Power1)
188 KlattGrid_INSTALL_TIER_EDITOR (Power2)
189 KlattGrid_INSTALL_TIER_EDITOR (OpenPhase)
190 KlattGrid_INSTALL_TIER_EDITOR (CollisionPhase)
191 KlattGrid_INSTALL_TIER_EDITOR (DoublePulsing)
192 KlattGrid_INSTALL_TIER_EDITOR (AspirationAmplitude)
193 KlattGrid_INSTALL_TIER_EDITOR (BreathinessAmplitude)
194 KlattGrid_INSTALL_TIER_EDITOR (SpectralTilt)
195
196 KlattGrid_INSTALL_TIER_EDITOR (FricationBypass)
197 KlattGrid_INSTALL_TIER_EDITOR (FricationAmplitude)
198
199 #undef KlattGrid_INSTALL_TIER_EDITOR
200
201 #define KlattGRID_EDIT_FORMANTGRID(Name,formantType) \
202 DIRECT (EDITOR_ONE_KlattGrid_edit##Name##FormantGrid) { \
203 EDITOR_ONE (a,KlattGrid) \
204 conststring32 id_and_name = Melder_cat (ID, U". ", KlattGrid_getFormantName (formantType), U" grid"); \
205 autoKlattGrid_FormantGridEditor editor = KlattGrid_FormantGridEditor_create (id_and_name, me, formantType); \
206 EDITOR_ONE_END \
207 }
208
209 KlattGRID_EDIT_FORMANTGRID (Oral, kKlattGridFormantType::ORAL)
210 KlattGRID_EDIT_FORMANTGRID (Nasal, kKlattGridFormantType::NASAL)
211 KlattGRID_EDIT_FORMANTGRID (Tracheal, kKlattGridFormantType::TRACHEAL)
212 KlattGRID_EDIT_FORMANTGRID (NasalAnti, kKlattGridFormantType::NASAL_ANTI)
213 KlattGRID_EDIT_FORMANTGRID (TrachealAnti, kKlattGridFormantType::TRACHEALANTI)
214 KlattGRID_EDIT_FORMANTGRID (Delta, kKlattGridFormantType::DELTA)
215 KlattGRID_EDIT_FORMANTGRID (Frication, kKlattGridFormantType::FRICATION)
216
217 #undef KlattGRID_EDIT_FORMANTGRID
218
219 #define KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER(Name,name,formantType) \
220 FORM (EDITOR_ONE_KlattGrid_edit##Name##FormantAmplitudeTier, U"KlattGrid: View & Edit " #name " formant amplitude tier", nullptr) { \
221 NATURAL (formantNumber, U"Formant number", U"1") \
222 OK \
223 DO \
224 EDITOR_ONE (a,KlattGrid) \
225 OrderedOf<structIntensityTier>* amp = KlattGrid_getAddressOfAmplitudes (me, formantType); \
226 if (! amp) Melder_throw (U"Unknown formant type"); \
227 if (formantNumber > amp->size) Melder_throw (U"Formant number does not exist."); \
228 conststring32 id_and_name = Melder_cat (ID, U". ", KlattGrid_getFormantName (formantType), U" amplitude tier"); \
229 autoKlattGrid_DecibelTierEditor editor = KlattGrid_DecibelTierEditor_create (id_and_name, me, amp->at [formantNumber]); \
230 EDITOR_ONE_END \
231 }
232
233 KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER (Oral, oral, kKlattGridFormantType::ORAL)
234 KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER (Nasal, nasal, kKlattGridFormantType::NASAL)
235 KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER (Tracheal, tracheal, kKlattGridFormantType::TRACHEAL)
236 KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER (Frication, frication, kKlattGridFormantType::FRICATION)
237
238 #undef KlattGrid_EDIT_FORMANT_AMPLITUDE_TIER
239
240 #define KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE(Name,name,unit,default,requireCondition,requireMessage,newname,tiertype) \
241 FORM (QUERY_ONE_FOR_REAL__KlattGrid_get##Name##AtTime, U"KlattGrid: Get " #name " at time", nullptr) { \
242 REAL (time, U"Time", U"0.5") \
243 OK \
244 DO \
245 QUERY_ONE_FOR_REAL (KlattGrid) \
246 const double result = KlattGrid_get##Name##AtTime (me, time); \
247 QUERY_ONE_FOR_REAL_END (unit) \
248 } \
249 FORM (MODIFY_KlattGrid_add##Name##Point, U"KlattGrid: Add " #name " point", nullptr) { \
250 REAL (time, U"Time (s)", U"0.5") \
251 REAL (value, U"Value" unit, default) \
252 OK \
253 DO \
254 Melder_require (requireCondition, requireMessage); \
255 MODIFY_EACH (KlattGrid); \
256 KlattGrid_add##Name##Point (me, time, value); \
257 MODIFY_EACH_END \
258 } \
259 FORM (MODIFY_KlattGrid_remove##Name##Points, U"Remove " #name " points", nullptr) { \
260 REAL (fromTime, U"From time (s)", U"0.3") \
261 REAL (toTime, U"To time (s)", U"0.7") \
262 OK \
263 DO \
264 MODIFY_EACH (KlattGrid); \
265 KlattGrid_remove##Name##Points (me, fromTime, toTime); \
266 MODIFY_EACH_END \
267 } \
268 DIRECT (CONVERT_EACH_TO_ONE__KlattGrid_extract##Name##Tier) { \
269 CONVERT_EACH_TO_ONE (KlattGrid) \
270 autoDaata result = KlattGrid_extract##Name##Tier (me); \
271 CONVERT_EACH_TO_ONE_END (newname) \
272 } \
273 DIRECT (MODIFY_KlattGrid_replace##Name##Tier) { \
274 MODIFY_FIRST_OF_ONE_AND_ONE (KlattGrid, tiertype); \
275 KlattGrid_replace##Name##Tier (me, you); \
276 MODIFY_FIRST_OF_ONE_AND_ONE_END \
277 }
278
279 // 55 DO_KlattGrid... functions
280 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (Pitch, pitch, U" (Hz)", (U"100.0"),
281 (value >= 0.0), (U"Pitch should be greater equal zero."), U"f0", PitchTier)
282 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (VoicingAmplitude, voicing amplitude, U" (dB SPL)", U"90.0",
283 (1), U"", U"voicing", IntensityTier)
284 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (Flutter, flutter, U" (0..1)", (U"0.0"),
285 (value >= 0.0 && value <= 1.0), (U"Flutter should be in [0,1]."), U"flutter", RealTier)
286 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (Power1, power1, U"", U"3",
287 (value > 0.0), U"Power1 needs to be positive.", U"power1", RealTier)
288 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (Power2, power2, U"", U"4",
289 (value > 0.0), U"Power2 needs to be positive.", U"power2", RealTier)
290 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (OpenPhase, open phase, U"", U"0.7",
291 (value >= 0.0 && value <= 1.0), U"Open phase should be greater than zero and smaller equal one.", U"openPhase", RealTier)
292 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (CollisionPhase, collision phase, U"", U"0.03",
293 (value >= 0.0 && value < 1.0), U"Collision phase should be greater equal zero and smaller than one.", U"collisionPhase", RealTier)
294 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (DoublePulsing, double pulsing, U" (0..1)", U"0.0",
295 (value >= 0.0 && value <= 1.0), U"Double pulsing should be greater equal zero and smaller equal one.", U"doublePulsing", RealTier)
296 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (SpectralTilt, spectral tilt, U" (dB)", U"0.0",
297 (value >= 0.0), U"Spectral tilt should be greater equal zero.", U"spectralTilt", IntensityTier)
298 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (AspirationAmplitude, aspiration amplitude, U" (dB SPL)", U"0.0",
299 (true), U"", U"aspiration", IntensityTier)
300 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (BreathinessAmplitude, breathiness amplitude, U" (dB SPL)", U"30.0",
301 (true), U"", U"breathiness", IntensityTier)
302
303 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (FricationAmplitude, frication amplitude, U" (dB SPL)", U"30.0",
304 (true), U"", U"frication", IntensityTier)
305 KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE (FricationBypass, frication bypass, U" (dB)", U"30.0",
306 (true), U"", U"bypass", IntensityTier)
307
308 #undef KlattGrid_PHONATION_GET_ADD_REMOVE_EXTRACT_REPLACE
309
310 #define KlattGrid_FORMULA_FORMANT_FBA_VALUE(Name,namef,ForBs,forbs,textfield,formantType,label) \
311 FORM (MODIFY_KlattGrid_formula##Name##Formant##ForBs, U"KlattGrid: Formula (" #namef "ormant " #forbs ")", U"Formant: Formula (" #forbs ")...") { \
312 LABEL (U"row is formant number, col is point number:\nfor row from 1 to nrow do for col from 1 to ncol do " #ForBs " (row, col) :=") \
313 FORMULA (formula, U"Formula", textfield) \
314 OK \
315 DO \
316 MODIFY_EACH (KlattGrid); \
317 KlattGrid_formula_##forbs (me, formantType, formula, interpreter); \
318 MODIFY_EACH_END \
319 }
320
321 #define KlattGrid_ADD_FBA_VALUE(Name,namef,Form,FBA,fba,formantType,default,unit,requireCondition,requireMessage) \
322 FORM (MODIFY_KlattGrid_add##Name##Formant##FBA##Point, U"KlattGrid: Add " #namef "ormant " #fba " point", nullptr) { \
323 NATURAL (formantNumber, U"Formant number", U"1") \
324 REAL (time, U"Time (s)", U"0.5") \
325 REAL (value, U"Value " #unit, default) \
326 OK \
327 DO \
328 Melder_require (requireCondition, requireMessage); \
329 MODIFY_EACH (KlattGrid); \
330 KlattGrid_add##Form##Point (me, formantType, formantNumber, time, value); \
331 MODIFY_EACH_END \
332 }
333
334 #define KlattGrid_REMOVE_FBA_VALUE(Name,namef,Form,FBA,fba,formantType) \
335 FORM (MODIFY_KlattGrid_remove##Name##Formant##FBA##Points, U"KlattGrid: Remove " #namef "ormant " #fba " points", nullptr) { \
336 NATURAL (formantNumber, U"Formant number", U"1") \
337 REAL (fromTime, U"From time (s)", U"0.3")\
338 REAL (toTime, U"To time (s)", U"0.7") \
339 OK \
340 DO \
341 MODIFY_EACH (KlattGrid); \
342 KlattGrid_remove##Form##Points (me, formantType, formantNumber, fromTime, toTime); \
343 MODIFY_EACH_END \
344 }
345
346 #define KlattGrid_ADD_FORMANT(Name,namef,formantType) \
347 FORM (MODIFY_KlattGrid_add##Name##Formant, U"KlattGrid: Add " #namef "ormant", nullptr) { \
348 INTEGER (position, U"Position", U"0 (= at end)") \
349 OK \
350 DO \
351 MODIFY_EACH (KlattGrid); \
352 KlattGrid_addFormant (me, formantType, position); \
353 MODIFY_EACH_END \
354 }
355
356 #define KlattGrid_REMOVE_FORMANT(Name,namef,formantType) \
357 FORM (MODIFY_KlattGrid_remove##Name##Formant, U"KlattGrid: Remove " #namef "ormant", nullptr) { \
358 INTEGER (position, U"Position", U"0 (= do nothing)") \
359 OK \
360 DO \
361 MODIFY_EACH (KlattGrid); \
362 KlattGrid_removeFormant (me, formantType, position); \
363 MODIFY_EACH_END \
364 }
365
366 #define KlattGrid_ADD_FORMANT_FREQUENCYANDBANDWIDTHTIERS(Name,namef,formantType) \
367 FORM (MODIFY_KlattGrid_add##Name##FormantFrequencyAndBandwidthTiers, U"KlattGrid: Add " #namef "ormant", nullptr) { \
368 INTEGER (position, U"Position", U"0 (= at end)") \
369 OK \
370 DO \
371 MODIFY_EACH (KlattGrid); \
372 KlattGrid_addFormantFrequencyAndBandwidthTiers (me, formantType, position); \
373 MODIFY_EACH_END \
374 }
375
376 #define KlattGrid_REMOVE_FORMANT_FREQUENCYANDBANDWIDTHTIERS(Name,namef,formantType) \
377 FORM (MODIFY_KlattGrid_remove##Name##FormantFrequencyAndBandwidthTiers, U"KlattGrid: Remove " #namef "ormant", nullptr) { \
378 INTEGER (position, U"Position", U"0 (= at end)") \
379 OK \
380 DO \
381 MODIFY_EACH (KlattGrid); \
382 KlattGrid_removeFormantFrequencyAndBandwidthTiers (me, formantType, position); \
383 MODIFY_EACH_END \
384 }
385
386 #define KlattGrid_ADD_FORMANT_AMPLITUDETIER(Name,namef,formantType) \
387 FORM (MODIFY_KlattGrid_add##Name##FormantAmplitudeTier, U"KlattGrid: Add " #namef "ormant amplitude tier", nullptr) { \
388 INTEGER (position, U"Position", U"0 (= at end)") \
389 OK \
390 DO \
391 MODIFY_EACH (KlattGrid); \
392 KlattGrid_addFormantAmplitudeTier (me, formantType, position); \
393 MODIFY_EACH_END \
394 }
395
396 #define KlattGrid_REMOVE_FORMANT_AMPLITUDETIER(Name,namef,formantType) \
397 FORM (MODIFY_KlattGrid_remove##Name##FormantAmplitudeTier, U"KlattGrid: Remove " #namef "ormant amplitude tier", nullptr) { \
398 INTEGER (position, U"Position", U"0 (= at end)") \
399 OK \
400 DO \
401 MODIFY_EACH (KlattGrid); \
402 KlattGrid_removeFormant (me, formantType, position); \
403 MODIFY_EACH_END \
404 }
405
406
407 #define KlattGrid_FORMULA_ADD_REMOVE_FBA(Name,namef,formantType) \
408 KlattGrid_FORMULA_FORMANT_FBA_VALUE (Name, namef, Frequencies, frequencies, U"if row = 2 then self + 200 else self fi", formantType, U" ") \
409 KlattGrid_FORMULA_FORMANT_FBA_VALUE (Name, namef, Bandwidths, bandwidths, U"self / 10 ; 10% of frequency", formantType, U"Warning: self is formant frequency.") \
410 KlattGrid_ADD_FBA_VALUE (Name, namef, Formant, Frequency, frequency, formantType, U"500.0", (Hz), (value>0), U"Frequency should be greater than zero.") \
411 KlattGrid_ADD_FBA_VALUE (Name, namef, Bandwidth, Bandwidth, bandwidth, formantType, U"50.0", (Hz), (value>0), U"Bandwidth should be greater than zero.") \
412 KlattGrid_ADD_FBA_VALUE (Name, namef, Amplitude, Amplitude, amplitude, formantType, U"0.0", (dB), (isdefined(value)), U"Amplitude should be defined.") \
413 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Formant, Frequency, frequency, formantType) \
414 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Bandwidth, Bandwidth, bandwidth, formantType) \
415 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Amplitude, Amplitude, amplitude, formantType) \
416 KlattGrid_ADD_FORMANT (Name, namef, formantType) \
417 KlattGrid_ADD_FORMANT_FREQUENCYANDBANDWIDTHTIERS (Name, namef, formantType) \
418 KlattGrid_REMOVE_FORMANT_FREQUENCYANDBANDWIDTHTIERS (Name, namef, formantType) \
419 KlattGrid_REMOVE_FORMANT_AMPLITUDETIER (Name, namef, formantType) \
420 KlattGrid_REMOVE_FORMANT (Name, namef, formantType) \
421 KlattGrid_ADD_FORMANT_AMPLITUDETIER (Name, namef, formantType)
422
423
424 #define KlattGrid_FORMULA_ADD_REMOVE_FB(Name,namef,formantType) \
425 KlattGrid_FORMULA_FORMANT_FBA_VALUE (Name, namef, Frequencies, frequencies, U"if row = 2 then self + 200 else self fi",formantType, U" ") \
426 KlattGrid_FORMULA_FORMANT_FBA_VALUE (Name, namef, Bandwidths, bandwidths, U"self / 10 ; 10% of frequency",formantType, U"Warning: self is formant frequency.") \
427 KlattGrid_ADD_FBA_VALUE (Name, namef, Formant,Frequency, frequency, formantType, U"500.0", (Hz), (value>0), U"Frequency should be greater than zero.") \
428 KlattGrid_ADD_FBA_VALUE (Name, namef, Bandwidth, Bandwidth, bandwidth, formantType, U"50.0", (Hz), (value>0), U"Bandwidth should be greater than zero.") \
429 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Formant, Frequency, frequency, formantType) \
430 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Bandwidth, Bandwidth, bandwidth, formantType) \
431 KlattGrid_ADD_FORMANT(Name,namef,formantType) \
432 KlattGrid_ADD_FORMANT_FREQUENCYANDBANDWIDTHTIERS (Name, namef, formantType) \
433 KlattGrid_REMOVE_FORMANT_FREQUENCYANDBANDWIDTHTIERS (Name, namef, formantType) \
434 KlattGrid_REMOVE_FORMANT (Name, namef, formantType)
435
436 #define KlattGrid_FORMULA_ADD_REMOVE_FB_DELTA(Name,namef,formantType) \
437 KlattGrid_FORMULA_FORMANT_FBA_VALUE (Name, namef, Frequencies, frequencies, U"if row = 2 then self + 200 else self fi",formantType, U" ") \
438 KlattGrid_FORMULA_FORMANT_FBA_VALUE (Name, namef, Bandwidths, bandwidths, U"self / 10 ; 10% of frequency",formantType, U"Warning: self is formant frequency.") \
439 KlattGrid_ADD_FBA_VALUE (Name, namef, Formant,Frequency, frequency, formantType, U"-100.0", (Hz), (isdefined(value)), U"Frequency should be defined.") \
440 KlattGrid_ADD_FBA_VALUE (Name, namef, Bandwidth, Bandwidth, bandwidth, formantType, U"-50.0", (Hz), (isdefined(value)), U"Bandwidth should be defined.") \
441 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Formant, Frequency, frequency, formantType) \
442 KlattGrid_REMOVE_FBA_VALUE (Name, namef, Bandwidth, Bandwidth, bandwidth, formantType) \
443 KlattGrid_ADD_FORMANT_FREQUENCYANDBANDWIDTHTIERS (Name, namef, formantType) \
444 KlattGrid_REMOVE_FORMANT_FREQUENCYANDBANDWIDTHTIERS (Name, namef, formantType) \
445 KlattGrid_ADD_FORMANT (Name, namef, formantType) \
446 KlattGrid_REMOVE_FORMANT (Name, namef, formantType)
447
448 KlattGrid_FORMULA_ADD_REMOVE_FBA (Oral, oral f, kKlattGridFormantType::ORAL)
449 KlattGrid_FORMULA_ADD_REMOVE_FBA (Nasal, nasal f, kKlattGridFormantType::NASAL)
450 KlattGrid_FORMULA_ADD_REMOVE_FB (NasalAnti, nasal antif, kKlattGridFormantType::NASAL_ANTI)
451 KlattGrid_FORMULA_ADD_REMOVE_FB_DELTA (Delta, delta f, kKlattGridFormantType::DELTA)
452 KlattGrid_FORMULA_ADD_REMOVE_FBA (Tracheal, tracheal f, kKlattGridFormantType::TRACHEAL)
453 KlattGrid_FORMULA_ADD_REMOVE_FB (TrachealAnti, tracheal antif, kKlattGridFormantType::TRACHEALANTI)
454 KlattGrid_FORMULA_ADD_REMOVE_FBA (Frication, frication f, kKlattGridFormantType::FRICATION)
455
456 #undef KlattGrid_FORMULA_ADD_REMOVE_FB
457 #undef KlattGrid_FORMULA_ADD_REMOVE
458 #undef KlattGrid_ADD_FORMANT_AND_BANDWDTH_TIER
459 #undef KlattGrid_REMOVE_FBA_VALUE
460 #undef KlattGrid_ADD_FBA_VALUE
461 #undef KlattGrid_FORMULA_FORMANT_FB_VALUE
462
463 DIRECT (CONVERT_EACH_TO_ONE__KlattGrid_extractPointProcess_glottalClosures) {
464 CONVERT_EACH_TO_ONE (KlattGrid)
465 autoPointProcess result = KlattGrid_extractPointProcess_glottalClosures (me);
466 CONVERT_EACH_TO_ONE_END (my name.get())
467 }
468
469 FORM (MODIFY_KlattGrid_formula_frequencies, U"KlattGrid: Formula (frequencies)", U"Formant: Formula (frequencies)...") {
470 KlattGrid_6formants_addCommonField (formantType)
471 LABEL (U"row is formant number, col is point number: for row from 1 to nrow do for col from 1 to ncol do F (row, col) :=")
472 FORMULA (formula, U"Formula", U"if row = 2 then self + 200 else self fi")
473 OK
474 DO
475 MODIFY_EACH (KlattGrid)
476 KlattGrid_formula_frequencies (me, formantType, formula, interpreter);
477 MODIFY_EACH_END
478 }
479
480 FORM (MODIFY_KlattGrid_formula_bandwidths, U"KlattGrid: Formula (bandwidths)", U"Formant: Formula (bandwidths)...") {
481 KlattGrid_6formants_addCommonField (formantType)
482 LABEL (U"row is formant number, col is point number: for row from 1 to nrow do for col from 1 to ncol do F (row, col) :=")
483 FORMULA (formula, U"Formula", U"if row = 2 then self + 200 else self fi")
484 OK
485 DO
486 MODIFY_EACH (KlattGrid)
487 KlattGrid_formula_bandwidths (me, formantType, formula, interpreter);
488 MODIFY_EACH_END
489 }
490
491 #define KlattGrid_FORMANT_GET_FB_VALUE(Name,name,ForB,forb,FormB,formantType) \
492 FORM (QUERY_ONE_FOR_REAL__KlattGrid_get##Name##Formant##ForB##AtTime, U"KlattGrid: Get " #name " " #forb " at time", nullptr) { \
493 NATURAL (formantNumber, U"Formant number", U"1") \
494 REAL (time, U"Time (s)", U"0.5") \
495 OK \
496 DO \
497 QUERY_ONE_FOR_REAL (KlattGrid); \
498 const double result = KlattGrid_get##FormB##AtTime (me, formantType, formantNumber, time); \
499 QUERY_ONE_FOR_REAL_END (U" Hz"); \
500 }
501
502 #define KlattGrid_FORMANT_GET_A_VALUE(Name,name,formantType) \
503 FORM (QUERY_ONE_FOR_REAL__KlattGrid_get##Name##FormantAmplitudeAtTime, U"KlattGrid: Get " #name " formant amplitude at time", nullptr) { \
504 NATURAL (formantNumber, U"Formant number", U"1") \
505 REAL (time, U"Time (s)", U"0.5") \
506 OK \
507 DO \
508 QUERY_ONE_FOR_REAL (KlattGrid); \
509 const double result = KlattGrid_getAmplitudeAtTime (me, formantType, formantNumber, time); \
510 QUERY_ONE_FOR_REAL_END (U" dB"); \
511 }
512
513 #define KlattGrid_FORMANT_GET_FB_VALUES(Name,name,formantType) \
514 KlattGrid_FORMANT_GET_FB_VALUE (Name, name, Frequency, frequency, Formant, formantType) \
515 KlattGrid_FORMANT_GET_FB_VALUE (Name, name, Bandwidth, bandwidth, Bandwidth, formantType)
516
KlattGrid_FORMANT_GET_FB_VALUES(Oral,oral,kKlattGridFormantType::ORAL)517 KlattGrid_FORMANT_GET_FB_VALUES (Oral, oral, kKlattGridFormantType::ORAL)
518 KlattGrid_FORMANT_GET_A_VALUE (Oral, oral, kKlattGridFormantType::ORAL)
519 KlattGrid_FORMANT_GET_FB_VALUES (Nasal, nasal, kKlattGridFormantType::NASAL)
520 KlattGrid_FORMANT_GET_A_VALUE (Nasal, nasal, kKlattGridFormantType::NASAL)
521 KlattGrid_FORMANT_GET_FB_VALUES (NasalAnti, nasal anti, kKlattGridFormantType::NASAL_ANTI)
522 KlattGrid_FORMANT_GET_FB_VALUES (Tracheal, tracheal f, kKlattGridFormantType::TRACHEAL)
523 KlattGrid_FORMANT_GET_A_VALUE (Tracheal, tracheal f, kKlattGridFormantType::TRACHEAL)
524 KlattGrid_FORMANT_GET_FB_VALUES (Delta, delta f, kKlattGridFormantType::DELTA)
525 KlattGrid_FORMANT_GET_FB_VALUES (TrachealAnti, tracheal antif, kKlattGridFormantType::TRACHEALANTI)
526 KlattGrid_FORMANT_GET_FB_VALUES (Frication, frication, kKlattGridFormantType::FRICATION)
527 KlattGrid_FORMANT_GET_A_VALUE (Frication, frication, kKlattGridFormantType::FRICATION)
528
529 #undef KlattGrid_FORMANT_GET_FB_VALUES
530 #undef KlattGrid_FORMANT_GET_A_VALUE
531
532 #define KlattGrid_EXTRACT_FORMANT_GRID(Name,gridType) \
533 DIRECT (CONVERT_EACH_TO_ONE__KlattGrid_extract##Name##FormantGrid) { \
534 CONVERT_EACH_TO_ONE (KlattGrid) \
535 autoFormantGrid result = KlattGrid_extractFormantGrid (me, gridType); \
536 CONVERT_EACH_TO_ONE_END (KlattGrid_getFormantName (gridType)) \
537 }
538
539 #define KlattGrid_EXTRACT_FORMANT_AMPLITUDE(Name,name,formantType) \
540 FORM (CONVERT_EACH_TO_ONE__KlattGrid_extract##Name##FormantAmplitudeTier, U"KlattGrid: Extract " #name " formant amplitude tier", nullptr) { \
541 NATURAL (formantNumber, U"Formant number", U"1") \
542 OK \
543 DO \
544 CONVERT_EACH_TO_ONE (KlattGrid) \
545 autoIntensityTier result = KlattGrid_extractAmplitudeTier (me, formantType, formantNumber); \
546 CONVERT_EACH_TO_ONE_END (KlattGrid_getFormantName (formantType)) \
547 }
548
549 KlattGrid_EXTRACT_FORMANT_GRID (Oral, kKlattGridFormantType::ORAL)
550 KlattGrid_EXTRACT_FORMANT_AMPLITUDE (Oral, oral, kKlattGridFormantType::ORAL)
551 KlattGrid_EXTRACT_FORMANT_GRID (Nasal, kKlattGridFormantType::NASAL)
552 KlattGrid_EXTRACT_FORMANT_AMPLITUDE (Nasal, nasal, kKlattGridFormantType::NASAL)
553 KlattGrid_EXTRACT_FORMANT_GRID (Frication, kKlattGridFormantType::FRICATION)
554 KlattGrid_EXTRACT_FORMANT_AMPLITUDE (Frication, frication, kKlattGridFormantType::FRICATION)
555 KlattGrid_EXTRACT_FORMANT_GRID (Tracheal, kKlattGridFormantType::TRACHEAL)
556 KlattGrid_EXTRACT_FORMANT_AMPLITUDE (Tracheal, tracheal, kKlattGridFormantType::TRACHEAL)
557 KlattGrid_EXTRACT_FORMANT_GRID (NasalAnti, kKlattGridFormantType::NASAL_ANTI)
558 KlattGrid_EXTRACT_FORMANT_GRID (TrachealAnti, kKlattGridFormantType::TRACHEALANTI)
559 KlattGrid_EXTRACT_FORMANT_GRID (Delta, kKlattGridFormantType::DELTA)
560
561 #undef KlattGrid_EXTRACT_FORMANTGRID
562
563 #define KlattGrid_REPLACE_FORMANT_GRID(Name,formantType) \
564 DIRECT (MODIFY_KlattGrid_replace##Name##FormantGrid) { \
565 MODIFY_FIRST_OF_ONE_AND_ONE (KlattGrid, FormantGrid); \
566 KlattGrid_replaceFormantGrid (me, formantType, you); \
567 MODIFY_FIRST_OF_ONE_AND_ONE_END \
568 }
569
570 #define KlattGrid_REPLACE_FORMANT_AMPLITUDE(Name,name,formantType) \
571 FORM (MODIFY_KlattGrid_replace##Name##FormantAmplitudeTier, U"KlattGrid: Replace " #name " formant amplitude tier", nullptr) { \
572 NATURAL (formantNumber, U"Formant number", U"1") \
573 OK \
574 DO \
575 MODIFY_FIRST_OF_ONE_AND_ONE (KlattGrid, IntensityTier); \
576 KlattGrid_replaceAmplitudeTier (me, formantType, formantNumber, you); \
577 MODIFY_FIRST_OF_ONE_AND_ONE_END \
578 }
579
580 KlattGrid_REPLACE_FORMANT_GRID (Oral, kKlattGridFormantType::ORAL)
581 KlattGrid_REPLACE_FORMANT_AMPLITUDE (Oral, oral, kKlattGridFormantType::ORAL)
582 KlattGrid_REPLACE_FORMANT_GRID (Nasal, kKlattGridFormantType::NASAL)
583 KlattGrid_REPLACE_FORMANT_AMPLITUDE (Nasal, nasal, kKlattGridFormantType::NASAL)
584 KlattGrid_REPLACE_FORMANT_GRID (NasalAnti, kKlattGridFormantType::NASAL_ANTI)
585 KlattGrid_REPLACE_FORMANT_GRID (Tracheal, kKlattGridFormantType::TRACHEAL)
586 KlattGrid_REPLACE_FORMANT_AMPLITUDE (Tracheal, tracheal, kKlattGridFormantType::TRACHEAL)
587 KlattGrid_REPLACE_FORMANT_GRID (TrachealAnti, kKlattGridFormantType::TRACHEALANTI)
588 KlattGrid_REPLACE_FORMANT_GRID (Delta, kKlattGridFormantType::DELTA)
589 KlattGrid_REPLACE_FORMANT_GRID (Frication, kKlattGridFormantType::FRICATION)
590 KlattGrid_REPLACE_FORMANT_AMPLITUDE (Frication, frication, kKlattGridFormantType::FRICATION)
591
592 #undef KlattGrid_REPLACE_FORMANT_AMPLITUDE
593 #undef KlattGrid_REPLACE_FORMANTGRID
594
595 #define KlattGrid_FORMANT_GET_ADD_REMOVE(Name,name,unit,default,requireCondition,requireMessage) \
596 FORM (QUERY_ONE_FOR_REAL__KlattGrid_get##Name##AtTime, U"KlattGrid: Get " #name " at time", nullptr) { \
597 KlattGrid_6formants_addCommonField (formantType) \
598 NATURAL (formantNumber, U"Formant number", U"1") \
599 REAL (time, U"Time (s)", U"0.5") \
600 OK \
601 DO \
602 QUERY_ONE_FOR_REAL (KlattGrid); \
603 const double result = KlattGrid_get##Name##AtTime (me, formantType, formantNumber, time); \
604 QUERY_ONE_FOR_REAL_END (U" Hz"); \
605 } \
606 FORM (QUERY_ONE_FOR_REAL__KlattGrid_getDelta##Name##AtTime, U"KlattGrid: Get delta " #name " at time", nullptr) { \
607 NATURAL (formantNumber, U"Formant number", U"1") \
608 REAL (time, U"Time (s)", U"0.5") \
609 OK \
610 DO \
611 QUERY_ONE_FOR_REAL (KlattGrid); \
612 const double result = KlattGrid_getDelta##Name##AtTime (me, formantNumber, time); \
613 QUERY_ONE_FOR_REAL_END (U" Hz"); \
614 } \
615 FORM (MODIFY_KlattGrid_add##Name##Point, U"KlattGrid: Add " #name " point", nullptr) { \
616 KlattGrid_6formants_addCommonField (formantType) \
617 NATURAL (formantNumber, U"Formant number", U"1") \
618 REAL (time, U"Time (s)", U"0.5") \
619 REAL (value, U"Value" unit, default) \
620 OK \
621 DO \
622 Melder_require (requireCondition, requireMessage); \
623 MODIFY_EACH (KlattGrid) \
624 KlattGrid_add##Name##Point (me, formantType, formantNumber, time, value); \
625 MODIFY_EACH_END \
626 } \
627 FORM (MODIFY_KlattGrid_addDelta##Name##Point, U"KlattGrid: Add delta " #name " point", nullptr) { \
628 NATURAL (formantNumber, U"Formant number", U"1") \
629 REAL (time, U"Time (s)", U"0.5") \
630 REAL (value, U"Value" unit, default) \
631 OK \
632 DO \
633 Melder_require (requireCondition, requireMessage); \
634 MODIFY_EACH (KlattGrid) \
635 KlattGrid_addDelta##Name##Point (me, formantNumber, time, value); \
636 MODIFY_EACH_END \
637 } \
638 FORM (MODIFY_KlattGrid_remove##Name##Points, U"Remove " #name " points", nullptr) { \
639 KlattGrid_6formants_addCommonField (formantType) \
640 NATURAL (formantNumber, U"Formant number", U"1") \
641 REAL (fromTime, U"From time (s)", U"0.3")\
642 REAL (toTime, U"To time (s)", U"0.7") \
643 OK \
644 DO \
645 MODIFY_EACH (KlattGrid) \
646 KlattGrid_remove##Name##Points (me, formantType, formantNumber, fromTime, toTime); \
647 MODIFY_EACH_END \
648 } \
649 FORM (MODIFY_KlattGrid_removeDelta##Name##Points, U"Remove delta " #name " points", nullptr) { \
650 NATURAL (formantNumber, U"Formant number", U"1") \
651 REAL (fromTime, U"From time (s)", U"0.3")\
652 REAL (toTime, U"To time (s)", U"0.7") \
653 OK \
654 DO \
655 MODIFY_EACH (KlattGrid) \
656 KlattGrid_removeDelta##Name##Points (me, formantNumber, fromTime, toTime); \
657 MODIFY_EACH_END \
658 }
659
660 KlattGrid_FORMANT_GET_ADD_REMOVE (Formant, formant, U" (Hz)", U"500.0", (value > 0), U"Frequency should be greater than zero.")
661 KlattGrid_FORMANT_GET_ADD_REMOVE (Bandwidth, bandwidth, U" (Hz)", U"50.0", (value > 0), U"Bandwidth should be greater than zero.")
662
663 #undef KlattGrid_FORMANT_GET_ADD_REMOVE
664
665 FORM (MODIFY_KlattGrid_addFormantAndBandwidthTier, U"", nullptr) {
666 OPTIONMENU_ENUM (kKlattGridFormantType, formantType, U"Formant type", kKlattGridFormantType::DEFAULT)
667 INTEGER (position, U"Position", U"0 (= at end)")
668 OK
669 DO
670 MODIFY_EACH (KlattGrid)
671 KlattGrid_addFormantFrequencyAndBandwidthTiers (me, formantType, position);
672 MODIFY_EACH_END
673 }
674
675 FORM (CONVERT_EACH_TO_ONE__KlattGrid_extractFormantGrid, U"KlattGrid: Extract formant grid", nullptr) {
676 KlattGrid_6formants_addCommonField (formantType)
677 OK
678 DO
679 CONVERT_EACH_TO_ONE (KlattGrid)
680 autoFormantGrid result = KlattGrid_extractFormantGrid (me, formantType);
681 CONVERT_EACH_TO_ONE_END (KlattGrid_getFormantName (formantType))
682 }
683
684 FORM (MODIFY_KlattGrid_replaceFormantGrid, U"KlattGrid: Replace formant grid", nullptr) {
685 KlattGrid_6formants_addCommonField (formantType)
686 OK
687 DO
688 MODIFY_FIRST_OF_ONE_AND_ONE (KlattGrid, FormantGrid)
689 KlattGrid_replaceFormantGrid (me, formantType, you);
690 MODIFY_FIRST_OF_ONE_AND_ONE_END
691 }
692
693 FORM (QUERY_ONE_FOR_REAL__KlattGrid_getAmplitudeAtTime, U"KlattGrid: Get amplitude at time", nullptr) {
694 KlattGrid_4formants_addCommonField (formantType)
695 NATURAL (formantNumber, U"Formant number", U"1")
696 REAL (time, U"Time (s)", U"0.5")
697 OK
698 DO
699 QUERY_ONE_FOR_REAL (KlattGrid)
700 double result = KlattGrid_getAmplitudeAtTime (me, formantType, formantNumber, time);
701 QUERY_ONE_FOR_REAL_END ( U"dB")
702 }
703
704 FORM (MODIFY_KlattGrid_addAmplitudePoint, U"KlattGrid: Add amplitude point", nullptr) {
705 KlattGrid_4formants_addCommonField (formantType)
706 NATURAL (formantNumber, U"Formant number", U"1")
707 REAL (time, U"Time (s)", U"0.5")
708 REAL (value_hz, U"Value (Hz)", U"80.0")
709 OK
710 DO
711 MODIFY_EACH (KlattGrid)
712 KlattGrid_addAmplitudePoint (me, formantType, formantNumber, time, value_hz);
713 MODIFY_EACH_END
714 }
715
716 FORM (MODIFY_KlattGrid_removeAmplitudePoints, U"Remove amplitude points", nullptr) {
717 KlattGrid_4formants_addCommonField (formantType)
718 NATURAL (formantNumber, U"Formant number", U"1")
719 REAL (fromTime, U"From time (s)", U"0.3")
720 REAL (toTime, U"To time (s)", U"0.7")
721 OK
722 DO
723 MODIFY_EACH (KlattGrid);
724 KlattGrid_removeAmplitudePoints (me, formantType, formantNumber, fromTime, toTime);
725 MODIFY_EACH_END
726 }
727
728 FORM (CONVERT_EACH_TO_ONE__KlattGrid_extractAmplitudeTier, U"", nullptr) {
729 KlattGrid_4formants_addCommonField (formantType)
730 NATURAL (formantNumber, U"Formant number", U"1")
731 OK
732 DO
733 CONVERT_EACH_TO_ONE (KlattGrid)
734 autoIntensityTier result = KlattGrid_extractAmplitudeTier (me, formantType, formantNumber);
735 CONVERT_EACH_TO_ONE_END (KlattGrid_getFormantName (formantType))
736 }
737
738 FORM (MODIFY_KlattGrid_replaceAmplitudeTier, U"KlattGrid: Replace amplitude tier", nullptr) {
739 KlattGrid_4formants_addCommonField (formantType)
740 NATURAL (formantNumber, U"Formant number", U"1")
741 OK
742 DO
743 MODIFY_FIRST_OF_ONE_AND_ONE (KlattGrid, IntensityTier)
744 KlattGrid_replaceAmplitudeTier (me, formantType, formantNumber, you);
745 MODIFY_FIRST_OF_ONE_AND_ONE_END
746 }
747
748 FORM (CONVERT_EACH_TO_ONE__KlattGrid_to_Sound_special, U"KlattGrid: To Sound (special)", U"KlattGrid: To Sound (special)...") {
749 REAL (fromTime, U"left Time range (s)", U"0")
750 REAL (toTime, U"right Time range (s)", U"0")
751 POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
752 BOOLEAN (scalePeak, U"Scale peak", true)
753 KlattGrid_PhonationGridPlayOptions_addCommonFields (useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness)
754 KlattGrid_formantSelection_vocalTract_commonFields (filtersStructure, fromOralFormant, toOralFormant, fromNasalFormant, toNasalFormant, fromNasalAntiFormant, toNasalAntiFormant)
755 KlattGrid_formantSelection_coupling_commonFields (fromTrachealFormant, toTrachealFormant, fromTrachealAntiFormant, toTrachealAntiFormant, fromDeltaFormant, toDeltaFormant, fromDeltaBandwidth, toDeltaBandwidth)
756 KlattGrid_formantSelection_frication_commonFields(fromFricationFormant,toFricationFormant,useFricationBypass)
757 OK
758 DO
759 CONVERT_EACH_TO_ONE (KlattGrid)
760 KlattGrid_setDefaultPlayOptions (me);
761 KlattGridPlayOptions pk = my options.get();
762 pk -> scalePeak = scalePeak;
763 pk -> xmin = fromTime;
764 pk -> xmax = toTime;
765 pk -> samplingFrequency = samplingFrequency;
766 pk -> scalePeak = scalePeak;
767 KlattGrid_PhonationGridPlayOptions (me, useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness);
768 KlattGrid_formantSelection_vocalTract (me, filtersStructure, fromOralFormant, toOralFormant, fromNasalFormant, toNasalFormant, fromNasalAntiFormant, toNasalAntiFormant);
769 KlattGrid_formantSelection_coupling (me, fromTrachealFormant, toTrachealFormant, fromTrachealAntiFormant, toTrachealAntiFormant, fromDeltaFormant, toDeltaFormant, fromDeltaBandwidth, toDeltaBandwidth);
770 KlattGrid_formantSelection_frication (me, fromFricationFormant, toFricationFormant, useFricationBypass);
771 autoSound result = KlattGrid_to_Sound (me);
772 CONVERT_EACH_TO_ONE_END (my name.get())
773 }
774
DIRECT(CONVERT_EACH_TO_ONE__KlattGrid_to_Sound)775 DIRECT (CONVERT_EACH_TO_ONE__KlattGrid_to_Sound) {
776 CONVERT_EACH_TO_ONE (KlattGrid)
777 KlattGrid_setDefaultPlayOptions (me);
778 autoSound result = KlattGrid_to_Sound (me);
779 CONVERT_EACH_TO_ONE_END (my name.get())
780 }
781
782 FORM (PLAY_KlattGrid_playSpecial, U"KlattGrid: Play special", U"KlattGrid: Play special...") {
783 REAL (fromTime, U"left Time range (s)", U"0")
784 REAL (toTime, U"right Time range (s)", U"0")
785 BOOLEAN (scalePeak, U"Scale peak", true)
786 KlattGrid_PhonationGridPlayOptions_addCommonFields (useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness)
787 KlattGrid_formantSelection_vocalTract_commonFields (filtersStructure, fromOralFormant, toOralFormant, fromNasalFormant, toNasalFormant, fromNasalAntiFormant, toNasalAntiFormant);
788 KlattGrid_formantSelection_coupling_commonFields (fromTrachealFormant, toTrachealFormant, fromTrachealAntiFormant, toTrachealAntiFormant, fromDeltaFormant, toDeltaFormant, fromDeltaBandwidth, toDeltaBandwidth)
789 KlattGrid_formantSelection_frication_commonFields(fromFricationFormant,toFricationFormant,useFricationBypass)
790 OK
791 DO
792 PLAY_EACH (KlattGrid)
793 KlattGrid_setDefaultPlayOptions (me);
794 KlattGridPlayOptions pk = my options.get();
795 pk -> scalePeak = scalePeak;
796 pk -> xmin = fromTime;
797 pk -> xmax = toTime;
798 pk -> scalePeak = scalePeak;
799 KlattGrid_PhonationGridPlayOptions (me, useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness);
800 KlattGrid_formantSelection_vocalTract (me, filtersStructure, fromOralFormant, toOralFormant, fromNasalFormant, toNasalFormant, fromNasalAntiFormant, toNasalAntiFormant);
801 KlattGrid_formantSelection_coupling (me, fromTrachealFormant, toTrachealFormant, fromTrachealAntiFormant, toTrachealAntiFormant, fromDeltaFormant, toDeltaFormant, fromDeltaBandwidth, toDeltaBandwidth);
802 KlattGrid_formantSelection_frication (me, fromFricationFormant, toFricationFormant, useFricationBypass);
803 KlattGrid_playSpecial (me);
804 PLAY_EACH_END
805 }
806
807 FORM (CONVERT_EACH_TO_ONE__KlattGrid_to_Sound_phonation, U"KlattGrid: To Sound (phonation)", U"KlattGrid: To Sound (phonation)...") {
808 POSITIVE (samplingFrequency, U"Sampling frequency (Hz)", U"44100.0")
809 KlattGrid_PhonationGridPlayOptions_addCommonFields (useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness)
810 OK
811 DO
812 CONVERT_EACH_TO_ONE (KlattGrid)
813 KlattGrid_PhonationGridPlayOptions (me, useVoicing, useFlutter, useDoublePulsing, useCollisionPhase, useSpectralTilt, flowFunctionType, useFlowDerivative, useAspiration, useBreathiness);
814 my options -> samplingFrequency = samplingFrequency;
815 autoSound result = KlattGrid_to_Sound_phonation (me);
816 CONVERT_EACH_TO_ONE_END (my name.get(), U"_phonation")
817 }
818
DIRECT(HELP__KlattGrid_help)819 DIRECT (HELP__KlattGrid_help) {
820 HELP (U"KlattGrid")
821 }
822
DIRECT(PLAY_KlattGrid_play)823 DIRECT (PLAY_KlattGrid_play) {
824 PLAY_EACH (KlattGrid)
825 KlattGrid_play (me);
826 PLAY_EACH_END
827 }
828
829 FORM (GRAPHICS_EACH__KlattGrid_draw, U"KlattGrid: Draw", nullptr) {
830 RADIO_ENUM (kKlattGridFilterModel, filterModel, U"Synthesis filter model", kKlattGridFilterModel::DEFAULT)
831 OK
832 DO
833 GRAPHICS_EACH (KlattGrid)
834 KlattGrid_draw (me, GRAPHICS, filterModel);
835 GRAPHICS_EACH_END
836 }
837
838 FORM (GRAPHICS_EACH__KlattGrid_drawVocalTract, U"KlattGrid: Draw vocal tract", nullptr) {
839 RADIO_ENUM (kKlattGridFilterModel, filterModel, U"Synthesis filter model", kKlattGridFilterModel::DEFAULT)
840 BOOLEAN (includeTrachealFormants, U"Include tracheal formants", true);
841 OK
842 DO
843 GRAPHICS_EACH (KlattGrid)
844 KlattGrid_drawVocalTract (me, GRAPHICS, filterModel, includeTrachealFormants);
845 GRAPHICS_EACH_END
846 }
847
DIRECT(GRAPHICS_EACH__KlattGrid_drawPhonation)848 DIRECT (GRAPHICS_EACH__KlattGrid_drawPhonation) {
849 GRAPHICS_EACH (KlattGrid)
850 PhonationGrid_draw (my phonation.get(), GRAPHICS);
851 GRAPHICS_EACH_END
852 }
853
DIRECT(GRAPHICS_EACH__KlattGrid_drawFrication)854 DIRECT (GRAPHICS_EACH__KlattGrid_drawFrication) {
855 GRAPHICS_EACH (KlattGrid)
856 FricationGrid_draw (my frication.get(), GRAPHICS);
857 GRAPHICS_EACH_END
858 }
859
860 FORM (CONVERT_EACH_TO_ONE__KlattGrid_to_oralFormantGrid_openPhases, U"KlattGrid: Extract oral formant grid (open phases)", U"KlattGrid: Extract oral formant grid (open phases)...") {
861 REAL (fadeFraction, U"Fade fraction (0..0.5)", U"0.1")
862 OK
863 DO
864 Melder_require (fadeFraction < 0.5, U"The fade fraction should be less than 0.5.");
865 CONVERT_EACH_TO_ONE (KlattGrid)
866 autoFormantGrid result = KlattGrid_to_oralFormantGrid_openPhases (me, fadeFraction);
867 CONVERT_EACH_TO_ONE_END (U"corrected")
868 }
869
870 FORM (CONVERT_ONE_AND_ONE_TO_ONE__Sound_KlattGrid_filterByVocalTract, U"Sound & KlattGrid: Filter by vocal tract", U"Sound & KlattGrid: Filter by vocal tract...") {
871 RADIO_ENUM (kKlattGridFilterModel, filterModel, U"Vocal tract filter model", kKlattGridFilterModel::DEFAULT)
872 OK
873 DO
874 CONVERT_ONE_AND_ONE_TO_ONE (Sound, KlattGrid)
875 autoSound result = Sound_KlattGrid_filterByVocalTract (me, you, filterModel);
876 CONVERT_ONE_AND_ONE_TO_ONE_END (my name.get(), U"_", your name.get())
877 }
878
879 void praat_KlattGrid_init ();
praat_KlattGrid_init()880 void praat_KlattGrid_init () {
881
882 Thing_recognizeClassesByName (classKlattGrid, nullptr);
883
884 structKlattGrid_OpenPhaseTierArea :: f_preferences();
885 structKlattGrid_CollisionPhaseTierArea :: f_preferences();
886 structKlattGrid_Power1TierArea :: f_preferences();
887 structKlattGrid_Power2TierArea :: f_preferences();
888 structKlattGrid_DoublePulsingTierArea :: f_preferences();
889 structKlattGrid_PitchTierArea :: f_preferences();
890 structKlattGrid_FlutterTierArea :: f_preferences();
891 structKlattGrid_IntensityTierArea :: f_preferences();
892 structKlattGrid_DecibelTierArea :: f_preferences();
893 structKlattGrid_SpectralTiltTierArea :: f_preferences();
894 structKlattGrid_FricationBypassTierArea :: f_preferences();
895
896 praat_addMenuCommand (U"Objects", U"New", U"Acoustic synthesis (Klatt)", nullptr, 0, nullptr);
897 praat_addMenuCommand (U"Objects", U"New", U"KlattGrid help", nullptr, praat_DEPTH_1 | praat_NO_API,
898 HELP__KlattGrid_help);
899 praat_addMenuCommand (U"Objects", U"New", U"-- the synthesizer grid --", nullptr, 1, nullptr);
900 praat_addMenuCommand (U"Objects", U"New", U"Create KlattGrid...", nullptr, 1,
901 CREATE_ONE__KlattGrid_create);
902 praat_addMenuCommand (U"Objects", U"New", U"Create KlattGrid from vowel...", nullptr, 1,
903 CREATE_ONE__KlattGrid_createFromVowel);
904 praat_addMenuCommand (U"Objects", U"New", U"Create KlattGrid example", nullptr, praat_DEPTH_1 + praat_HIDDEN,
905 CREATE_ONE__KlattGrid_createExample);
906
907 /*
908 Edit oral/nasal/tracheal/frication/delta formant grid
909 Edit nasal/tracheal antiformant grid
910 Get oral/nasal/tracheal/frication/delta formant at time...
911 Get nasal/tracheal antiformant at time...
912 Get oral/nasal/tracheal/frication/delta formant bandwidth at time...
913 Get nasal/tracheal antiformant bandwidth at time...
914 Get oral/nasal/tracheal/frication formant amplitude at time...
915 Formula (oral/nasal/tracheal/frication/delta formant frequencies)...
916 Formula (nasal/tracheal antiformant frequencies)...
917 Formula (oral/nasal/tracheal/frication/delta formant bandwidths)...
918 Formula (nasal/tracheal antiformant bandwidths)...
919 Add oral/nasal/tracheal/frication/delta formant point...
920 Add nasal/tracheal antiformant point...
921 Add oral/nasal/tracheal/frication/delta formant bandwidth point...
922 Add nasal/tracheal antiformant bandwidth point...
923 Add oral/nasal/tracheal/frication formant amplitude point...
924 Remove oral/nasal/tracheal/frication/delta formant points...
925 Remove nasal/tracheal antiformant points...
926 Remove oral/nasal/tracheal/frication/delta bandwidth points...
927 Remove nasal/tracheal antiformant bandwidth points...
928 Remove oral/nasal/tracheal/frication formant amplitude points...
929 Extract oral/nasal/tracheal/frication/delta formant grid
930 Extract nasal/tracheal antiformant grid
931 Replace oral/nasal/tracheal/frication/delta formant grid
932 Replace nasal/tracheal antiformant grid
933 Add oral/nasal/tracheal/frication/delta formant and bandwidth tier
934 Add nasal/tracheal antiformant and bandwidth tier
935 */
936 praat_addAction1 (classKlattGrid, 0, U"KlattGrid help", nullptr, 0,
937 HELP__KlattGrid_help);
938 praat_addAction1 (classKlattGrid, 0, U"Edit phonation -", nullptr, 0, nullptr);
939 praat_addAction1 (classKlattGrid, 0, U"Edit pitch tier", nullptr, 1,
940 EDITOR_ONE_KlattGrid_editPitchTier);
941 praat_addAction1 (classKlattGrid, 0, U"Edit voicing amplitude tier", nullptr, 1,
942 EDITOR_ONE_KlattGrid_editVoicingAmplitudeTier);
943 praat_addAction1 (classKlattGrid, 0, U"Edit flutter tier", nullptr, 1,
944 EDITOR_ONE_KlattGrid_editFlutterTier);
945 praat_addAction1 (classKlattGrid, 0, U"Edit power1 tier", nullptr, 1,
946 EDITOR_ONE_KlattGrid_editPower1Tier);
947 praat_addAction1 (classKlattGrid, 0, U"Edit power2 tier", nullptr, 1,
948 EDITOR_ONE_KlattGrid_editPower2Tier);
949 praat_addAction1 (classKlattGrid, 0, U"Edit open phase tier", nullptr, 1,
950 EDITOR_ONE_KlattGrid_editOpenPhaseTier);
951 praat_addAction1 (classKlattGrid, 0, U"Edit collision phase tier", nullptr, 1,
952 EDITOR_ONE_KlattGrid_editCollisionPhaseTier);
953 praat_addAction1 (classKlattGrid, 0, U"Edit double pulsing tier", nullptr, 1,
954 EDITOR_ONE_KlattGrid_editDoublePulsingTier);
955 praat_addAction1 (classKlattGrid, 0, U"Edit spectral tilt tier", nullptr, 1,
956 EDITOR_ONE_KlattGrid_editSpectralTiltTier);
957 praat_addAction1 (classKlattGrid, 0, U"Edit aspiration amplitude tier", nullptr, 1,
958 EDITOR_ONE_KlattGrid_editAspirationAmplitudeTier);
959 praat_addAction1 (classKlattGrid, 0, U"Edit breathiness amplitude tier", nullptr, 1,
960 EDITOR_ONE_KlattGrid_editBreathinessAmplitudeTier);
961
962 praat_addAction1 (classKlattGrid, 0, U"Edit filters -", nullptr, 0, nullptr);
963 praat_addAction1 (classKlattGrid, 0, U"Edit oral formant grid", nullptr, 1,
964 EDITOR_ONE_KlattGrid_editOralFormantGrid);
965 praat_addAction1 (classKlattGrid, 0, U"Edit nasal formant grid", nullptr, 1,
966 EDITOR_ONE_KlattGrid_editNasalFormantGrid);
967 praat_addAction1 (classKlattGrid, 0, U"Edit nasal antiformant grid", nullptr, 1,
968 EDITOR_ONE_KlattGrid_editNasalAntiFormantGrid);
969 praat_addAction1 (classKlattGrid, 0, U"Edit oral formant amplitude tier...", nullptr, 1,
970 EDITOR_ONE_KlattGrid_editOralFormantAmplitudeTier);
971 praat_addAction1 (classKlattGrid, 0, U"Edit nasal formant amplitude tier...", nullptr, 1,
972 EDITOR_ONE_KlattGrid_editNasalFormantAmplitudeTier);
973 praat_addAction1 (classKlattGrid, 0, U"-- edit delta formant grid --", nullptr, 1, nullptr);
974 praat_addAction1 (classKlattGrid, 0, U"Edit delta formant grid", nullptr, 1,
975 EDITOR_ONE_KlattGrid_editDeltaFormantGrid);
976 praat_addAction1 (classKlattGrid, 0, U"Edit tracheal formant grid", nullptr, 1,
977 EDITOR_ONE_KlattGrid_editTrachealFormantGrid);
978 praat_addAction1 (classKlattGrid, 0, U"Edit tracheal antiformant grid", nullptr, 1,
979 EDITOR_ONE_KlattGrid_editTrachealAntiFormantGrid);
980 praat_addAction1 (classKlattGrid, 0, U"Edit tracheal formant amplitude tier...", nullptr, 1,
981 EDITOR_ONE_KlattGrid_editTrachealFormantAmplitudeTier);
982 praat_addAction1 (classKlattGrid, 0, U"-- edit frication tiers --", nullptr, 1, nullptr);
983 praat_addAction1 (classKlattGrid, 1, U"Edit frication amplitude tier", nullptr, 1,
984 EDITOR_ONE_KlattGrid_editFricationAmplitudeTier);
985 praat_addAction1 (classKlattGrid, 0, U"Edit frication formant grid", nullptr, 1,
986 EDITOR_ONE_KlattGrid_editFricationFormantGrid);
987 praat_addAction1 (classKlattGrid, 0, U"Edit frication formant amplitude tier...", nullptr, 1,
988 EDITOR_ONE_KlattGrid_editFricationFormantAmplitudeTier);
989 praat_addAction1 (classKlattGrid, 0, U"Edit frication bypass tier", nullptr, 1,
990 EDITOR_ONE_KlattGrid_editFricationBypassTier);
991 praat_addAction1 (classKlattGrid, 1, U"Edit frication amplitude tier", nullptr, 1,
992 EDITOR_ONE_KlattGrid_editFricationAmplitudeTier);
993
994 praat_addAction1 (classKlattGrid, 0, U"Play", nullptr, 0,
995 PLAY_KlattGrid_play);
996 praat_addAction1 (classKlattGrid, 0, U"Play special...", nullptr, 0,
997 PLAY_KlattGrid_playSpecial);
998 praat_addAction1 (classKlattGrid, 0, U"To Sound", nullptr, 0,
999 CONVERT_EACH_TO_ONE__KlattGrid_to_Sound);
1000 praat_addAction1 (classKlattGrid, 0, U"To Sound (special)...", nullptr, 0,
1001 CONVERT_EACH_TO_ONE__KlattGrid_to_Sound_special);
1002 praat_addAction1 (classKlattGrid, 0, U"To Sound (phonation)...", nullptr, 0,
1003 CONVERT_EACH_TO_ONE__KlattGrid_to_Sound_phonation);
1004
1005 praat_addAction1 (classKlattGrid, 0, U"Draw -", nullptr, 0, nullptr);
1006 praat_addAction1 (classKlattGrid, 0, U"Draw synthesizer...", nullptr, 1,
1007 GRAPHICS_EACH__KlattGrid_draw);
1008 praat_addAction1 (classKlattGrid, 0, U"Draw vocal tract...", nullptr, 1,
1009 GRAPHICS_EACH__KlattGrid_drawVocalTract);
1010 praat_addAction1 (classKlattGrid, 0, U"Draw phonation", nullptr, 1,
1011 GRAPHICS_EACH__KlattGrid_drawPhonation);
1012 praat_addAction1 (classKlattGrid, 0, U"Draw frication", nullptr, 1,
1013 GRAPHICS_EACH__KlattGrid_drawFrication);
1014
1015 praat_addAction1 (classKlattGrid, 0, U"Query phonation -", nullptr, 0, nullptr);
1016 praat_addAction1 (classKlattGrid, 1, U"Get pitch at time...", nullptr, 1,
1017 QUERY_ONE_FOR_REAL__KlattGrid_getPitchAtTime);
1018 praat_addAction1 (classKlattGrid, 1, U"Get voicing amplitude at time...", nullptr, 1,
1019 QUERY_ONE_FOR_REAL__KlattGrid_getVoicingAmplitudeAtTime);
1020 praat_addAction1 (classKlattGrid, 1, U"Get flutter at time...", nullptr, 1,
1021 QUERY_ONE_FOR_REAL__KlattGrid_getFlutterAtTime);
1022 praat_addAction1 (classKlattGrid, 1, U"Get power1 at time...", nullptr, 1,
1023 QUERY_ONE_FOR_REAL__KlattGrid_getPower1AtTime);
1024 praat_addAction1 (classKlattGrid, 1, U"Get power2 at time...", nullptr, 1,
1025 QUERY_ONE_FOR_REAL__KlattGrid_getPower2AtTime);
1026 praat_addAction1 (classKlattGrid, 1, U"Get open phase at time...", nullptr, 1,
1027 QUERY_ONE_FOR_REAL__KlattGrid_getOpenPhaseAtTime);
1028 praat_addAction1 (classKlattGrid, 1, U"Get collision phase at time...", nullptr, 1,
1029 QUERY_ONE_FOR_REAL__KlattGrid_getCollisionPhaseAtTime);
1030 praat_addAction1 (classKlattGrid, 1, U"Get double pulsing at time...", nullptr, 1,
1031 QUERY_ONE_FOR_REAL__KlattGrid_getDoublePulsingAtTime);
1032 praat_addAction1 (classKlattGrid, 1, U"Get spectral tilt at time...", nullptr, 1,
1033 QUERY_ONE_FOR_REAL__KlattGrid_getSpectralTiltAtTime);
1034 praat_addAction1 (classKlattGrid, 1, U"Get aspiration amplitude at time...", nullptr, 1,
1035 QUERY_ONE_FOR_REAL__KlattGrid_getAspirationAmplitudeAtTime);
1036 praat_addAction1 (classKlattGrid, 1, U"Get breathiness amplitude at time...", nullptr, 1,
1037 QUERY_ONE_FOR_REAL__KlattGrid_getBreathinessAmplitudeAtTime);
1038
1039 praat_addAction1 (classKlattGrid, 0, U"Query filters -", nullptr, 0, nullptr);
1040 praat_addAction1 (classKlattGrid, 1, U"Get formant at time...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1041 QUERY_ONE_FOR_REAL__KlattGrid_getFormantAtTime);
1042 praat_addAction1 (classKlattGrid, 1, U"Get bandwidth at time...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1043 QUERY_ONE_FOR_REAL__KlattGrid_getBandwidthAtTime);
1044 praat_addAction1 (classKlattGrid, 1, U"Get amplitude at time...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1045 QUERY_ONE_FOR_REAL__KlattGrid_getAmplitudeAtTime);
1046 praat_addAction1 (classKlattGrid, 1, U"Get delta formant at time...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1047 QUERY_ONE_FOR_REAL__KlattGrid_getDeltaFormantAtTime);
1048 praat_addAction1 (classKlattGrid, 1, U"Get delta bandwidth at time...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1049 QUERY_ONE_FOR_REAL__KlattGrid_getDeltaBandwidthAtTime);
1050
1051 #define KlattGRID_GET_FORMANT_FB_VALUES_ACTION(Name, formantname) \
1052 praat_addAction1 (classKlattGrid, 1, U"Get " #formantname " frequency at time...", nullptr, 1, \
1053 QUERY_ONE_FOR_REAL__KlattGrid_get##Name##FormantFrequencyAtTime); \
1054 praat_addAction1 (classKlattGrid, 1, U"Get " #formantname " bandwidth at time...", nullptr, 1, \
1055 QUERY_ONE_FOR_REAL__KlattGrid_get##Name##FormantBandwidthAtTime);
1056
1057 #define KlattGRID_GET_FORMANT_A_VALUES_ACTION(Name,formantname) \
1058 praat_addAction1 (classKlattGrid, 1, U"Get " #formantname " amplitude at time...", nullptr, 1, \
1059 QUERY_ONE_FOR_REAL__KlattGrid_get##Name##FormantAmplitudeAtTime); \
1060
1061 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (Oral, oral formant)
1062 KlattGRID_GET_FORMANT_A_VALUES_ACTION (Oral, oral formant)
1063 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (Nasal, nasal formant)
1064 KlattGRID_GET_FORMANT_A_VALUES_ACTION (Nasal, nasal formant)
1065 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (NasalAnti, nasal antiformant)
1066
1067 praat_addAction1 (classKlattGrid, 1, U"-- query delta characteristics", nullptr, 1, nullptr);
1068 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (Delta, delta formant)
1069 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (Tracheal, tracheal formant)
1070 KlattGRID_GET_FORMANT_A_VALUES_ACTION (Tracheal, tracheal formant)
1071 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (TrachealAnti, tracheal antiformant)
1072 praat_addAction1 (classKlattGrid, 1, U"-- query frication characteristics", nullptr, 1, nullptr);
1073 KlattGRID_GET_FORMANT_FB_VALUES_ACTION (Frication, frication formant)
1074 KlattGRID_GET_FORMANT_A_VALUES_ACTION (Frication, frication formant)
1075
1076 #undef KlattGRID_GET_FORMANT_A_VALUES_ACTION
1077 #undef KlattGRID_GET_FORMANT_A_VALUES_ACTION
1078
1079 praat_addAction1 (classKlattGrid, 1, U"Get frication bypass at time...", nullptr, 1,
1080 QUERY_ONE_FOR_REAL__KlattGrid_getFricationBypassAtTime);
1081 praat_addAction1 (classKlattGrid, 1, U"Get frication amplitude at time...", nullptr, 1,
1082 QUERY_ONE_FOR_REAL__KlattGrid_getFricationAmplitudeAtTime);
1083
1084 praat_addAction1 (classKlattGrid, 0, U"Modify phonation -", nullptr, 0, nullptr);
1085 praat_addAction1 (classKlattGrid, 0, U"Add pitch point...", nullptr, 1,
1086 MODIFY_KlattGrid_addPitchPoint);
1087 praat_addAction1 (classKlattGrid, 0, U"Add voicing amplitude point...", nullptr, 1,
1088 MODIFY_KlattGrid_addVoicingAmplitudePoint);
1089 praat_addAction1 (classKlattGrid, 0, U"Add flutter point...", nullptr, 1,
1090 MODIFY_KlattGrid_addFlutterPoint);
1091 praat_addAction1 (classKlattGrid, 0, U"Add power1 point...", nullptr, 1,
1092 MODIFY_KlattGrid_addPower1Point);
1093 praat_addAction1 (classKlattGrid, 0, U"Add power2 point...", nullptr, 1,
1094 MODIFY_KlattGrid_addPower2Point);
1095 praat_addAction1 (classKlattGrid, 0, U"Add open phase point...", nullptr, 1,
1096 MODIFY_KlattGrid_addOpenPhasePoint);
1097 praat_addAction1 (classKlattGrid, 0, U"Add collision phase point...", nullptr, 1,
1098 MODIFY_KlattGrid_addCollisionPhasePoint);
1099 praat_addAction1 (classKlattGrid, 0, U"Add double pulsing point...", nullptr, 1,
1100 MODIFY_KlattGrid_addDoublePulsingPoint);
1101 praat_addAction1 (classKlattGrid, 0, U"Add spectral tilt point...", nullptr, 1,
1102 MODIFY_KlattGrid_addSpectralTiltPoint);
1103 praat_addAction1 (classKlattGrid, 0, U"Add aspiration amplitude point...", nullptr, 1,
1104 MODIFY_KlattGrid_addAspirationAmplitudePoint);
1105 praat_addAction1 (classKlattGrid, 0, U"Add breathiness amplitude point...", nullptr, 1,
1106 MODIFY_KlattGrid_addBreathinessAmplitudePoint);
1107
1108 #define KlattGrid_REMOVE_POINTS_ACTION(Name,name) \
1109 praat_addAction1 (classKlattGrid, 0, U"Remove " #name " points between...", nullptr, praat_DEPTH_1+praat_HIDDEN, \
1110 MODIFY_KlattGrid_remove##Name##Points); \
1111 praat_addAction1 (classKlattGrid, 0, U"Remove " #name " points...", nullptr, 1, \
1112 MODIFY_KlattGrid_remove##Name##Points);
1113
1114 KlattGrid_REMOVE_POINTS_ACTION (Pitch, pitch)
1115 KlattGrid_REMOVE_POINTS_ACTION (VoicingAmplitude, voicing amplitude)
1116 KlattGrid_REMOVE_POINTS_ACTION (Flutter, flutter)
1117 KlattGrid_REMOVE_POINTS_ACTION (Power1, power1)
1118 KlattGrid_REMOVE_POINTS_ACTION (Power2, power2)
1119 KlattGrid_REMOVE_POINTS_ACTION (OpenPhase, open phase)
1120 KlattGrid_REMOVE_POINTS_ACTION (CollisionPhase, collision phase)
1121 KlattGrid_REMOVE_POINTS_ACTION (DoublePulsing, double pulsing)
1122 KlattGrid_REMOVE_POINTS_ACTION (SpectralTilt, spectral tilt)
1123 KlattGrid_REMOVE_POINTS_ACTION (AspirationAmplitude, aspiration amplitude)
1124 KlattGrid_REMOVE_POINTS_ACTION (BreathinessAmplitude, breathiness amplitude)
1125
1126 praat_addAction1 (classKlattGrid, 0, U"Modify vocal tract -", nullptr, 0, nullptr);
1127
1128 #define KlattGrid_MODIFY_ACTIONS_FBA(Name,formantname) \
1129 praat_addAction1 (classKlattGrid, 0, U"Formula (" #formantname " frequencies)...", nullptr, 1, \
1130 MODIFY_KlattGrid_formula##Name##FormantFrequencies); \
1131 praat_addAction1 (classKlattGrid, 0, U"Formula (" #formantname " bandwidths)...", nullptr, 1, \
1132 MODIFY_KlattGrid_formula##Name##FormantBandwidths); \
1133 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " frequency point...", nullptr, 1, \
1134 MODIFY_KlattGrid_add##Name##FormantFrequencyPoint); \
1135 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " bandwidth point...", nullptr, 1, \
1136 MODIFY_KlattGrid_add##Name##FormantBandwidthPoint); \
1137 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " amplitude point...", nullptr, 1, \
1138 MODIFY_KlattGrid_add##Name##FormantAmplitudePoint); \
1139 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " frequency points...", nullptr, 1, \
1140 MODIFY_KlattGrid_remove##Name##FormantFrequencyPoints); \
1141 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " bandwidth points...", nullptr, 1, \
1142 MODIFY_KlattGrid_remove##Name##FormantBandwidthPoints); \
1143 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " amplitude points...", nullptr, 1, \
1144 MODIFY_KlattGrid_remove##Name##FormantAmplitudePoints); \
1145 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " frequency and bandwidth tiers...", nullptr, 1, \
1146 MODIFY_KlattGrid_add##Name##FormantFrequencyAndBandwidthTiers); \
1147 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " frequency and bandwidth tiers...", nullptr, 1, \
1148 MODIFY_KlattGrid_remove##Name##FormantFrequencyAndBandwidthTiers); \
1149 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " amplitude tier...", nullptr, 1, \
1150 MODIFY_KlattGrid_add##Name##FormantAmplitudeTier); \
1151 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " amplitude tier...", nullptr, 1, \
1152 MODIFY_KlattGrid_remove##Name##FormantAmplitudeTier); \
1153 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname "...", nullptr, praat_DEPTH_1 + praat_HIDDEN, \
1154 MODIFY_KlattGrid_add##Name##Formant); \
1155 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname "...", nullptr, praat_DEPTH_1 + praat_HIDDEN, \
1156 MODIFY_KlattGrid_remove##Name##Formant);
1157
1158 #define KlattGrid_MODIFY_ACTIONS_FB(Name,formantname) \
1159 praat_addAction1 (classKlattGrid, 0, U"Formula (" #formantname " frequencies)...", nullptr, 1, \
1160 MODIFY_KlattGrid_formula##Name##FormantFrequencies); \
1161 praat_addAction1 (classKlattGrid, 0, U"Formula (" #formantname " bandwidths)...", nullptr, 1, \
1162 MODIFY_KlattGrid_formula##Name##FormantBandwidths); \
1163 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " frequency point...", nullptr, 1, \
1164 MODIFY_KlattGrid_add##Name##FormantFrequencyPoint); \
1165 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " bandwidth point...", nullptr, 1, \
1166 MODIFY_KlattGrid_add##Name##FormantBandwidthPoint); \
1167 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " frequency points...", nullptr, 1, \
1168 MODIFY_KlattGrid_remove##Name##FormantFrequencyPoints); \
1169 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " bandwidth points...", nullptr, 1, \
1170 MODIFY_KlattGrid_remove##Name##FormantBandwidthPoints); \
1171 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname " frequency and bandwidth tiers...", nullptr, 1, \
1172 MODIFY_KlattGrid_add##Name##FormantFrequencyAndBandwidthTiers); \
1173 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname " frequency and bandwidth tiers...", nullptr, 1, \
1174 MODIFY_KlattGrid_remove##Name##FormantFrequencyAndBandwidthTiers); \
1175 praat_addAction1 (classKlattGrid, 0, U"Add " #formantname "...", nullptr, praat_DEPTH_1 + praat_HIDDEN, \
1176 MODIFY_KlattGrid_add##Name##Formant); \
1177 praat_addAction1 (classKlattGrid, 0, U"Remove " #formantname "...", nullptr, praat_DEPTH_1 + praat_HIDDEN, \
1178 MODIFY_KlattGrid_remove##Name##Formant);
1179
1180 KlattGrid_MODIFY_ACTIONS_FBA (Oral, oral formant)
1181 praat_addAction1 (classKlattGrid, 0, U"-- oral modify separator --", nullptr, 1, nullptr);
1182 KlattGrid_MODIFY_ACTIONS_FBA (Nasal, nasal formant)
1183 praat_addAction1 (classKlattGrid, 0, U"-- nasal modify separator --", nullptr, 1, nullptr);
1184 KlattGrid_MODIFY_ACTIONS_FB (NasalAnti, nasal antiformant)
1185
1186 praat_addAction1 (classKlattGrid, 0, U"Formula (frequencies)...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1187 MODIFY_KlattGrid_formula_frequencies);
1188 praat_addAction1 (classKlattGrid, 0, U"Formula (bandwidths)...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1189 MODIFY_KlattGrid_formula_bandwidths);
1190 praat_addAction1 (classKlattGrid, 0, U"Add formant point...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1191 MODIFY_KlattGrid_addFormantPoint);
1192 praat_addAction1 (classKlattGrid, 0, U"Add bandwidth point...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1193 MODIFY_KlattGrid_addBandwidthPoint);
1194 praat_addAction1 (classKlattGrid, 0, U"Add amplitude point...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1195 MODIFY_KlattGrid_addAmplitudePoint);
1196 praat_addAction1 (classKlattGrid, 0, U"Remove formant points between...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1197 MODIFY_KlattGrid_removeFormantPoints);
1198 praat_addAction1 (classKlattGrid, 0, U"Remove bandwidth points between...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1199 MODIFY_KlattGrid_removeBandwidthPoints);
1200 praat_addAction1 (classKlattGrid, 0, U"Remove amplitude points between...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1201 MODIFY_KlattGrid_removeAmplitudePoints);
1202 praat_addAction1 (classKlattGrid, 0, U"Modify coupling - ", nullptr, 0, nullptr);
1203 KlattGrid_MODIFY_ACTIONS_FB (Delta, delta formant)
1204 praat_addAction1 (classKlattGrid, 0, U"-- delta modify separator --", nullptr, 1, nullptr);
1205 KlattGrid_MODIFY_ACTIONS_FBA (Tracheal, tracheal formant)
1206 praat_addAction1 (classKlattGrid, 0, U"-- nasal modify separator --", nullptr, 1, nullptr);
1207 KlattGrid_MODIFY_ACTIONS_FB (TrachealAnti, tracheal antiformant)
1208
1209 praat_addAction1 (classKlattGrid, 0, U"Add delta formant point...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1210 MODIFY_KlattGrid_addDeltaFormantPoint);
1211 praat_addAction1 (classKlattGrid, 0, U"Add delta bandwidth point...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1212 MODIFY_KlattGrid_addDeltaBandwidthPoint);
1213 praat_addAction1 (classKlattGrid, 0, U"Remove delta formant points between...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1214 MODIFY_KlattGrid_removeDeltaFormantPoints);
1215 praat_addAction1 (classKlattGrid, 0, U"Remove delta bandwidth points between...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1216 MODIFY_KlattGrid_removeDeltaBandwidthPoints);
1217
1218 praat_addAction1 (classKlattGrid, 0, U"Modify frication -", nullptr, 0, nullptr);
1219 KlattGrid_MODIFY_ACTIONS_FBA (Frication, frication formant)
1220 praat_addAction1 (classKlattGrid, 0, U"-- frication modify separator --", nullptr, 1, nullptr);
1221
1222 praat_addAction1 (classKlattGrid, 0, U"Add frication bypass point...", nullptr, 1,
1223 MODIFY_KlattGrid_addFricationBypassPoint);
1224 praat_addAction1 (classKlattGrid, 0, U"Add frication amplitude point...", nullptr, 1,
1225 MODIFY_KlattGrid_addFricationAmplitudePoint);
1226 KlattGrid_REMOVE_POINTS_ACTION (FricationBypass, frication bypass)
1227 KlattGrid_REMOVE_POINTS_ACTION (FricationAmplitude, frication amplitude)
1228 praat_addAction1 (classKlattGrid, 0, U"Add formant and bandwidth tier...", nullptr, praat_DEPTH_1 + praat_HIDDEN,
1229 MODIFY_KlattGrid_addFormantAndBandwidthTier);
1230
1231 #undef KlattGrid_REMOVE_POINTS_ACTION
1232 #undef KlattGrid_MODIFY_ACTION_FB
1233 #undef KlattGrid_MODIFY_ACTION_FBA
1234
1235 praat_addAction1 (classKlattGrid, 0, U"Extract phonation -", nullptr, 0, nullptr);
1236 praat_addAction1 (classKlattGrid, 0, U"Extract pitch tier", nullptr, 1,
1237 CONVERT_EACH_TO_ONE__KlattGrid_extractPitchTier);
1238 praat_addAction1 (classKlattGrid, 0, U"Extract voicing amplitude tier", nullptr, 1,
1239 CONVERT_EACH_TO_ONE__KlattGrid_extractVoicingAmplitudeTier);
1240 praat_addAction1 (classKlattGrid, 0, U"Extract flutter tier", nullptr, 1,
1241 CONVERT_EACH_TO_ONE__KlattGrid_extractFlutterTier);
1242 praat_addAction1 (classKlattGrid, 0, U"Extract power1 tier", nullptr, 1,
1243 CONVERT_EACH_TO_ONE__KlattGrid_extractPower1Tier);
1244 praat_addAction1 (classKlattGrid, 0, U"Extract power2 tier", nullptr, 1,
1245 CONVERT_EACH_TO_ONE__KlattGrid_extractPower2Tier);
1246 praat_addAction1 (classKlattGrid, 0, U"Extract open phase tier", nullptr, 1,
1247 CONVERT_EACH_TO_ONE__KlattGrid_extractOpenPhaseTier);
1248 praat_addAction1 (classKlattGrid, 0, U"Extract collision phase tier", nullptr, 1,
1249 CONVERT_EACH_TO_ONE__KlattGrid_extractCollisionPhaseTier);
1250 praat_addAction1 (classKlattGrid, 0, U"Extract double pulsing tier", nullptr, 1,
1251 CONVERT_EACH_TO_ONE__KlattGrid_extractDoublePulsingTier);
1252 praat_addAction1 (classKlattGrid, 0, U"Extract spectral tilt tier", nullptr, 1,
1253 CONVERT_EACH_TO_ONE__KlattGrid_extractSpectralTiltTier);
1254 praat_addAction1 (classKlattGrid, 0, U"Extract aspiration amplitude tier", nullptr, 1,
1255 CONVERT_EACH_TO_ONE__KlattGrid_extractAspirationAmplitudeTier);
1256 praat_addAction1 (classKlattGrid, 0, U"Extract breathiness amplitude tier", nullptr, 1,
1257 CONVERT_EACH_TO_ONE__KlattGrid_extractBreathinessAmplitudeTier);
1258 praat_addAction1 (classKlattGrid, 0, U"-- extract glottal events--", nullptr, 1, nullptr);
1259 praat_addAction1 (classKlattGrid, 0, U"Extract PointProcess (glottal closures)", nullptr, 1,
1260 CONVERT_EACH_TO_ONE__KlattGrid_extractPointProcess_glottalClosures);
1261
1262 #define KlattGRID_EXTRACT_FORMANT_GRID_ACTION(Name,namef) \
1263 praat_addAction1 (classKlattGrid, 0, U"Extract " #namef "ormant grid", nullptr, 1, \
1264 CONVERT_EACH_TO_ONE__KlattGrid_extract##Name##FormantGrid);
1265 #define KlattGRID_EXTRACT_FORMANT_AMPLITUDE_ACTION(Name,name) \
1266 praat_addAction1 (classKlattGrid, 0, U"Extract " #name " formant amplitude tier...", nullptr, 1, \
1267 CONVERT_EACH_TO_ONE__KlattGrid_extract##Name##FormantAmplitudeTier);
1268
1269 praat_addAction1 (classKlattGrid, 0, U"Extract filters -", nullptr, 0, nullptr);
1270 praat_addAction1 (classKlattGrid, 0, U"Extract formant grid...", nullptr, praat_DEPTH_1 + praat_HIDDEN + praat_NO_API,
1271 CONVERT_EACH_TO_ONE__KlattGrid_extractFormantGrid); // deprecated
1272 KlattGRID_EXTRACT_FORMANT_GRID_ACTION (Oral, oral f)
1273 praat_addAction1 (classKlattGrid, 0, U"Extract amplitude tier...", nullptr, praat_DEPTH_1 + praat_HIDDEN + praat_NO_API,
1274 CONVERT_EACH_TO_ONE__KlattGrid_extractAmplitudeTier); // deprecated
1275 praat_addAction1 (classKlattGrid, 0, U"Extract formant grid (open phases)...", nullptr, praat_HIDDEN + praat_DEPTH_1,
1276 CONVERT_EACH_TO_ONE__KlattGrid_to_oralFormantGrid_openPhases);
1277 praat_addAction1 (classKlattGrid, 0, U"Extract oral formant grid (open phases)...", nullptr, 1,
1278 CONVERT_EACH_TO_ONE__KlattGrid_to_oralFormantGrid_openPhases);
1279 KlattGRID_EXTRACT_FORMANT_AMPLITUDE_ACTION (Oral, oral)
1280 KlattGRID_EXTRACT_FORMANT_GRID_ACTION (Nasal, nasal f)
1281 KlattGRID_EXTRACT_FORMANT_AMPLITUDE_ACTION (Nasal, nasal)
1282 KlattGRID_EXTRACT_FORMANT_GRID_ACTION (NasalAnti, nasal antif)
1283
1284 praat_addAction1 (classKlattGrid, 0, U"-- extract delta characteristics", nullptr, 1, nullptr);
1285 praat_addAction1 (classKlattGrid, 0, U"Extract delta formant grid", nullptr, 1,
1286 CONVERT_EACH_TO_ONE__KlattGrid_extractDeltaFormantGrid);
1287 KlattGRID_EXTRACT_FORMANT_GRID_ACTION (Tracheal, tracheal f)
1288 KlattGRID_EXTRACT_FORMANT_AMPLITUDE_ACTION (Tracheal, tracheal)
1289 KlattGRID_EXTRACT_FORMANT_GRID_ACTION (TrachealAnti, tracheal antif)
1290 praat_addAction1 (classKlattGrid, 0, U"-- extract frication characteristics", nullptr, 1, nullptr);
1291 KlattGRID_EXTRACT_FORMANT_GRID_ACTION (Frication, frication f)
1292 KlattGRID_EXTRACT_FORMANT_AMPLITUDE_ACTION (Frication, frication)
1293 praat_addAction1 (classKlattGrid, 0, U"Extract frication bypass tier", nullptr, 1,
1294 CONVERT_EACH_TO_ONE__KlattGrid_extractFricationBypassTier);
1295 praat_addAction1 (classKlattGrid, 0, U"Extract frication amplitude tier", nullptr, 1,
1296 CONVERT_EACH_TO_ONE__KlattGrid_extractFricationAmplitudeTier);
1297
1298 #undef KlattGRID_EXTRACT_FORMANT_AMPLITUDE_ACTION
1299 #undef KlattGRID_EXTRACT_FORMANT_GRID_ACTION
1300
1301 praat_addAction2 (classKlattGrid, 1, classPitchTier, 1, U"Replace pitch tier", nullptr, 1,
1302 MODIFY_KlattGrid_replacePitchTier);
1303 praat_addAction2 (classKlattGrid, 1, classRealTier, 1, U"Replace flutter tier", nullptr, 1,
1304 MODIFY_KlattGrid_replaceFlutterTier);
1305 praat_addAction2 (classKlattGrid, 1, classRealTier, 1, U"Replace power1 tier", nullptr, 1,
1306 MODIFY_KlattGrid_replacePower1Tier);
1307 praat_addAction2 (classKlattGrid, 1, classRealTier, 1, U"Replace power2 tier", nullptr, 1,
1308 MODIFY_KlattGrid_replacePower2Tier);
1309 praat_addAction2 (classKlattGrid, 1, classRealTier, 1, U"Replace open phase tier", nullptr, 1,
1310 MODIFY_KlattGrid_replaceOpenPhaseTier);
1311 praat_addAction2 (classKlattGrid, 1, classRealTier, 1, U"Replace collision phase tier", nullptr, 1,
1312 MODIFY_KlattGrid_replaceCollisionPhaseTier);
1313 praat_addAction2 (classKlattGrid, 1, classRealTier, 1, U"Replace double pulsing tier", nullptr, 1,
1314 MODIFY_KlattGrid_replaceDoublePulsingTier);
1315
1316 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"-- replace formant amplitudes --", nullptr, 1, nullptr);
1317
1318 #define KlattGrid_REPLACE_FORMANTGRID_ACTION(Name,namef) \
1319 praat_addAction2 (classKlattGrid, 1, classFormantGrid, 1, U"Replace " #namef "ormant grid", nullptr, 1, \
1320 MODIFY_KlattGrid_replace##Name##FormantGrid);
1321 #define KlattGrid_REPLACE_FORMANT_AMPLITUDE_ACTION(Name,namef) \
1322 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace " #namef "ormant amplitude tier...", nullptr, 1, \
1323 MODIFY_KlattGrid_replace##Name##FormantAmplitudeTier);
1324
1325 KlattGrid_REPLACE_FORMANTGRID_ACTION (Oral, oral f)
1326 KlattGrid_REPLACE_FORMANTGRID_ACTION (Nasal, nasal f)
1327 KlattGrid_REPLACE_FORMANTGRID_ACTION (NasalAnti, nasal antif)
1328 praat_addAction2 (classKlattGrid, 1, classFormantGrid, 1, U"-- replace coupling --", nullptr, 1, nullptr);
1329 KlattGrid_REPLACE_FORMANTGRID_ACTION (Tracheal, tracheal f)
1330 KlattGrid_REPLACE_FORMANTGRID_ACTION (TrachealAnti, tracheal antif)
1331 KlattGrid_REPLACE_FORMANTGRID_ACTION (Delta, delta f)
1332 praat_addAction2 (classKlattGrid, 1, classFormantGrid, 1, U"-- replace frication --", nullptr, 1, nullptr);
1333 KlattGrid_REPLACE_FORMANTGRID_ACTION (Frication, frication f)
1334 praat_addAction2 (classKlattGrid, 1, classFormantGrid, 1, U"Replace formant grid...", nullptr, praat_HIDDEN + praat_DEPTH_1,
1335 MODIFY_KlattGrid_replaceFormantGrid);
1336 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace voicing amplitude tier", nullptr, 1,
1337 MODIFY_KlattGrid_replaceVoicingAmplitudeTier);
1338 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace spectral tilt tier", nullptr, 1,
1339 MODIFY_KlattGrid_replaceSpectralTiltTier);
1340 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace aspiration amplitude tier", nullptr, 1,
1341 MODIFY_KlattGrid_replaceAspirationAmplitudeTier);
1342 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace breathiness amplitude tier", nullptr, 1,
1343 MODIFY_KlattGrid_replaceBreathinessAmplitudeTier);
1344 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace amplitude tier...", nullptr, praat_HIDDEN + praat_DEPTH_1,
1345 MODIFY_KlattGrid_replaceAmplitudeTier);
1346 KlattGrid_REPLACE_FORMANT_AMPLITUDE_ACTION (Oral, oral f)
1347 KlattGrid_REPLACE_FORMANT_AMPLITUDE_ACTION (Nasal, nasal f)
1348 KlattGrid_REPLACE_FORMANT_AMPLITUDE_ACTION (Tracheal, tracheal f)
1349 KlattGrid_REPLACE_FORMANT_AMPLITUDE_ACTION (Frication, frication f)
1350 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace frication amplitude tier", nullptr, 1,
1351 MODIFY_KlattGrid_replaceFricationAmplitudeTier);
1352 praat_addAction2 (classKlattGrid, 1, classIntensityTier, 1, U"Replace frication bypass tier", nullptr, 1,
1353 MODIFY_KlattGrid_replaceFricationBypassTier);
1354
1355 #undef KlattGrid_REPLACE_FORMANT_AMPLITUDE_ACTION
1356 #undef KlattGrid_REPLACE_FORMANTGRID_ACTION
1357
1358 praat_addAction2 (classKlattGrid, 1, classSound, 1, U"Filter by vocal tract...", nullptr, 1,
1359 CONVERT_ONE_AND_ONE_TO_ONE__Sound_KlattGrid_filterByVocalTract);
1360
1361 INCLUDE_MANPAGES (manual_KlattGrid)
1362 }
1363
1364 /* End of file praat_KlattGrid_init.cpp 1290*/
1365