Search code examples
praat

how to open praat from a praatscript


I would like to allow a praatscript to open the the praat object line. This would allow me to open praat and then automatically allow the script to load objects into the object window.

for example the script

run_something.praat 1.wav 1.TextGrid 0.1 0.2

could open praat and then open the editor to 0.1 and 0.2 in the audio file "1.wav" < this is easy for me to do

I just can't get praat open beforehand to insert what I need.

right now my script looks like this:

form Info
    text Sound
    text Textgrid
    real Start
    real End
endform


if sound$ != "" and textgrid$ != ""
     Read from file: sound$
     Read Strings from raw text file: textgrid$
     @read_lab()

selectObject: 1, 3
View & Edit
editor = 3
editor: editor
Select: start , end
Zoom to selection
endeditor

endif

of course it will tell me that View and Edit does not work because the GUI is not open. I cannot use environments because it has to work on windows and linux


Solution

  • You can start Praat using the --open option to ... open the files you want. This will start Praat in GUI mode, with the specified files (and/or scripts) open:

    praat --open sound.wav annotation.TextGrid script.praat
    

    But if you want to issue commands to that instance of Praat programmatically (= without you clicking on anything), you'll likely have to use sendpraat, which should be usable in all the platforms where Praat runs.

    Note that the compilation instructions in that page are a bit outdated for Linux at least: I was able to compile on my machine with

    gcc -std=gnu99 -o sendpraat -DSTAND_ALONE -DUNIX \
      `pkg-config --cflags gtk+-2.0 glib-2.0` \
      sendpraat.c \
      `pkg-config --libs   gtk+-2.0 glib-2.0`
    

    With sendpraat available, you'll have to start a GUI instance of Praat however you prefer, and then, in a separate statement, send the execution of your script:

    sendpraat 0 praat \
      'runScript: "path/to/your/script", "1.wav", "1.TextGrid", 0.1, 0.2'
    

    Instructions for using sendpraat are available on the Praat manual. The first argument is a timeout in seconds (=die if action is not completed by then), then the name of the program, and then a list of commands to run sequentially.

    As far as I know, there is no straightforward way to run a single script that will, in one step, open a GUI version of Praat and make that instance of Praat execute a command. But I might be wrong.