Logic workflows
Hi all,
Let's use this topic as a placeholder for people to discuss workflows that they'd like to be able to automate in Logic.
- DDan Radclyffe @Dan_Radclyffe
I’ve been experimenting with SF and Logic for a few weeks now. I’ve managed to get everything I need for mix prep sorted (colouring tracks, aligning, tuning, deessing vocals) except for one thing: buss assignments.
Logic provides no keyboard shortcuts for this unfortunately, so you go track by track, pull up the menus, find the busses and move on.
Would be beyond great to be able to just select a track and push a button...
Christian Scheuer @chrscheuer2020-11-10 12:26:58.946Z
Hi Dan,
Even with what you've already got working - can you elaborate a bit on exactly what these macros do? Aligning, tuning, etc.
What we are looking for is to build a comprehensive list of macro actions, what kind of input they should need, what they would do and in which context (on the selected track, should they ask the user anything, etc).
The more specific, the better :)
- DIn reply tochrscheuer⬆:Dan Radclyffe @Dan_Radclyffe
Yes for sure. They do involve Melodyne 5 ARA and Revoice Pro standalone though.
For deessing: melodyne 5 is opened (Melodyne has to already be displaying the audio, which it would do using ARA), all notes are selected, sibilant balance tool is selected and adjusted to -30%, plugin window is closed,
For aligning: a region is highlighted, selection-based processing is enabled and the revoice pro link plugin is opened. I have a default template in Revoice Pro with tracks pre-named. Guide, Dub 1, Dub 2 etc. SF searches for the track name in the Revoice Pro Link plugin menu (enabled as default in slot A of selection-based processing) and sends the vocal selection into RVP. Once you have all tracks loaded in you can then align in RVP and reimport back into Logic.
In fact, my bad I didn't actually make a tuning one. I meant leveling, which you can do in Melodyne 5
Christian Scheuer @chrscheuer2020-11-10 12:59:25.252Z
Thank you! In which of these workflows did you find yourself having to rely on XY / mouse coordinates?
- DDan Radclyffe @Dan_Radclyffe
All of them. Picking an entire UI element (as in selecting the whole plugin window) has rarely worked for me. However it seemed to recognise the “first window” “close button” every time so I’d plot coordinates in reference to that depending on what I needed to do
Jesper Ankarfeldt @JesperA2020-12-09 19:22:41.118Z
I've been working on a melodyne integration as well. Actually did it for Cubase, but it applied to Logic as well just with a different offset.
It is much just with mouse clicks, but I found a few things to make it "safer".
I'll share soon and you can see if you wanna check it out Dan.- DDan Radclyffe @Dan_Radclyffe
Sounds good- thanks for all your help!
- WIn reply tochrscheuer⬆:Wide Blue Sky @Wide_Blue_Sky
It would be amazing to automate stem bouncing similarly to the "Stem Bounce" macro built for Pro Tools ( https://www.youtube.com/watch?v=p6mr6_lZ7NM )
Especially if there was a way to choose to make it just bounce out folders vs. all tracks.
This way each track/folder/stem goes through the mix bus processing.
- RRyan Hayes @Ryan_Hayes
Hey guys, I have a simplified version of stem bounce. I can do 1 group of instruments at a time. Also unpack take folders, take selction, sum regions before hand.
Ive got the Melodyne ARA script like Pro tools minus taking off 1st plugin and moving others. You would have to move your plugs first.
I used the mix window and open pop up menu and select item press keys right+enter, to load mono if on mono track. Stereo if on stereo. Dual mono you would create another command with right + down + enter. All the tracks selected first slot (usaully autotune for me) will replaced with melodyne ARA. Click play then stop after 2 seconds. Tune them then I made the command to go through each track in the main window and bounce them with the right name and dialog checkbox settings. Hard thing is getting SF to recognize the Logic bounce window and make sure the wait for ui element to disipear times are set right before it goes to the next track. Hope this helps you guys. Those were the biggest issues I ran into creating mine.
- AIn reply tochrscheuer⬆:Alex Oldroyd @Alex_Oldroyd
Are there any of Logic Pro macros available to download? It's difficult to get started without templates to follow and learn from...
Christian Scheuer @chrscheuer2021-12-30 00:26:58.581Z
Hi Alex,
There's only a couple of packages in the Store right now with Logic content, AFAIK, and they probably aren't very stable. This thread tracks ideas & feature requests for when we will eventually add full Logic support to SF.
At the moment, as you said, it's quite hard to get started with Logic & SF, unfortunately.
- BIn reply tochrscheuer⬆:Brandon Seliga @Brandon_Seliga
Hey all! I would love to see the ability to select Channel Strips (track presets) through SF.
I've already been running a macro to add specific plugins to a track (i.e. Kontakt) through this script:
function getInstrumentSelectorListButton() { var inspector = sf.ui.app('com.apple.logic10').mainWindow.groups.whoseDescription.is('Inspector').first; if (!inspector.exists) throw 'Could not find Inspector'; var mixer = inspector.children.whoseRole.is("AXList").first.groups.allItems.filter(grp => grp.children.whoseRole.is("AXLayoutArea").whoseDescription.is('Mixer').exists)[0].children.whoseRole.is("AXLayoutArea").whoseDescription.is('Mixer').first; if (!mixer.exists) throw 'Could not find Mixer'; var selectedTrackChannelStrip = mixer.children.whoseRole.is("AXLayoutItem").first; if (!selectedTrackChannelStrip.exists) throw 'Could not find selected channel strip'; var instrumentSelectorGroup = selectedTrackChannelStrip.groups.allItems.filter(g => { var gDesc = g.getString("AXDescription"); if (gDesc.match(/^(automation|Bus \d?)$/)) return false; var neededChildren = ['bypass', 'open', 'list']; if (!neededChildren.every(n => g.children.whoseDescription.is(n).exists)) return false; return true; })[0]; if (!instrumentSelectorGroup) throw 'Could not find instrument selector'; var listButton = instrumentSelectorGroup.children.whoseDescription.is('list').first; return listButton; } getInstrumentSelectorListButton().popupMenuSelect({ menuPath: ['AU Instruments', 'Native Instruments', 'Kontakt', 'Stereo'] });
and combining it with an "add new inst track" command, but we have so many channel strip settings at the studio here that would be amazing to grab instead of instantiating single instances of plugins.
Not sure if anyone already has a script for this (that would be AMAZING) but regardless I'd love to see this implemented.
- A2Alex Oldroyd @Alex_Oldroyd8
This looks great. I've just posted in the How To section about how best to select a patch from the library.
- WIn reply tochrscheuer⬆:Wide Blue Sky @Wide_Blue_Sky
2 more tasks that I have that I'd love to be able to do with SF.
-
Bypass Sonarworks (plugin) on the master bus. For context, I'd like to hit one button and have SF bypass sonarworks, bring up the bounce window, wait for the bounce to complete, and then re-enable sonarworks once complete.
-
Import project settings (specifically screen set). I want to hit a macro that will open up "import project settings", select a certain template from finder, and then import just the screen set. I can see this being useful for importing other settings/tracks/etc. from other sessions as well.
I think I can make a dirty version of #2 that'll get what I need done, but it'd only work if the last time I imported a session had the same settings/location as the one I want to macro.
-Brandon Seliga
-
- SIn reply tochrscheuer⬆:SoundFlow Bot @soundflowbot
This issue is now tracked internally by SoundFlow as SF-1070
- In reply tochrscheuer⬆:Kitch Membery @Kitch2024-03-13 23:19:05.982Z
Hi @Dan_Radclyffe, @Wide_Blue_Sky, @Ryan_Hayes, @Alex_Oldroyd, and @Brandon_Seliga.
I just thought I'd give you a heads up in case you were not aware, recently we added an Official Logic Pro package to SoundFlow that includes, Plugin, Instrument, MIDI FX, and Send loaders + much more. The package is available in the SoundFlow Store and requires Logic Pro 10.8 and above, and SoundFlow 5.7.0.
If you're interested, we'll be holding a webinar tomorrow Thursday 14th March at 11 am PST. If you are interested, be sure to register at the following link:
https://soundflow.org/events/2024-03-logic-pro-webinar
I hope you can attend. :-) - JIn reply tochrscheuer⬆:Jan Christophersen @Jan_Christophersen
Installed the new Logic Package. All good, but I feel it's really just a beginning. Mostly it's about activating commands inside Logic that are already there. The fun begins when we get new ways to do things inside the program. Macro-stuff. Like Stem-bouncing.
I would like to be able to run a logic-command on a selection of tracks or regions. Don't see a way to do that at the moment.
I would love to have a script like "Strip Silence" for Pro Tools that works with the Remove Silence function of logic. Select the tracks, start the macro and boom: Track after track is done with Remove Silence.
Also: I always change my stereo-tracks in Logic from the default Balance Panner to Stereo Panner. That takes a few clicks: Open mixer, selects all tracks, right click on a stereo-balance-panner and change it to stereo-panner. If this could be automated by soundflow with just a click that would be great... (Don't understand why Logic doesn't have an option to change the default behaviour. But that's the way it is with Logic.)
Is there a way to do this?
Cheers
Jan - ZIn reply tochrscheuer⬆:Zvonimir Dusper @Zvonimir_Dusper
Hi to everyone. I thought I will be able to solve my big pain with Soundflow but, although it didn't seem that complex, I see now that at the moment it is far from possible.
I produce/mix/master a lot of album artists that always send me organised and correctly named tracks following my instructions so that I can easily import them into project templates that emerge from first mix(es).
So naturally it would be incredible to automate this task:- Create new project from template (always the same for a certain artist)
- Change the tempo
- Save As new project name to the the parent folder of where multitrack is
- Import a track from a specified folder and place at the start of projet to a channel with the same name, if it exists.
- Repeat 4) for all tracks in the specified folder
- Display a list of tracks that were not imported for manual import
I am also an IT developer so I have no problem with scripting, but all the scripts I tried didn't work...
So I just need to know - is it currently possible? If yes, can anyone give me some examples of how it would be done? I can do the script myself but I don't seem to be able to find any soundflow script reference for Logic Pro (perhaps I am just too old :).
If not, it would be best to know cause I am paying the subscription for nothing and also spending too much time on this.
thxChristian Scheuer @chrscheuer2024-12-05 18:03:25.081Z
cc @Kitch :) Kitch is the developer of our Logic package, so he's our expert in knowing what's currently possible to automate in Logic.
- ZZvonimir Dusper @Zvonimir_Dusper
wow thx!!! following.
- In reply toZvonimir_Dusper⬆:
Kitch Membery @Kitch2024-12-05 19:00:28.155Z
Hi @Zvonimir_Dusper,
Thanks for reaching out!
A lot of the workflows you are trying to achieve here have not yet been implemented in our official Logic Pro package.
I'll take a look early next week and see what is possible. I can imagine, being able to achieve them with SoundFlow would save quite some time. :-)
- In reply toZvonimir_Dusper⬆:
Kitch Membery @Kitch2024-12-06 03:34:43.740Z
Hi @Zvonimir_Dusper,
Obviously, your workflow will be more bespoke, but the following will open a specified template and set the tempo in Logic Pro 11.1, so that's steps 1 and 2 (possibly) sorted. :-)
More to come in the next few days, along with some questions about the manual steps you'd take to complete the workflow you're after, ie how you'd read the folder, files, tempo, project folder location, and track information for importing into Logic Pro, and how you want to pass this information onto SoundFlow.
const templateProperties = { category: "Project Templates", templateName: "Hip Hop", tempo: 60, }; const logic = sf.ui.logic; logic.appActivate(); logic.invalidate(); const chooseProjectWindow = sf.ui.logic.windows.whoseTitle.is("Choose a Project").first; const projectWindowPanel = chooseProjectWindow.splitGroups.first; /** * Sets slider value */ function setSliderValue({ slider, targetValue }) { const currentValue = slider.value.intValue; const delta = Math.abs(currentValue - targetValue); const adjustValue = (step) => Array.from({ length: delta }).forEach(() => slider.value.intValue += step); adjustValue(currentValue > targetValue ? -1 : 1); } /** * Opens the "Choose a Project" window. */ function openChooseAProjectWindow() { logic.menuClick({ menuPath: ["File", "New from Template…"] }); chooseProjectWindow.elementWaitFor(); } /** * Selects a template category from the left panel of the "Choose a Project" window */ function selectCategory(category) { //Click "Project Tempaltes" const leftPanel = projectWindowPanel.scrollAreas.first.children.whoseRole.is("AXOutline").first; const categoryRows = leftPanel.children.whoseRole.is("AXRow").slice(1); const categoryRow = categoryRows.find(r => r.childrenByRole("AXCell").first.childrenByRole("AXStaticText").first.value.value === category); const categoryCell = categoryRow.childrenByRole("AXCell").first; // Select the Category categoryCell.mouseClickElement(); // Invalidate the "Choose a Project" window as elements may have changed chooseProjectWindow.invalidate(); } /** * Selects a template from the right panel of the "Choose a Project" window */ function selectATemplate(templateName) { const templateButtonGroups = projectWindowPanel .groups.first .scrollAreas.first .children.whoseRole.is("AXList").first .children.whoseRole.is("AXList").first .groups; // Get the template button const templateButtonGroup = templateButtonGroups.find( btnGrp => btnGrp.children.whoseRole.is("AXStaticText").first.value.value === templateName ); // Click the template button templateButtonGroup.groups.allItems[1].buttons.first.elementClick(); } /** * Opens the "Details" panel in the "Choose a Project" window */ function openDetailsPanel() { const detailsPanel = projectWindowPanel.groups.first.children.whoseRole.is("AXDisclosureTriangle").first; const isDetailsPanelOpen = detailsPanel.isCheckBoxChecked; // Ensure the "Details" panel is open if (!isDetailsPanelOpen) { detailsPanel.elementClick(); // Wait for the panel to be open sf.waitFor({ callback: () => detailsPanel.invalidate().isCheckBoxChecked, timeout: 2000 }, `The "Details" panel di not open.`); // Invalidate the "Choose a Project" window as elements may have changed chooseProjectWindow.invalidate(); } } function newProjectFromTemplate(settings) { const { category, templateName, tempo } = settings; // Ensure the "Choose a Project" window is open openChooseAProjectWindow(); // Select a category from the left panel of the "Choose a Project" window selectCategory(category); // Select a template from the right panel of the "Choose a Project" window selectATemplate(templateName); // Ensure the "Details" panel is open openDetailsPanel(); // Get all Sliders const sliders = chooseProjectWindow.splitGroups.first.groups.first.groups.first.sliders; // Get the "Tempo" slider const tempoSlider = sliders.find(slider => slider.getString("AXValueDescription").split(", ").pop() === "Tempo",); // Set the projects "Tempo" slider setSliderValue({ slider: tempoSlider, targetValue: tempo, }); // Click "Choose" chooseProjectWindow.splitGroups.first.groups.first.buttons.whoseTitle.is("Choose").first.elementClick(); // Wait for the "Choose a Project" window to disappear chooseProjectWindow.elementWaitFor({ waitForNoElement: true }); // Wait for the project to be created, by checking the "File"=>"Close Project" menu's enabled state sf.waitFor({ callback: () => logic.invalidate().getMenuItem("File", "Close Project").isEnabled, timeout: 4000, }, `Failed creating project with the "${templateName}" template.`); // Testing purposes only log("Created"); } newProjectFromTemplate(templateProperties);
Also, I'd be happy to jump on a Zoom call with you sometime to give you a walk-through of SoundFlow's Official Logic Pro package. If that's something you'd be interested in please reach out to me via email at support@soundflow.org.
Rock on! :-)