No internet connection
  1. Home
  2. How to

PRO TOOLS - Bounce Memory Location (SELECTION) + Copy Marker name to bounce window

By oliver Brunbauer @oliver_Brunbauer
    2023-05-15 11:47:39.084Z

    Hi there !
    i´m looking for a script in SF for Pro Tools to :

    •	Select Memory Location (=Selection)
    •	Open Memory Location Edit Window
    •	Copy Memory Location Name
    •	Close Memory Location Window
    •	Open Bounce Mix Window
    •	Bounce Selection + Paste Previously Copied Memory Location Name Into Bounce Name
    •	Press Enter to Bounce File To Folder
    •	Close Bounce Mix Window
    •	Move to Next Memory Location (Selection)
    

    —>REPEAT ALL STEPS

    The idea is to have a batchprocesseor to sequencially print multiple "selections" in a timeline
    Might be a great timesaver for audio books, podcasts and post pro..
    best oliver

    • 1 replies
    1. D
      danielkassulke @danielkassulke
        2023-05-15 21:20:00.510Z

        Hi @oliver_Brunbauer ,

        You might be interested in checking out this script that @samuel_henriques created for a very similar workflow that I use. It works a charm:
        How to create incremental bounce regions #post-12

        You could combine it with this script I've been using to automatically create marker selections. Please note that the automatic marker selection script only works if you've highlighted the audio clips on one track, and currently it's automatically naming each selection "T01", "T02" etc (for take 1, take 2).

        function getNextTakeName() {
            const currentTakes = sf.ui.proTools.memoryLocationsWindow.tables.whoseTitle.is("Memory Locations").first.invalidate().children.whoseRole.is("AXRow").map(l => ({
                number: l.children.whoseRole.is("AXCell").allItems[0].children.whoseRole.is("AXStaticText").first.title.value.replace("Selected. ", ""),
                name: l.children.whoseRole.is("AXCell").allItems[1].children.whoseRole.is("AXStaticText").first.title.value.replace("Selected. ", ""),
                nameElement: l.children.whoseRole.is("AXCell").allItems[1].children.whoseRole.is("AXStaticText").first
            })).filter(ml => ml.name.match(/T\d+/));
        
            if (currentTakes.length === 0) return "T01";
        
            let lastTake = Math.max(...currentTakes.map(ml => (+ml.name.split("T")[1].replace(" BNC", ""))));
        
            // return T & increment
            return "T" + (lastTake < 9 ? "0" + ++lastTake : ++lastTake);
        }
        
        function newMemoryLocation({ type, name }) {
            sf.keyboard.press({ keys: "numpad enter" });
        
            const memLocWin = sf.ui.proTools.newMemoryLocationDialog.elementWaitFor().element;
        
            const markerNumber = parseInt(memLocWin.textFields.whoseValue.contains("Location").first.value.value.replace("Location ", ""), 10);
            const markerName = `${markerNumber}. ${name}`;
        
            memLocWin.textFields.allItems[1].elementSetTextFieldWithAreaValue({ value: markerName });
        
            if (type === "selection") {
                memLocWin.radioButtons.whoseTitle.is("Selection").first.checkboxSet({ targetValue: "Enable" });
            }
        
            memLocWin.buttons.whoseTitle.is("OK").first.elementClick();
            memLocWin.elementWaitFor({ waitType: "Disappear" });
        }
        
        sf.ui.proTools.invalidate();
        sf.ui.proTools.appActivateMainWindow();
        
        sf.ui.proTools.memoryLocationsEnsureWindow({
            action: () => {
                sf.ui.proTools.clipDoForEachSelectedClip({
                    action: () => {
                        const nextName = getNextTakeName();
                        newMemoryLocation({ type: "selection", name: (nextName + " BNC") });
                    }
                });
            },
            restoreWindowOpenState: true
        });