📄 scripting_7_2__scripting_an_editor_from_within.html
字号:
<html><head><meta name="robots" content="index,follow">
<title>脚本 7.2. 由内部控制编辑器脚本</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>
脚本 7.2. 由内部控制编辑器脚本
</b></font></table></table>
<p>
本章介绍如何永久扩展编辑器的功能。</p>
<p>
举下面的问题为例:要以图形方式显示SoundEditor(声音编辑器)中指针位置附近声音的频谱。依如下步骤完成:</p>
<dl>
<dd>
1. 创建一个Sound(声音)对象。
<dd>
2. 单击<a href="Edit.html">Edit(编辑)</a>按钮,在SoundEditor窗口中打开显示。
<dd>
3. 执行SoundEditor中<a href="File_menu.html">File(文件)选单</a>下的<b>New editor script(新建编辑器脚本)</b>命令。随之出现标题形如“untitled script [Sound hallo]”的<a href="ScriptEditor.html">ScriptEditor(脚本编辑器)</a>窗口。
<dd>
4. 在ScriptEditor中键入下面的脚本:
</dl>
<code>
cursor = Get cursor<br></code>
<code>
Select... cursor-0.02 cursor+0.02<br></code>
<code>
Extract windowed selection... slice Kaiser2 2 no<br></code>
<code>
<b>endeditor</b><br></code>
<code>
To Spectrum (fft)<br></code>
<code>
Edit<br></code>
<p>
这时如果执行ScriptEditor中Run(运行)选单下的Run(运行)命令,将选中SoundEditor中指针左右一段40毫秒的区域。该片段经过Kaiser窗口(总长80 ms)处理后,即复制到对象列表。这样,列表中出现一个名为“slice”的Sound对象。接下去,一个同样名为“slice”的Spectrum(声谱)对象出现在列表中,最后出现的是一个标题为“Spectrum slice”的SpectrumEditor(声谱编辑器)窗口。</p>
<dl>
<dd>
5. 在磁盘上保存脚本,比如,存为 /us/miep/spectrum.praat 文件(译者注:这是Unix类操作系统上的文件路径)。然则ScriptEditor窗口的标题会相应改变。
<dd>
6. 为了以后还能在SoundEditor中使用该脚本,执行File选单下的<b>Add to menu...(添加到选单)</b>命令。<i>Window(窗口)</i>一栏,填“SoundEditor”(预设值)。<i>Menu(选单)</i>一栏,可以填“Spec.”来代替预设值(“File”)(译者注:填“Spec.”是不行的,应当改填SoundEditor窗口其他已有选单的名称,比如“Spectrum”)。在<i>Command(命令)</i>一栏填写命令名称,比如“Show spectrum at cursor”之类(替换掉“Do it...”)。然后单击OK(确定)。
</dl>
<p>
往后再打开SoundEditor窗口,即可看到该命令。关闭现在打开的SoundEditor窗口,选中原来的Sound对象,再按Edit按钮,看看“Spec.”选单下面什么样(译者注:此处“Spec.”错误同前)。现在要查看指针附近的声谱,就只需要执行这条选单命令了。</p>
<p>
退出并重新运行Praat,该命令仍会继续在SoundEditor中出现。
如果不想保留该命令,
可以利用<a href="ButtonEditor.html">ButtonEditor(按钮编辑器)</a>将其移除,只要在Objects(对象)窗口中执行Control(控制)选单下Preferences(偏好选项)子选单下的<b>Buttons(按钮)</b>命令即可打开。</p>
<h3>
改进脚本</h3>
<p>
上面查看声谱的这个例子尚有诸多不足之处。对象列表中名为“slice”的对象,既有Sound,又有Spectrum,混乱不堪;声谱一直显示到Nyquist频率,而值得关注的可能仅位于5000 Hz以下;还有就是SoundEditor中原先的选区也丢失了。</p>
<p>
要改进脚本,只要执行SoundEditor中File选单下的<b>Open editor script...(打开编辑器脚本)</b>命令,将其再度打开。每次有所修改,只需执行Run选单下的Run命令即可再次运行;或者,还可以先保存一下(用File选单的Save(保存)命令),再执行那个新建的“Show spectrum at cursor”命令(该命令永远从磁盘文件运行脚本,而非在ScriptEditor中装载显示的版本)。</p>
<p>
为了放大到前5000 Hz显示,在脚本末尾添加这样两行代码:</p>
<code>
<b>editor</b> Spectrum slice<br></code>
<code>
Zoom... 0 5000<br></code>
<p>
而要删掉“Sound slice”则应再添加:</p>
<code>
<b>endeditor</b><br></code>
<code>
select Sound slice<br></code>
<code>
Remove<br></code>
<p>
注意:<b>endeditor</b>语句用来离开SpectrumEditor环境,返回对象与画板窗口的环境。</p>
<p>
如果在多个指针位置上执行“Show spectrum at cursor”命令,可以看到,所有打开的编辑器都是一样的标题。为了去除由代码<code><b>editor</b> Spectrum slice</code>带来的含混,应当给每个切片单独命名。比方说,如果指针位于635毫秒处,切片就命名为“635ms”。只需像下面这样修改一下其中的提取命令:</p>
<code>
milliseconds = round (cursor*1000)<br></code>
<code>
Extract windowed selection... 'milliseconds'ms Kaiser2 2 no<br></code>
<p>
如此一来,那些Sound和Spectrum对象就不大容易重名了。要认真细致地编辑这两行代码。</p>
<p>
最后就是要恢复原来的选区。给脚本开头加上两行代码来记住选区的起止位置:</p>
<code>
begin = Get begin of selection<br></code>
<code>
end = Get end of selection<br></code>
<p>
再在脚本末尾处复原选区:</p>
<code>
<b>editor</b><br></code>
<code>
Select... begin end<br></code>
<p>
注意:<b>editor</b>语句如果不指明编辑器标题,脚本的执行环境将返回最初的编辑器环境。</p>
<p>
完整的脚本如下:</p>
<code>
begin = Get begin of selection<br></code>
<code>
end = Get end of selection<br></code>
<code>
cursor = Get cursor<br></code>
<code>
Select... cursor-0.02 cursor+0.02<br></code>
<code>
# Create a name. E.g. "670ms" means at 670 milliseconds.<br></code>
<code>
milliseconds = round (cursor*1000)<br></code>
<code>
Extract windowed selection... 'milliseconds'ms Kaiser2 2 no<br></code>
<code>
<b>endeditor</b><br></code>
<code>
To Spectrum (fft)<br></code>
<code>
Edit<br></code>
<code>
<b>editor</b> Spectrum 'milliseconds'ms<br></code>
<code>
Zoom... 0 5000<br></code>
<code>
<b>endeditor</b><br></code>
<code>
select Sound 'milliseconds'ms<br></code>
<code>
Remove<br></code>
<code>
<b>editor</b><br></code>
<code>
Select... begin end<br></code>
<p>
这段脚本既很有用,又很安全。比方说,假如创建的一个Sound对象跟另一个已经存在的Sound对象重名,则通过<code>Remove</code>命令移除的只可能是这个刚刚新建的Sound对象,因为<b>select</b>语句总是在同名对象中选中最新创建的一个。</p>
<h3>指向本页的链接</h3>
<ul>
<li><a href="Scripting.html">脚本</a>
<li><a href="Scripting_7__Scripting_the_editors.html">脚本 7. 编辑器脚本</a>
</ul>
<hr>
<address>
<p>© ppgb, December 4, 2002</p>
<p>© 翻译:徐清白,2005年06月29日</p>
</address>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -