IEM Plugins

The IEM Plug-in Suite was created by staff and students student of the Institute of Electronic Music and Acoustics in Graz. It is free and open source. Downloads and documentation can be found here https://plugins.iem.at/.

An in depth documentation of the IEM plugins features detailed information on installing and using the tools inside Reaper: https://plugins.iem.at/docs/.

The following pages include additional information on how to use the plugins with external software for control and processing, such as PD, SuperCollider and others.


Mapping

local num_tracks = reaper.CountSelectedTracks(0)
if num_tracks == 0 then return end

reaper.Undo_BeginBlock()

for i = 0, num_tracks - 1 do
    local track = reaper.GetSelectedTrack(0, i)
    local parent = reaper.GetParentTrack(track)

    if parent then
        -- 1. PARENT PROTECTION: Only grow, never shrink
        local dest_channel = i
        local current_parent_ch = reaper.GetMediaTrackInfo_Value(parent, "I_NCHAN")
        if (dest_channel + 1) > current_parent_ch then
            reaper.SetMediaTrackInfo_Value(parent, "I_NCHAN", dest_channel + 1)
        end

        -- 2. PAN HARD LEFT: Use the safe API (Value -1.0)
        -- This will not touch your Volume fader
        reaper.SetMediaTrackInfo_Value(track, "D_PAN", -1.0)

        -- 3. ROUTING INJECTION: Use a very specific pattern match
        -- to ensure we ONLY hit the MAINSEND line and nothing else
        local _, chunk = reaper.GetTrackStateChunk(track, "", false)
        local bitmask = 1024 + i

        -- We use '^' and '%s' to make the search extremely surgical
        local new_chunk = chunk:gsub("MAINSEND %d+ %d+", "MAINSEND 1 " .. bitmask)

        reaper.SetTrackStateChunk(track, new_chunk, false)
    end
end

reaper.Undo_EndBlock("Clean Mono Map", -1)
reaper.TrackList_AdjustWindows(false)