½ ц ррьр × ж п р хж ь

advertisement
Sripte-Shreiben in Praat
Frank K
ugler
(September 2006)
Die Grundlagen des Praat Sripting:
1. Kenntnis der Befehle in Praat
{ Mein erstes Sript
{ Der Sripteditor
2. History Funktion in Praat
{ Paste History
{ Syntax und Layout eines Sripts
3. Variablen beim Sripting
{ Numerishe und Stringvariablen
{ Denition von Variablen
{ vordenierte Variablen
4. Shleifen bzw. Sprunge im Sript
{ Shleifen
{ Sprunge
5. Nutzlihes
1
Kenntnis der Befehle in Praat
Ein Praatsript fuhrt Kommandos in Praat aus, d.h. alle Befehle, die in Praat vorhanden sind, konnen in einem
Sript verwendet werden. Dazu ist es notwendig zu wissen, welhe Befehle in welhen Fenstern vorhanden sind.
Ein Praatsript ist nihts anderes als eine Auistung vershiedener Praat-Kommandos.
Wihtige Befehle benden sih im Menu Query in den vershiedenen Fenstern. Aber auh andere Befehle konnen
und sollten genutzt werden.
Beispiel: Mein erstes Sript
Nehmen wir an, dass ein ausgewahlter Sound { in unserem Beispiel 'verwahting' { zweimal abgespielt werden soll.
Um das Ziel zu erreihen gibt es zwei Moglihkeiten:
1. Auswahlen des Sounds
Ankliken der Auswahl Play
Erneutes Ankliken der Auswahl Play
2. Ein Sript, das das doppelte Ankliken ubernimmt (Beispielsript 1)
Dies ist nur ein simples Beispiel fur ein Sript, zeigt jedoh, dass man einzelne Befehle naheinander ablaufen lasst.
Spater wenden wir uns noh komplexeren Problemen zu.
Wie erstelle ih ein Sript?
Im Men
u der Praat Objets: Control/New sript
Einf
ugen der Befehle (z.B. Play -neue Zeile- Play)
Um das Sript zu starten, muss im Sripteditor im Menu Run/Run angeklikt werden.
2
History
Funktion in Praat
Paste History
Praat maht das Shreiben eines Sripts sehr einfah: Es bietet eine so genannte history -Funktion. Das Sript wird
geshrieben, ohne dass man die einzelnen Befehle selber eintippt. Dazu muss man einmal die Shritte durhfuhren,
die das Sript automatish erledigen soll. Das obige Beispiel Mein erstes Sript erhalt man so durh folgende
Prozedur:

1. One
ein Sriptfenster (Praat Objets: Control/New Sript)
2. Wahle die Funktion: Edit/Clear history
3. Wahle den Sound 'verwahting' aus
4. Klike links in der Menuleiste auf 'Play'
5. Klike erneut 'Play'
6. Wahle im Sriptfenster die Funktion: Edit/Paste history
7. Es ersheint derselbe Sriptinhalt wie eben von Hand eingegeben
Syntax und Layout eines Sriptes
Syntax: Alle Befehle, die Praat kennt (entweder in den Objets oder im Editor) k
onnen verwendet werden.
Die Befehle im Sript erhalten genau den Namen, den der jeweilige Befehl im Menu hat, z.B. 'Play'.
Vorsiht: Gro- und Kleinshreibung beahten!
Layout: Freizeihen/Tabstops werden vom Sript u
berlesen
Layout: Kommentare werden durh # ; oder ! markiert, z.B.
# Hier beginnt das Playsript
Play
Play
Layout: Ein Befehl pro Zeile und eine Zeile pro Befehl
Es gibt die Moglihkeit lange Zeilen zu trennen, wobei die folgende Zeile mit drei Punkten beginnen muss
(...hier geht die vorherige Befehlszeile weiter)
2
3
Variablen beim Sripting
Variablen
Das einzige, womit man sih beim Praat-Sripting anfreunden muss, sind Variablen und Shleifen / Sprunge (s.
nahsten Abshnitt). Variablen benotigt man, weil man in der Regel eine Analyse immer wieder an vershiedenen
Datensatzen durhfuhren will. Durh die history-Funktion erhalt man den Befehl mit den dazugehorigen \festen"
Werten, die dann als Variable kodiert werden mussen.
Zum Beispiel: selet Sound verwahting | vs. | selet Sound 'dateiName$'
Numerishe und Stringvariablen
Praat kennt grundsatzlih zwei Typen von Variablen: Numerishe Variablen und Stringvariablen. Erstere enthalten
naturlihe Zahlen, letztere jede Art von Zeihen.
Eine numerishe Variable wird deniert als ein Variablenname, z.B.:
intervallstart = 0.02
intervallend = 0.04
Eine Stringvariable wird deniert als ein Variablenname plus Dollarzeihen, z.B.:
intervalltext$ = "Beispiel text"
Denition von Variablen
Variablen konnen auf drei Arten mit Werten belegt bzw. deniert werden. Die erste M
oglihkeit geshieht
innerhalb des Sripts und ist oben beshrieben. Der Variablenname muss mit einem Wert gleihgesetzt werden:
a = 0.02
fileName$ = "Test.wav"
Die zweite Moglihkeit besteht darin, dass das Ergebnis eines Kommandos einer Variable zugewiesen wird. Z.B.
will man in einem TextGrid wissen, wie viele Intervalle gelabelt wurden:
b = Get number of intervals... 1
Die dritte Moglihkeit der Variablenbelegung besteht darin, dass man zu Beginn des Sripts Variablenwerte `von
auen' eingibt mit Hilfe eines Formulars (s. 6.1 im Sripting Tutorial Arguments to the sript) :
# Formularbeginn
form Bitte Namen eingeben!
word Name
endform
# Sriptbeginn
selet 'name$'
Play
vordenierte Variablen
In Praat gibt es einige vordenierte Variablen, z.B. tab$ (s. Abshnitt 5.1 im Sripting Tutorial)
3
4
Shleifen bzw. Spru
 nge im Sript
Shleifen
Zunahst zu den Shleifen (s. Praat Sripting Tutorial 5.4). Hier wird exemplarish die Shleife for ... to ... vorgestellt. Als Beispiel nehmen wir das TextGrid verwahting, in dem u.a. die Silbengrenzen gelabelt sind. Unsere
Aufgabe besteht darin, jeweils den Beginn einer Silbe zu dokumentieren (um mit Hilfe dieses Zeitpunktes eine
weitere Analyse zu betreiben, auf die wir hier in diesem Beispiel verzihten).
Den Startpunkt eines Intervalls erhalt man mit dem Befehl Get starting point... Tier Interval aus dem Men
u Query.
Die Shleife funktioniert folgendermaen:
Es wird eine Zahlvariable (X), eine Startvariable (Y) und eine Endvariable (Z) benotigt.
for X from Y to Z
Kommandos, die ausgefuhrt werden sollen
endfor
Die Werte der Variablen:
Die Zahlvariable kann jede beliebige Variable sein (z.B. `i').
Die Startvariable sollte in diesem Beispiel das erste Intervall sein, also 1.
Die Endvariable sollte in diesem Beispiel das letzte Intervall sein, also 13.
Woher kommen die Werte f
ur die Start- und Endvariable?
Entweder durh Festlegung im Sript: for i from 3 to 10 (vom 3. bis zum 10. Intervall)
oder eher exibel durh Abfrage der Anzahl der Intervalle eines TextGrids (Befehl: Get number of intervals... Tier ).
noi = Get number of intervals... Tier
for i from 1 to noi
start = Get starting point... Tier Interval
endfor
Fehlt nur noh die Dokumentation der Startpunkte: z.B. mit Hilfe des Befehls printline.
noi = Get number of intervals... Tier
for i from 1 to noi
start = Get starting point... Tier i
printline Start = 'start'
endfor
Sprunge
Sprunge im Sript (s. Sripting Tutorial 5.3) erhalt man durh If -Abfragen. In unserem Beispiel wollen wir die
Startpunkte der Silben dokumentieren, aber nur die akzentuierten Silben, die im TextGrid zusatzlih mit einem *
gekennzeihnet sind.
Die Syntax, die einzuhalten ist, funktioniert folgendermaen:
if Variable = Denition, z.B. *
#Dies ist unsere akzentuierte Silbe - also messe den Anfang
else
#Dies ist eine andere Silbe - mahe nihts
endif
Um herauszunden, welhe Silbe mit einem * gekennzeihnet ist, m
ussen wir den gelabelten Text vergleihen mit
unserer Denition in der if -Abfrage. Befehl: Get label of interval... Tier Interval
noi = Get number of intervals... Tier
for i from 1 to noi
label$ = Get label of interval... Tier i
if label$ = "nsi*"
start = Get starting point... Tier i
printline Start = 'start'
endif
endfor
4
5
Nu
 tzlihes
Der Befehl pause
Der Befehl eho bzw printline
Der Befehl Create strings as le list...
Der Befehl fileappend Pfad
Befehle in vershiedenen Fenstern
Ein Sript als Befehl in ein Praat-Menu hinzufugen
Hilfe
Dieser Befehl ermogliht es, dass ein Skript angehalten wird. Vorteil beim Sripting: Man kann bei Fehlern
im Skript Shritt fur Shritt (also Kommando fur Kommando) nahvollziehen, was das Sript mit welher Datei
wann maht. Vorteil im Sriptablauf: Man kann z.B. bei der Messung von Silbenintervallen (s. oben) vor jeder
Messung eine Pause einfugen, um im TextGrid die Silbengrenzen zu kontrollieren.
Diese Befehle steuern die Ausgabe von Text und Variablen im Info Window. Mit dem Befehl eho lasst sih daruber
hinaus auh im Zusammenhang mit pause jeder Variablenwert ausgeben (sinnvoll bei der Fehlersuhe).
Mit diesem Befehl kann man den Inhalt eines Ordners in eine Liste einlesen, um z.B. alle Dateien dieses Ordners
zu onen (s. openall.sript).
Text
Dieser Befehl ermogliht es, Informationen (=Analyseergebnisse) in Dateien zu shreiben - statt die Ergebnisse ins
Info Window auszugeben.
Befehle in den Objets vs. Befehle im Editor
Eine Fehlerquelle beim Sripten ist die Verwendung von Befehlen eines jeweils anderen Fensters. Will man zum
Beispiel niht den ganzen Sound abspielen, sondern nur ein Stukhen, so kann man im Editor den Befehl Selet/Selet 0.5 0.7 ausfuhren, wodurh die Zeit zwishen 0.5 und 0.7 Sekunden markiert wird. Will man nun den
bereits bekannten Befehl 'Play' ausfuhren erhalt man eine Fehlermeldung 'Not available for urrent seletion'. Das
heit, dass der Befehl aus den Praat Objets niht verfugbar ist im Editor. Fur das Sript gibt es den Befehl
endeditor (Siehe im Sripting Tutorial, Kapitel 7, Sripting the editors).
Jedes Sript kann in ein beliebiges Menu eingebaut werden mit dem Befehl im Sriptfenster: File/Add to menu.
Es gibt 'xed' Menus; das sind z.B. New Read Write in den Objets. Und es gibt 'dynami' Menus; das gilt z.B.
nur fur LongSounds.
Nah dem Ausfuhren dieses Befehls ersheint im jeweiligen Menu ein neuer Befehl, der das Sript ausfuhrt.
(Naturlih kann man ein Sript auh jedes Mal onen (File/Open sript...) und die 'Run'-Funktion betatigen.)
Praat bietet eine sehr ausfuhrlihe und ubersihtlihe Anleitung zum Sripten: Help/Sripting Tutorial.
Hinweis
Es gibt mitlerweile eine groe Auswahl an Sripten, die aus dem Netz zu laden sind (s. http://www.praat.org).
Ein letzter Hinweis:
Jedes Sript enthalt am Anfang mindestens einen Fehler, aber durh Fehler lernt man :-)

Ubungen
1. Ein Sound soll automatish mit einem dazugehorigen TextGrid mit vier 'tiers' im Editor geonet werden.
Dazu soll ein neuer Befehl in den Objets unter dem Menupunkt Read eingefugt werden. Das zu erstellende
TextGrid soll ein 'pointtier' und drei 'intervaltiers' enthalten mit den Namen 'Ton', 'Laut', 'Silbe' und 'Text'.
2. Messung von Silbendauern: Es liegt ein TextGrid vor, in dem alle Silben einer Phrase markiert sind. Die
Dauer der Silben soll gemessen werden und das Ergebnis soll im Info Window angezeigt werden bzw. in eine
Datei geshrieben werden.
3. In einem Ordner sind 100 Testsatze gespeihert, die zuvor aus einem LongSound herausgeshnitten und
gelabelt wurden. Der Experimentleiter will sie naheinander uberprufen. Dazu kann man ein Sript shreiben,

das sih der Funktion Create Strings as FileList und der Onen
sowie Edit -Funktion bedient.
5
Download