1

我想允许一个 praatscript 打开 praat 对象行。这将允许我打开 praat,然后自动允许脚本将对象加载到对象窗口中。

例如脚本

run_something.praat 1.wav 1.TextGrid 0.1 0.2

可以打开praat,然后在音频文件“1.wav”中打开编辑器到0.1和0.2 <这对我来说很容易做到

我只是无法事先打开 praat 来插入我需要的东西。

现在我的脚本看起来像这样:

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

当然它会告诉我查看和编辑不起作用,因为 GUI 没有打开。我不能使用环境,因为它必须在 windows 和 linux 上工作

4

2 回答 2

2

您可以使用以下选项启动 Praat --open... 打开您想要的文件。这将以 GUI 模式启动 Praat,并打开指定的文件(和/或脚本):

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

但是,如果您想以编程方式向该 Praat 实例发出命令(= 无需单击任何内容),您可能必须使用sendpraat,它应该可以在运行 Praat 的所有平台中使用。

请注意,该页面中的编译说明至少对于 Linux 来说有点过时:我能够在我的机器上编译

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`

如果 sendpraat 可用,您将不得不启动 Praat 的 GUI 实例,但您喜欢,然后,在单独的语句中,发送您的脚本的执行:

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

Praat 手册中提供了使用 sendpraat的说明。第一个参数是以秒为单位的超时时间(如果此时操作尚未完成,则=die),然后是程序的名称,然后是顺序运行的命令列表。

据我所知,没有直接的方法来运行单个脚本,该脚本将在一个步骤中打开一个 GUI 版本的 Praat并使该 Praat 实例执行命令。但我可能错了。

于 2017-06-28T17:38:46.703 回答
0

对于那些与 sendpraat 苦苦挣扎的人:

尝试:

sendpraat praat 'execute "pathtoyourscript"'
于 2019-04-11T18:16:49.993 回答