脚本示例

以下是一些实用的 AM脚本示例,展示了如何使用脚本功能实现常见的自动化任务和控制逻辑。

基础脚本示例

这是一个简单的脚本示例,演示了如何在 AM中创建一个基本的事件监听器:

-- 基础事件监听脚本
function onParameterChanged(parameterId, newValue)
    if parameterId == "volume" then
        print("音量已更改为: " .. newValue)
    end
end

-- 注册事件监听器
registerEventHandler("parameterChanged", onParameterChanged)

自动化示例

以下示例演示了如何在播放开始时自动执行一系列操作:

-- 播放开始时的自动化脚本
function onPlaybackStarted()
    -- 设置特定插件的参数
    setPluginParameter("reverb", "roomSize", 0.8)
    setPluginParameter("delay", "feedback", 0.3)
    
    print("已应用混响和延迟设置")
end

-- 注册播放事件监听器
registerEventHandler("playbackStarted", onPlaybackStarted)

MIDI 处理示例

以下示例演示了如何处理传入的 MIDI 数据:

-- MIDI 处理脚本
local lastNote = nil

function onMidiReceived(status, data1, data2)
    local msgType = status & 0xF0  -- 提取消息类型
    
    if msgType == 0x90 and data2 > 0 then  -- 音符开消息
        if lastNote and math.abs(data1 - lastNote) < 5 then
            -- 如果音符接近,调整音高
            local adjustedNote = data1 + 2
            if adjustedNote <= 127 then
                sendMidi(status, adjustedNote, data2)
            end
        end
        lastNote = data1
    end
end

-- 注册 MIDI 事件监听器
registerEventHandler("midiReceived", onMidiReceived)

定时任务示例

以下示例演示了如何创建一个定期执行的任务:

-- 定期保存项目快照
function scheduledSnapshot()
    -- 检查是否启用了自动快照功能
    if getSetting("enableAutoSnapshot") then
        -- 创建项目快照
        createSnapshot("autosnap_" .. getCurrentTime())
        print("已创建自动快照")
    end
end

-- 注册定时任务,每5分钟执行一次
registerScheduledTask(scheduledSnapshot, 5 * 60)

自定义 UI 示例

以下示例演示了如何创建一个简单的自定义控制界面:

-- 创建自定义控制面板
local panel = createControlPanel("我的控制面板", 200, 100)

local slider = panel:addSlider("音调控制", 0, 100, 50)
local button = panel:addButton("重置")

function onUpdate()
    -- 更新插件参数
    setPluginParameter("pitchShifter", "pitch", slider:value())
end

function onButtonClicked(control)
    if control == button then
        slider:setValue(50)
        setPluginParameter("pitchShifter", "pitch", 50)
    end
end