📄 scripting_8_1__the_sendpraat_subroutine.html
字号:
<html><head><meta name="robots" content="index,follow">
<title>脚本 8.1. 通过sendpraat子程序</title></head><body bgcolor="#FFFFFF">
<table border=0 cellpadding=0 cellspacing=0><tr><td bgcolor="#CCCC00"><table border=4 cellpadding=9><tr><td align=middle bgcolor="#000000"><font face="Palatino,Times" size=6 color="#999900"><b>
脚本 8.1. 通过sendpraat子程序
</b></font></table></table>
<p>
这是一种向<i>运行中</i>的Praat程序发送消息的子程序。此外还有具备同样功能的Unix、MacOS或DOS的控制台程序。</p>
<h3>
句法</h3>
<dl>
<dd>
<b>sendpraat (void *</b><i>显示器</i><b>, const char *</b><i>程序</i><b>, long </b><i>超时</i><b>, char *</b><i>文本</i><b>);</b>
</dl>
<h3>
参数</h3>
<dl>
<dt>
<i>显示器</i>
<dd>
由X程序调用时的显示器标志——如果提供NULL,sendpraat将自行打开显示器。Windows和Macintosh中忽略该参数。
<dt>
<i>程序</i>
<dd>
使用Praat外壳的运行中的程序的名字,如“Praat”或“ALS”等——首字母可能是小写或者大写,在Unix中将转换为小写,而在Macintosh和Windows中将转换为大写。
<dt>
<i>消息</i>
<dd>
一串Praat外壳代码(命令和语句)。(译者注:该参数在前面句法格式中没有出现,似多余,且与<i>文本</i>参数重复)
<dt>
<i>超时</i>(仅限Unix和Macintosh)
<dd>
sendpraat报告出错消息前,保持等待响应的秒数。为<i>超时</i>取0值意味着将异步发送消息,也就是说,sendpraat将立即返回,而不会提示任何出错消息。
<dt>
<i>文本</i>
<dd>
要发送的脚本文本。注意:sendpraat可能对其进行改动。
</dl>
<h3>
示例 1:结束程序</h3>
<code>
char message [100], *errorMessage;<br></code>
<code>
strcpy (message, "Quit");<br></code>
<code>
errorMessage = <b>sendpraat</b> (NULL, "praat", 0, message);<br></code>
<code>
if (errorMessage != NULL) fprintf (stderr, "%s", errorMessage);<br></code>
<p>
这段程序将命令退出<b>Praat</b>程序(正常退出),因为<b>Quit(退出)</b>是该程序Control(控制)选单中的固定命令。在Unix或Macintosh中,sendpraat立即返回,而在Windows中,<i>超时</i>参数将忽略。返回的<i>errorMessage</i>是sendpraat内部静态分配的字符串,以后再次调用sendpraat时即覆盖。</p>
<h3>
示例 2:倒着播放一个声音文件</h3>
<p>
假定有一个声音文件,其名称保存在变量<code>fileName</code>中,现在要让能够播放声音的<b>Praat</b>程序来倒着播放这段声音。</p>
<code>
char message [1000], *errorMessage;<br></code>
<code>
sprintf (message, "Read from file... %s\nPlay reverse\nRemove", fileName);<br></code>
<code>
errorMessage = <b>sendpraat</b> (NULL, "praat", 0, message);<br></code>
<p>
这段程序中的<b>Play reverse(反向播放)</b>是当选中一个Sound(声音)对象时可用的动作命令。在Unix中,sendpraat最多允许<b>Praat</b>用1000秒的时间执行该动作。</p>
<h3>
示例 3:执行大型脚本文件</h3>
<p>
直接给<b>sendpraat</b>发送大型脚本,有时恐怕不大现实。所幸,接受消息的程序能够识别<b>execute</b>语句:</p>
<code>
char message [100], *errorMessage;<br></code>
<code>
strcpy (message, "doAll.praat 20");<br></code>
<code>
errorMessage = <b>sendpraat</b> (NULL, "praat", 0, message);<br></code>
<p>
这段程序命令<b>Praat</b>程序执行脚本<b>doAll.praat</b>,带一个参数“20”(译者注:如果没有误解前面一段话的意思,那么以上代码中strcopy()函数的第2个参数似乎应当是<code>"execute doAll.praat 20"</code>——有待实际验证)。</p>
<h3>
如何下载</h3>
<p>
可以下载sendpraat子程序或程序的源代码,请访问 <b>www.praat.org</b> 或 <b>http://www.fon.hum.uva.nl/praat/sendpraat.html</b> 。</p>
<h3>
参考</h3>
<p>
想要改从命令行调用程序并向其发送消息,不要用<b>sendpraat</b>,而要以脚本文件名为参数来运行程序。参看<a href="Scripting_6_9__Calling_from_the_command_line.html">脚本 6.9. 从命令行调用</a>。</p>
<h3>指向本页的链接</h3>
<ul>
<li><a href="Scripting.html">脚本</a>
<li><a href="Scripting_8__Controlling_Praat_from_another_program.html">脚本 8. 用其他程序控制Praat</a>
<li><a href="Scripting_8_2__The_sendpraat_program.html">脚本 8.2. 通过sendpraat程序</a>
<li><a href="Scripting_8_3__The_sendpraat_directive.html">脚本 8.3. 通过sendpraat语句</a>
</ul>
<hr>
<address>
<p>© ppgb, May 28, 2003</p>
<p>© 翻译:徐清白,2005年06月30日</p>
</address>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -