Praat 2: scripting
Wat zijn scripts?
Overzicht
Scripts
1. 2.
•
• •
Wat zijn scripts? Interactie met scripts • • •
Open Run Notities
3.
Basiselementen van scripts
4.
Fonetische analyses met scripts
• • •
Een manier om herhaalde taken te automatiseren Denk aan het schrijven van macro’s in andere applicaties, zoals Excel Scripts zijn gewone tekst files: – –
•
Commands, variables, formulas, jumps en loops Selecteren Analyseren
dat betekent dat ze gemaakt kunnen worden met elk programma waarmee je (platte) tekst kunt editen in PRAAT zit ook een script editor
Belangrijk: lees de Scripting tutorial in PRAAT Scripting tutorial); zie ook de (onder Help Formulas tutorial
1
2
Interactie met scripts •
Interactie met scripts
Om een nieuw script te maken: –
•
PRAAT Object window: Control
Als je in het script notities wilt maken:
New Praat Script
Om een bestaand script te openen: –
Control
• •
Open Praat Script...
•
Om een script uit te voeren: Script editor menu Run
•
Om slechts een deel van het script uit te voeren: selecteer het deel dat je wilt uitvoeren, klik Run Selection
! Of # vooraan de regel zetten (voor elke nieuwe regel!) Alle regels die beginnen met deze tekens worden door PRAAT genegeerd
3
4
Interactie met scripts
Interactie met scripts
Als je in het script notities wilt maken: • •
Voor een overzichtelijke lay-out:
! Of # vooraan de regel zetten (voor elke nieuwe regel!) Alle regels die beginnen met deze tekens worden door PRAAT genegeerd
• • •
5
spring in met enkele spaties of een tab vooraan de regel spaties en tabs aan het begin van regels worden niet gelezen door PRAAT. ook witregels worden genegeerd (maar wel geteld in de ‘regelnummering’ bij foutmeldingen!)
6
1
Interactie met scripts
Interactie met scripts
Voor een overzichtelijke lay-out: • •
spring in met enkele spaties of een tab vooraan de regel spaties en tabs aan het begin van regels worden niet gelezen door PRAAT. ook witregels worden genegeerd (maar wel geteld in de ‘regelnummering’ bij foutmeldingen!)
•
•
PRAAT-scripts hoeven geen extensie te hebben als je ze opslaat, maar het mag wel.
•
Je kunt de extensie .txt toevoegen als je het ook zonder PRAAT wilt kunnen inlezen
•
Handig is om het .script te noemen
7
8
Basiselementen van scripts •
Commands
Commands: instructies aan PRAAT om bepaalde acties uit te voeren op één of meer Objects (Sounds, TextGrids etc.), of op het Picture window To Pitch…
•
Arguments: vaak de settings uit een dialoogbox
•
Variables: categorieën waarin je informatie opslaat en waarmee je bewerkingen gaat uitvoeren
To Pitch… 0 75 600
– –
numeriek tekst (string) •
• • •
f0 = Get pitch…
Commands • Corresponderen meestal met acties die ook met de knoppen uitgevoerd kunnen worden • Beginnen meestal met een hoofdletter • Als je niet zeker bent over de opmaak van een command:
Let op: begint nooit met een hoofdletter!
–
Formules: numerieke of string-functies om de waarden van variabelen te manipuleren Jumps: gebruikt voor het maken van conditionele statements Loops: om gedeeltes van het script te herhalen
–
voer het met de hand uit en kies dan Paste History (Ctrl-h) Let op: voordat je een history gaat ‘opnemen’: eerst Clear history
9
10
Arguments Arguments
Variables To Formant (burg)… 0 5 5500 0.025 50
•
Specificeren Commands die eindigen in “…”
•
Corresponderen meestal met settings uit een dialoogbox (popup-formuliertje)
•
Zowel numerieke als tekst-argumenten worden geschreven zonder aanhalingstekens, met spaties ertussen
•
Ook bijv. de correlaten van het kader voor een plaatje in het Teken-venster.
– –
Numerieke variabelen: numerieke waarden String variabelen: ketens van karakters
aBc_23 •
Alle variabelen moeten starten met een kleine letter (anders
• •
Namen van variabelen kun je zelf definiëren Namen van variabelen mogen geen spaties, ! of ; of # bevatten
•
De naam van een variabele tussen enkele aanhalingstekens wordt vervangen door de waarde van de variabele
probeert PRAAT het te interpreteren als commands)
(x-as en y-as, ieder twee correlaten van tekenraster)
•
Variables • Twee types:
Gebruik Paste History
Select outer viewport… 1 6 1 4
11
12
2
Numerieke variabelen
Numerieke variabelen Typ over in een nieuw script:
•
= is de variable assignment operator –
•
Bijv.: myNumber = 12 slaat de numerieke waarde 12 op in de variabele myNumber
PRAAT bevat een aantal voorgedefinieerde mathematische functies die je kunt gebruiken om de waarden van numerieke variabelen te manipuleren (zie sectie 4 van de Formulas tutorial) –
Bijv.: myNewNumber = sin(myNumber) kent de sinus van myNumber toe aan de nieuwe variabele myNewNumber
Sla dit script op als numeric-variables.script 14 Klik op Run
13
Numerieke variabelen
String-variabelen •
String-variabelen moeten eindigen met het karakter $
•
String-variabelwaarden moeten tussen dubbele aanhalingstekens staan (anders denkt PRAAT dat het variabelnamen zijn) –
•
De naam van een variabele tussen enkele aanh. wordt vervangen door de waarde van de variabele –
•
Bijv.: myString$ = "hello" kent de string hello toe aan de variabele myString$
Bijv.:
myString$ = “hello” print I say ‘myString$’
Een aantal voorgedefinieerde string-functies kan gebruikt worden om de waarden van string-variabelen te manipuleren (zie sectie 5 van de Formulas tutorial)
15
String-variabelen
16
String-variabelen
Typ over in een nieuw script:
Sla dit script op als string-variables.script
17 Klik op Run
18
3
Jumps • •
Jumps Typ over in een nieuw script:
Worden gebruikt om conditionele uitspraken te creëren Syntax: if condition Alle statements die in een if-condition staan worden alleen uitgevoerd als de conditie waar is else Alle statements die in een if-condition staan worden alleen uitgevoerd als de conditie niet waar is endif
Sla dit script op als if-jump.script 19
Klik op Run
20
Loops
Jumps •
Alles wat binnen de loop valt wordt herhaald uitgevoerd
•
Drie verschillende loop-constructies in PRAAT scripting taal:
•
For-loops: alles wat binnen dit type loop staat wordt een vaststaand aantal keer uitgevoerd
•
Repeat-loops: alles wat binnen dit type loop staat wordt uitgevoerd tot aan een bepaalde conditie is voldaan
•
While-loops: alles wat binnen dit type loop staat wordt uitgevoerd zo lang een bepaalde conditie waar is
21
Loops
22
Loops Typ over in een nieuw script:
For-loops • Syntax: for variable from exp1 to exp2 alle statements die hierin genoemd worden zullen n keer worden uitgevoerd, n representeert het aantal vermeerderingen met een stap van 1 tussen de getallen exp1 en exp2 endfor
Sla dit script op als for-loop.script 23
Klik op Run
24
4
Loops + Jumps
Loops
Pas het script ‘for-loop.script’ als volgt aan met een if-jump: In een for-loop kun je ook andere forloops of if-jumps inbedden, zoals in dit script met een if-jump is gedaan.
Sla dit script op als for-loop_if-jump.script Klik op Run
25
Loops + Jumps
26
Fonetische analyses Het uitvoeren van akoestische analyses •
In het SoundEditor-venster kun je interactief allerlei akoestische analyses doen (toonhoogte, formanten, pulses, spectra, etc.) en er allerlei informatie uit extraheren.
•
Met een script kun je dezelfde analyses maken. De corresponderende Objecten moeten dan door het script gegenereerd worden.
27
28
Fonetische analyses
Fonetische analyses Selecteren en de-selecteren van Objecten
Het uitvoeren van akoestische analyses •
select Object type Name selecteert een Object van type Object type met de naam Name
•
Object type
Om uit te vinden welke informatie uit welk type Object gehaald kan worden: creëer of selecteer een Object en check welke opties er onder de Query-button te vinden zijn.
•
Name
select Sound Sine_18 plus Object type Name voegt een Object van het Object type met de naam Name toe aan de voorgaande selectie
•
minus Object type Name de-selecteert het Object van het Object type met de naam Name van de voorgaande selectie
29
•
Het laast-aangemaakte Object wordt automatisch geselecteerd
•
select all selecteert alle Objecten in het Object-venster 30
5
Fonetische analyses
Fonetische analyses
Selecteren in Loops: Handigheidje voor Loops:
Om het script voor alle Objecten in het Object-venster dezelfde bewerkingen te laten uitvoeren:
• Sla alle sounds + evt. textgrids e.d. die je op dezelfde manier wilt bewerken op als een .Collection, zodat je ze altijd in één keer kunt openen.
•
Laat het script tellen hoeveel Sound-objecten geselecteerd zijn, d.m.v. een numerieke variabele var
•
Maak een string-variabele var$ aan die voor elke cyclus in de loop de naam van het geselecteerde Object aanneemt
•
Laat het script de labels in de Textgrid uitlezen en de metingen doen voor de gelabelde intervallen of punten
31
32
Fonetische analyses
Fonetische analyses
Selecteren in Loops:
•
var = selected("Object type", n)
kent de unieke ID van het nde Object van type Object type toe aan de numerieke variabele var •
• •
Numerieke variabele om geselecteerde Objecten te ‘tellen’ String-variabele als ID voor elk volgende geselecteerde Object
D.m.v. deze ID kun je altijd het object selecteren door ‘var’ te aan te roepen
33
34
Fonetische analyses
Fonetische analyses
Selecteren in Loops:
Selecteren in TextGrid:
• •
•
Numerieke variabele om geselecteerde Objecten te ‘tellen’ String-variabele als ID voor elk volgende geselecteerde Object
Selecteren van een interval of punt in een TextGrid werkt niet via de History-functie
select all
# Binnen dezelfde loop, boven select Sound ‘name$’ typ je: nsounds = numberOfSelected ("Sound") for isound to nsounds sound'isound'$ = selected$ ("Sound", isound) endfor
select TextGrid ‘name$’ label$ = Get label of interval… 1 2 # dit is een stringvariabele die het 2e interval op Tier 1 benoemt
start = Get starting point… 1 2 end = Get end point… 1 2
for isound to nsounds name$ = sound'isound'$ select Sound 'name$' To Pitch... 0.01 75 600 endfor
#dit zijn numerieke variabelen die het begin- en het eindpunt van het interval berekenen #Arguments bij Get mean… aanpassen:
f0 = Get mean… start end Hertz 35
36
6
Buttons
Ten slotte
Als je een bepaald script vaak moet uitvoeren: Breng het dan onder in een knop in het Objects-venster, (fixed of) dynamic menu: • • •
open het script in de script editor of sla het geopende script op kies dan File: Add to dynamic menu in het formuliertje: – –
•
• •
Voor meer informatie: Lees de Scripting tutorial (via Objectvenster, Help)
•
Zie ook de PRAAT users-group: http://uk.groups.yahoo.com/group/praat-users/, waar je ook zelf een vraag kunt plaatsen. Vaak beantwoord door Paul Boersma zelf!
•
Mail Paul Boersma / David Weenink, zie www.praat.org
vul in Class1 = Sound geef de knop via het formuliertje een eigen, eenduidige naam (waar Do it… staat)
de button zal dan elke keer verschijnen als je een Sound selecteert (je kunt ook een ander object achter Class1 invullen, datgene waar je het script voor gebruikt, bijv. Spectrogram) PRAAT onthoudt dit voor nieuwe sessies, zelfs als je nieuwe updates installeert! je kunt de knop later weer weggooien met Control: Preferences: Buttons 37
Meer handige scripts
door je eigen directory-pad.
• •
directory$ = "D:\MSchreuder\Onderwijs\Klankleer_II_LabPhon\Vocalen \" Create Strings as file list... list 'directory$'\*.wav numberOfFiles = Get number of strings
• • • • •
for ifile to numberOfFiles select Strings list fileName$ = Get string... ifile Read from file... 'directory$'\'fileName$' endfor
Voor meer opties: zie Praat Manual: Create strings as a file list
38
Meer handige scripts
Dit script creëert een lijst van alle files met de opgegeven extensie in de gespecificeerde folder. Deze lijst kun je opslaan als .txt-file en inlezen in een tekstverwerkingsprogramma. Verder opent het script al deze files in het Objectvenster. Vervang D:\MSchreuder\Onderwijs\Klankleer_II_LabPhon\Vocalen •
•
Deze scriptregel maakt een soort spreadsheet van de resultaten van je analyses en slaat dat op. Je moet het op één regel, binnen een loop zetten. Achter het directory-pad zet je de variabel-namen van de geanalyseerde variabelen tussen enkele quotes, met een spatie ertussen. ‘newline$’ zorgt dat je steeds naar de volgende regel gaat.
fileappend D:\MSchreuder\Onderwijs\Klankleer_II_Lab Phon\College_scripting\results.txt 'labelVowel$' 'meanF1' 'meanF2' 'newline$' Tip 1: geef oude result-files een andere naam of verwijder de oude file door bovenaan het script dezelfde regel op te nemen met ‘filedelete’ i.p.v. ‘fileappend’, anders worden de nieuwe resultaten onder de oude gezet.
LET OP: elk “punt” moet op 1 regel! 39
Tip 2: om kolomtitels boven de kolommen te zetten: zet vóór de loop hetzelfde directory-pad\results.txt en zet daarachter de kolomtitels Vowel F1 F2 'newline$'. (Dit kan direct onder de regel van ‘filedelete’ uit Tip 1.) 40
7