#käi läbi morftasandil, kui on S // äkki content words ehk natuke laiem loend? # vaata syl tasandile, kui 1 on lahtine ja kokku 2 silpi (mõtle, mida teha siis, kui 2 silbi t alustab järgmist sõna) # vaata hääliku tasandile, et ei oleks :: ja esimeses silbi vokaalide hulgas @ _k _t _0 # vaata sõna tasandile, et ei oleks .? .naer .sosin (vaata veel lisamärke, mida välistada) # 1) välde: kui on 1LL > Q1; kui on : > Q3; muidu on Q2 # 2) vok algus ja lõpp aeg; kui on VV, siis kahe vokaali vaheline piir # 3) leia formandid 30 punktist erinevate lagedega; tuvasta optimaalne lagi ja kirjuta tabelisse ## VERsioon 2.0: # tabelisse lähevad kõik laed; optimaased laed selgitame välja pärast R-is clearinfo #tulem_rida$ = "" path$ = "/users/partel/ownCloud/EKSKFK/" #tulem$ = "subkorp" + tab$ + "file" + tab$ + "aeg" + tab$ + "otsing" + tab$ +"otsisõna" + tab$ + "fraas" + newline$ ## siit hakkab korpust läbi käima list = Read from file: path$ + "EKSKFK_avalik_nousolek.Table" faile = Get number of rows for xf to faile selectObject: list margend = Get value: xf, "start" if margend <> undefined stiil$ = Get value: xf, "stiil" fail$ = Get value: xf, "fail" sugu$ = right$ (fail$, 1) wav = Open long sound file: path$ +"SKK" +stiil$ + "_WAV/" + fail$ + ".wav" tg = Read from file: path$ +"SKK" +stiil$ + "_TG/" + fail$ + ".TextGrid" fail_dur = Get end time tulemPath$ = "/users/partel/ownCloud/proj/diftongid_icphs_2019/tmp_tulem_2018-10-22/dift_tulem_" +fail$ + ".txt" writeFile: tulemPath$, "fail" +tab$+ "sona" +tab$+ "haalik" +tab$+ "morf" +tab$+ "ftong" +tab$+ "valde" +tab$+ "vok1" +tab$+ "vok2" +tab$+ "vok_start" +tab$+ "vok_stop" +tab$+ "vok_piir" + tab$ + "lagi" # formandipunktide päised for f to 3 for g to 30 appendFile: tulemPath$, tab$ + "f"+string$(f)+"_"+string$(g) endfor endfor sonaKiht = 0 hKiht = 0 cvKiht = 0 sylKiht = 0 morfKiht = 0 hlKiht = 0 kihte = Get number of tiers for k to kihte k$ = Get tier name: k if k$ = "sõnad" sonaKiht = k elsif k$ = "häälikud" hKiht = k elsif k$ = "CV" cvKiht = k elsif k$ = "silbid" sylKiht = k elsif k$ = "morf" morfKiht = k elsif k$ = "häälelaad" hlKiht = k endif endfor # täpsustame formandianalüüsi seaded nPoints=30 n10HzSteps=201 ; default 401 lowestFormantCeiling=4000 ;default 3000 femaleCeilingIncrease=500 ;default 1000 if sugu$ = "N" maxFormant = 5500 adjustedLowestFormantCeiling = lowestFormantCeiling+femaleCeilingIncrease elsif sugu$ = "M" maxFormant = 5000 adjustedLowestFormantCeiling = lowestFormantCeiling endif # käime läbi morftasandi ja leiame sisusõnad: [ACHIGSUY] morfid = Get number of intervals: morfKiht for m to morfid selectObject: tg morf$ = Get label of interval: morfKiht, m if index_regex(morf$, "_[ACHIGSUY]_") > 0 m_start = Get start time of interval: morfKiht, m m_stop = Get end time of interval: morfKiht, m syl_esim = Get high interval at time: sylKiht, m_start syl_viim = Get low interval at time: sylKiht, m_stop # esimene silp on lahtine syl_esim$ = Get label of interval: sylKiht, syl_esim if left$(syl_esim$, 1) = "1" and right$(syl_esim$, 1) = "L" # kontrollime, kas viimasest silbist on ka mõni vokaal selles sõnas syl_viim_start = Get start time of interval: sylKiht, syl_viim cv_tmp1 = Get high interval at time: cvKiht, syl_viim_start cv_tmp2 = Get low interval at time: cvKiht, m_stop tmp_vok$ = "" for cv from cv_tmp1 to cv_tmp2 tmp_cv$ = Get label of interval: cvKiht, cv tmp_vok$ = tmp_vok$ + tmp_cv$ endfor if index(tmp_vok$, "V") = 0 syl_viim -= 1 endif syl_viim$ = Get label of interval: sylKiht, syl_viim # sõna pikkus on 2 silpi if syl_viim - syl_esim = 1 and left$(syl_viim$,1 ) = "2" # nüüd kontrollime sõnatasandit, et ei oleks sosin ja naer jms sona = Get high interval at time: sonaKiht, m_start sona$ = Get label of interval: sonaKiht, sona tmp_kontroll = index(sona$, ".sisse") + index(sona$, ".naer") + index(sona$, ".vaikne") + index(sona$, ".?") + index(sona$, ".0") + index(sona$, ".Hv") + index(sona$, ".takerd") + index(sona$, ".sosi") + index(sona$, "-") + index(sona$, "+") tmp_kontroll += index(sona$, ".inglise") + index(sona$, ".falsett") + index(sona$, ".vene") + index(sona$, ".saksa") + index(sona$, ".soome") + index(sona$, ".mikrofonist_eemal") + index(sona$, ".rootsi") + index(sona$, ".norra") + index(sona$, ".ladina") + index(sona$, ".hispaania") + index(sona$, ".aeglasem") + index(sona$, ".liivi") if tmp_kontroll = 0 # nüüd käime läbi häälikutasandi ja jätame välja kõik venitused jms h_esim = Get high interval at time: hKiht, m_start h_viim = Get low interval at time: hKiht, m_stop haalik$ = "" for h from h_esim to h_viim h$ = Get label of interval: hKiht, h haalik$ = haalik$ + h$ endfor tmp_kontroll = index(haalik$, "::") # kärinad jm: @ _k _t syl_esim_stop = Get end time of interval: sylKiht, syl_esim h_viim = Get low interval at time: hKiht, syl_esim_stop # kas silp ikka lõppeb vokaaliga? cv_v2$ = Get label of interval: cvKiht, h_viim if cv_v2$ = "V" # leiame esimese vokaali repeat cv_v1$ = Get label of interval: cvKiht, h_esim h_esim = if cv_v1$ <> "V" then h_esim+1 else h_esim fi until cv_v1$ = "V" or h_esim = h_viim for h from h_esim to h_viim h$ = Get label of interval: hKiht, h tmp_kontroll += index(h$, "_k") + index(h$, "_t") + index(h$, "_0") + index(h$, "@") + index(h$, "_~") + index(h$, "_=") + index(h$, "_F") endfor if tmp_kontroll = 0 and h_viim-h_esim <2 # loodetavasti oleme välja sorteerinud sobivad sõnad ftong$ = if h_viim-h_esim = 0 then "mono" else "dift" fi vok_start = Get start time of interval: hKiht, h_esim vok_stop = Get end time of interval: hKiht, h_viim vok_piir = Get end time of interval: hKiht, h_esim vok_piir = if ftong$ = "mono" then undefined else vok_piir fi vok1$ = Get label of interval: hKiht, h_esim vok2$ = Get label of interval: hKiht, h_viim # vaatame veel häälelaadi kihile, ei ei käriseks: kariseb = 0 if hlKiht > 0 hl_start = Get high interval at time: hlKiht, vok_start hl_stop = Get low interval at time: hlKiht, vok_stop hl_start$ = Get label of interval: hlKiht, hl_start hl_stop$ = Get label of interval: hlKiht, hl_stop if hl_start$ = "kärin" or hl_stop$ = "kärin" or hl_stop > hl_start kariseb = 1 endif endif if kariseb = 0 # määrame välte valde$ = "Q2" if right$(vok2$, 1) = ":" valde$ = "Q3" elsif ftong$ = "mono" and length(replace_regex$(vok1$, "_.", "", 0)) = 1 valde$ = "Q1" endif ### FORMANDID erinevate lagedega @formandilaed endif endif endif endif endif endif endif endfor selectObject: tg plusObject: wav Remove kp$ = date$() appendInfoLine: fail$, " läbitud: " + kp$ #pause endif endfor selectObject: list Remove #### protseduur formandilagede leidmiseks procedure formandilaed aken_start = if vok_start-0.05>0 then vok_start-0.05 else 0 fi aken_stop = if vok_stop+0.05