Могу ли я установить глобальную переменную с помощью appleScript? - PullRequest
3 голосов
/ 16 февраля 2011
on runme(message)

if (item 1 of message = 145) then
    set x to item 2 of message
else if (item 1 of message = 144) then
    set y to item 2 of message
end if
if (item 1 of message = 145) then
    return message
else
    set y to x * 8
    return {item 1 of message, y, item 3 of message}
end if

end runme

Я полный новичок в Applescript. Я получаю сообщения MIDI Note (сообщение). Они принимают форму трех чисел (IE: 145, 0, 127)

Что мне нужно сделать, так это прослушать номер миди-ноты, начинающийся с 145, а затем посмотреть на его пункт 2. Затем мне нужно умножить его на 8 и сохранить его как элемент 2 номера миди-ноты, начинающегося с 144.

Будет несколько нот, начинающихся с 144, для каждой ноты с 145. Поэтому мне нужно сохранять эту переменную до тех пор, пока не появятся 145 нот.

Проблема в том, что я думаю, что этот скрипт запускается заново каждый раз, когда через него проходит миди-нота? Мне нужно как-то запоминать переменную y для каждого экземпляра заметки, пока не появится новая заметка с 145 и не изменит ее ...

ясно, как грязь?

Ответы [ 2 ]

9 голосов
/ 16 февраля 2011

Объявите глобальную переменную вне области действия функции. Смотрите пример ниже:

global y      -- declare y
set y as 0    -- initialize y

on function ()
    set y as (y + 1)
end function

function()    -- call function

return y

Это вернет 1, поскольку вы можете получить доступ к y внутри функции. После завершения функции значение y будет сохранено.

Подробнее: http://developer.apple.com/library/mac/#documentation/applescript/conceptual/applescriptlangguide/conceptual/ASLR_variables.html#//apple_ref/doc/uid/TP40000983-CH223-SW10

0 голосов
/ 16 февраля 2011

Как насчет этого?Это будет проходить через «messageList», и как только число 145 поднимется, оно будет работать как тумблер включения, чтобы модифицировать второе число с «модификатором» до тех пор, пока число 145 не появится снова.Это то, что вы хотите?

global detectedKey
set detectedKey to false
global modifier
set modifier to "1"
global message

set messageList to {"144,4,127", "145,5,127", "144,1,127", "144,2,127", "145,4,127", "144,1,127", "144,2,127"}


repeat with incomingMessage in messageList
    display dialog " incoming: " & incomingMessage & "\n outgoing :" & process(incomingMessage) & "\n modifier: " & modifier
end repeat

on process(incomingMessage)
    set a to item 1 of seperate(incomingMessage)
    set b to item 2 of seperate(incomingMessage)
    set c to item 3 of seperate(incomingMessage)

    if detectedKey is true then
        set outgoingMessage to "144" & "," & b * modifier & "," & c
        if a is equal to "145" then
            set detectedKey to false
                            set modifier to "1"
            set outgoingMessage to "144" & "," & b * modifier & "," & c
        end if
    else if detectedKey is false then

        if a is equal to "145" then
            set detectedKey to true
            set modifier to b
            set outgoingMessage to "144" & "," & b * modifier & "," & c
        else if a is equal to "144" then
            set outgoingMessage to a & "," & b & "," & c
        end if

    end if

    return outgoingMessage
end process



on seperate(message)
    set oldDelimiters to text item delimiters
    set AppleScript's text item delimiters to {","}
    return text items of message
    set AppleScript's text item delimiters to oldDelimiters

end seperate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...