FrontPage

Counter: 4757, today: 3, yesterday: 1

Praat Script Tips

Check your Praat Version

requiredVersion = 5209
# commas omitted (the above means "version 5.2.09")

if praatVersion < requiredVersion
    exit Your Praat (Version 'praatVersion') is too old. Use Version 'requiredVersion' or newer.
endif

Emulation of Perl's split function

string$ = "hoge/piyo/foo/bar"
delimiter$ = "/"

if index_regex("",delimiter$) = 1
    lastSub = length(string$)-1
    for i from 0 to lastSub
        arr$[i] = mid$(string$,i+1,1)
    endfor
else
    lastSub = 0
    arr$[lastSub] = string$
    repeat
        lastValue$ = arr$[lastSub]
        delimiterPos = index_regex(lastValue$,delimiter$)
        if delimiterPos <> 0
            arr$[lastSub] = left$(lastValue$,delimiterPos-1)
            lastSub = lastSub+1
            arr$[lastSub] = replace_regex$(right$(lastValue$,length(lastValue$)-delimiterPos+1),delimiter$,"",1)
        endif
    until delimiterPos = 0
endif

clearinfo
for i from 0 to lastSub
    hop$ = arr$[i]
    printline 'i''tab$''hop$'
endfor
0	hoge
1	piyo
2	foo
3	bar
$string = "hoge/piyo/foo/bar";
$delimiter = "/";

@arr = split(/$delimiter/,$string);

for ( $i = 0 ; $i <= $#arr ; $i++ ) {
    print "$i\t$arr[$i]\n";
}

Get the path separator for your platform

input$ = "c:/foo/bar/hoge.TextGrid"
output$ = "c:/foo/bar/result"
#input$ = "c:\foo\bar\hoge.TextGrid"
#output$ = "c:\foo\bar\result"

if windows = 1
    pathSep$ = "\"
    notPathSep$ = "/"
elsif macintosh + unix >= 1
    pathSep$ = "/"
    notPathSep$ = "\"
else
   exit Sorry. Unknown platform.
endif
input$ = replace$(input$,notPathSep$,pathSep$,0)
output$ = replace$(output$,notPathSep$,pathSep$,0)

clearinfo
printline 'input$'
printline 'output$'
c:\foo\bar\hoge.TextGrid
c:\foo\bar\result

Get the path and filename from a string

dir$ = "c:/hoge/piyo/foo.TextGrid"
#dir$ = "c:\hoge\piyo\foo.TextGrid"

if windows + macintosh + unix = 0
   exit Sorry. Unknown platform.
endif

path$ = left$(dir$,rindex_regex(dir$,"[/\\]"))
filename$ = right$(dir$,length(dir$)-rindex_regex(dir$,"[/\\]"))
## if you have the path separator (pathSep$) already, you can write:
#path$ = left$(dir$,rindex(dir$,pathSep$))
#filename$ = right$(dir$,length(dir$)-rindex(dir$,pathSep$))

clearinfo
printline 'path$'
printline 'filename$'
c:/hoge/piyo/
foo.TextGrid

Upper to Lower Case

str$ = "ABCDEFG"

newstr$ = replace_regex$(str$,"[A-Z]","\L&",0)

echo 'newstr$'
abcdefg

Get the tiernumbers from tiernames

file$ = "N:\sample\sample.TextGrid"

Read from file... 'file$'

segTierNum = 0
wordTierNum = 0
n = Get number of tiers
for i from 1 to n
    currentTier$ = Get tier name... i
    if currentTier$ = "Seg"
        segTierNum = i
    elsif currentTier$ = "Word"
        wordTierNum = i
    endif
endfor
if segTierNum = 0
    exit Seg tier not found in 'file$'
elsif wordTierNum = 0
    exit Word tier not found in 'file$'
endif

clearinfo
printline Seg tier:  'segTierNum'
printline Word tier: 'wordTierNum'

Recover the Object List to the previous state

# Before trying this script, make several objects 
# on the Object List and select some of them.

selectedObjectNum = numberOfSelected()
for i from 1 to selectedObjectNum
    selectedID[i] = selected(i)
endfor

select all
pause All objects are selected. Press "Continue" to recover the previous state.

if selectedObjectNum <> 0 
    select selectedID[1]
    for i from 2 to selectedObjectNum
        plus selectedID[i]
    endfor
endif

Front page   New List of pages Search Recent changes   Help   RSS of recent changes