#script: measureF1F2F3F4.praat
#author: Nicolai Pharao (based on sibilant script by Nicolai Pharao and Jane Stuart-Smith)
#date: September 2023
#update: modificeret juli 2024
#Praat version: 6.3.17


#Brugsanvisning
#læg lydfil(er) og tilhørende textgrid(s) i den samme mappe sammen med dette script. Der bør ikke være andre filer i mappen
#sørg for at lydfil og textgrid har nøjagtigt det samme navn (bortset fra filextension som er .wav for lyden og .TextGrid for textgrid)
#gem en kopi af dette script i den samme mappe
#åben Praat
#luk Picture-vinduet
#i Objects-vinduet vælges Open Praat script... i Praat-menuen øverst til venstre
#find scriptet i mappen og vælg Open
#dette åbner scriptet
#gå op i Run menuen og klik på Run (eller tryk Ctrl+R (pc) eller Cmd+R (mac))
#herved åbnes et vindue med en menu, hvor du skal indtaste oplysninger, som scriptet skal bruge
#man skal skrive navnet på den outputfil, scriptet genererer, og dette navn skal slutte på .txt
#outputfilen er en tabel med målinger af de første fire formanter i specificerede intervaller
#
#tjek at de tier-numre der angives i menuen passer til den måde du har struktureret dit textgrid på
#klik på OK
#nu kører scriptet, det gennemgår dit textgrid og foretager målinger af F1, F2, F3 og F4. Desuden læser scriptet oplysninger om filnavn og det segment du har angivet. 
#Oplysningerne gemmes i outputfilen automatisk og de vises også i Info-vinduet
#Når scriptet er færdigt ligger outputfilen i samme mappe som lydfilerne

#Tip: der skal stå noget i segmentlabel_tier intervallerne, ellers springer scriptet dem over. Det er smart hvis der står noget fornuftigt, dvs Vokaler (og ikke Ghita Nørby eller 808), men det er ligemeget hvad der står
#Tip: scriptet kan godt læse IPA-symboler men pas på med mellemrum og den slags
#Tip: undgå mellemrum i filnavne, brug _ i stedet for 


form måling i periodiske lyde
	word sound_extension .wav
	word textGrid_extension .textGrid
	comment der bliver lavet et ourput som kommer til at ligge i samme mappe som lydfil og textgrid
	comment skriv navnet på output-filen (skal slutte på .txt)
	text filename NAVNETPAAMINTABEL.txt 
	comment skriv nummeret på det tier der indeholder ordet
	natural word_tier 2
	#comment enter tier number which contains speaker (= 'speaker')
	#natural speaker_tier 2
	comment skriv nummeret på det tier der indeholder segmenter, der skal måles på
	natural segmentlabel_tier 1
	#comment enter number of tier which contains preceding (= 'preceding')
	#natural preceding_tier 4
	#comment skriv hvad det er du vil have målt
	#word measure F1
endform

clearinfo

#make column headlines for output file
fileappend "'filename$'" Label,F1_mean,F2_mean,F3_mean, F4_mean, Sound,Time'newline$'

#get filenames and number of soundfiles in folder
mySounds = Create Strings as file list... sounds *'sound_extension$'
nSounds = Get number of strings
#for each soundfile open with matching textgrid for formantanalysis
for iSound to nSounds
	select mySounds
	sound$ = Get string... iSound

	name$ = sound$ - sound_extension$
	printline 'name$'
	
	textGrid$ = name$ + textGrid_extension$
	
	mySound = Open long sound file... 'sound$'
	mytextGrid = Read from file... 'textGrid$'

	select mytextGrid

	ninterval = Get number of intervals... segmentlabel_tier
	printline 'ninterval'

		for iinterval to ninterval
			
		   segmentlabel$ = Get label of interval... segmentlabel_tier iinterval
				#the line below speciies which vowels to measure. Check they are the ones you want and that labelling corresponds to your format
				if index(segmentlabel$, "u") > 0
				#only if the segmentlabel matches criteria above is the label and corresponding word shown
				segmentlabel$ = Get label of interval... segmentlabel_tier iinterval	
				word$ = Get label of interval... word_tier iinterval
				printline 'segmentlabel$', 'speaker$'
				printline		
				#locate relevant interval to open editor and perform measurement
				time1 = Get starting point... segmentlabel_tier iinterval
 				time2 = Get end point... segmentlabel_tier iinterval
				duration = (time2 - time1)*1000
	
				#select files and open editor, make measurements, and close editor

				select mySound
				plus mytextGrid
				
					Edit
					editor TextGrid 'name$'

					Select... time1 time2
					Zoom to selection
					Zoom out
					f1 = Get first formant
					f2 = Get second formant
					f3 = Get third formant
					f4 = Get fourth formant
					Close
					endeditor
			#add measures to outputfile
			fileappend "'filename$'" 'segmentlabel$','f1:0','f2:0','f3:0','f4:0','name$','duration''newline$'
			
			endif
			#look at textgrid again and continue procedure until all intervals in the segmentlabel_tier have been read
			select mytextGrid
		endfor

endfor