2011-02-15 115 views
0

我需要在Applescript中编写我从未使用过的东西,但这更多的是针对这个特定问题的一般编程问题。我是否需要一个while循环在if语句中?

问题:我正在使用Midipipe从两个不同的设备接收MIDI输入。

我想使用第一个设备的输入来调制第二个设备输出。第一个设备会发送一个MIDI短信,然后第二个设备发送任意数量的音符,这些音符都需要进行调制。苹果脚本需要不断调整这些音符,但只要第一个设备发送另一个音符,它就会改变调制。

所以我想我需要的是这样的:

设备中的一个将笔记1-16发送通道1台

设备中的两个将笔记1-7送通道2

Device one = x 
Device two = y 

if x = 1 
while x = 1 
    return y 
end while 
end if 

if x = 2 
while x = 2 
    y = y + 12 --moving y notes up one octave 
end while 
end if 

if x = 3 
while x = 3 
    y = y + 24 --moving y notes up one octave 
end while 
end if 

etc 

事情还没有起作用,我不确定这是否是我的逻辑问题?我收到错误“预计其他,但发现”。我试图把一个else语句,并得到了一个不同的错误...

回答

2

你错过了thenif x = 1和其他ifs。

的,而在第一,如果是不必要的:

if x = 1 then 
while x = 1 
    return y 
end while 
end if 

这是塔一样

if x = 1 then 
return y 
end 

因为当循环开始,而这个停止循环,你将返回年。

在第二次和第三次,你会得到一个无限循环。这是因为你的循环正在监视x变量,但你只改变了y。所以,x将永远是3,并且脚本永远不会退出循环。

+0

嗯......我需要弄清楚每次播放“设备二”输入时如何返回y一次,而是根据最近x值决定的方式进行调制......任何想法? – Joel 2011-02-15 16:36:59