Fully automated PT to RX10 (render then back) to PT
Hi,
Using the official iZotope RX package I'm trying to send audio from Pro Tools to Izotope Rx10, process with De-Wind, send back to PT, and then Close the Connect window.
My current macro contains, in this order:
RX Connect: Send to iZotope: Dialog Editing Preset (5 Second Handles)
Module: Open/Close/Toggle: De-wind
Module: Render: De-wind
RX Connect: Send back to Pro Tools: Send Back & Close RX Connect
The round trip journey mostly seems to work, except RX sends back to PT before it has finished processing. There's likely a better way to do this, or I'm missing a command to make RX wait to send back until after processing. Any help is appreciated, thanks!
- Christian Scheuer @chrscheuer2023-12-30 09:52:41.139Z
cc @Kitch
We have had some internal work on this at some point but it didn't make the cut when we initially launched the RX package. Hopefully, we can get back to working on this in the near future.
Kitch Membery @Kitch2023-12-30 19:04:37.087Z
Yes, it would be great to revisit this soon. :-)
- In reply tochrscheuer⬆:RRobert Mallory @Robert_Mallory
Thanks for the quick reply! Just to clarify - so there is currently no way to program a fully automated round trip from PT to Rx and back? It's advertised as such: "Send audio from Pro Tools to iZotope, process with your favorite modules, and send back again with just a few clicks or fully automated."
I once had a script setup for Rx9 and De-Wind that did this pretty well, but for some reason I couldn't get it to transfer over to Rx10 when I upgraded.
Is there an easy command to make the macro wait a second in between the penultimate step of processing in Rx, and the final step of sending back to PT? That seems to be the main issue of why this isn't working. Thanks and happy new year!
Christian Scheuer @chrscheuer2024-01-02 00:20:26.530Z
Hi Robert,
I have to check up on the status of this with our team. In terms of adding a manual wait, you could always do that by using the "Wait" action and inserting a number of milliseconds you'd like to wait. That's not likely to create a solid macro though that would work in all cases, but it might be enough to get your script working.
- RRobert Mallory @Robert_Mallory
Hey thanks! Setting a wait time of 3000ms made it work! Pretty exciting.
I decided to beef it up even more. So after RX returns the audio back to PT and closes connect, I use Press Keys "Shift +" and then Press Keys "Shift Option - Shift Option -" to highlight the area around the edit, and then Press Keys "F" to automatically draw crossfades over the region I just RX'd. Pretty sweet.
Thanks for the help!
- In reply toRobert_Mallory⬆:
Kitch Membery @Kitch2024-01-02 18:53:41.736Z
Hi @Robert_Mallory,
Try creating a macro out of the following script as a replacement for the "Module: Render: De-wind" step.
function renderAndWaitForRxModals({ moduleName }) { const izotope = sf.ui.izotope; const mainWindow = izotope.mainWindow; izotope.invalidate(); const getGroupByName = (parent, name) => parent.groups.whoseDescription.is(name).first; const undoPanel = getGroupByName(mainWindow, "Undo Panel"); const oldHistoryRowCount = undoPanel.radioButtons.count; try { izotope.menuClick({ menuPath: ["Modules", "Render", moduleName] }); while (oldHistoryRowCount === undoPanel.radioButtons.count) { sf.wait({ intervalMs: 100 }); // Press "Control + Shift + Escape" to Cancel out. } } catch (err) { throw err; } finally { // log("Done Processing"); } } renderAndWaitForRxModals({ moduleName: "De-wind" });
This script does the following...
- Counts the number of rows in the iZotope RX "History" panel.
- Clicks the menu Item
["Modules", "Render", moduleName]
. (With whatever module you specified as the moduleName in the last line of code). - Waits till another row has been added to the iZotope RX History panel.
Note: this script will only work on individual modules, not Module Chains.
Let me know if that works for you. :-)
- RRobert Mallory @Robert_Mallory
Hi Kitch!
Thanks for this tip! I got my round trip working by adding a 3000ms Wait command before sending back to PT, but I'll try your approach this week and see if it works any faster or smoother. Thanks so much!
Kitch Membery @Kitch2024-01-03 04:46:53.888Z
You’re welcome, Robert!
- RRobert Mallory @Robert_Mallory
Slightly related - I'm trying to Set Nudge value at 10ms (so I can have PT highlight around my edit on both sides, then crossfade itself).
I usually keep my counter in Min:Secs, and I'd love to use a command that can set the nudge value at 10ms. However all the Set Nudge options are either Bar:Beat, Timecode or Feet+Frames. Is it not possible to set the nudge to 10ms using Min:Secs? I'm using a workaround by using the Feet+Frames 1/4 frame preset, but was curious why no Min:Secs options. Thanks again!
Kitch Membery @Kitch2024-01-03 19:00:30.563Z
Hi @Robert_Mallory,
Some edge cases may need addressing in this script, however, this script should extend your selection by 10ms on either side.
function calculateSamples(sessionSampleRate, milliseconds) { const samplesPerSecond = sessionSampleRate; const seconds = milliseconds / 1000; const samples = seconds * samplesPerSecond; return samples; } function extendSelection({ sessionSampleRate, milliseconds }) { const samples = calculateSamples(sessionSampleRate, milliseconds); sf.ui.proTools.appActivateMainWindow(); const selection = sf.ui.proTools.selectionGetInSamples(); const { selectionStart, selectionEnd } = selection sf.ui.proTools.selectionSetInSamples({ selectionStart: Number(selectionStart) - samples, selectionEnd: Number(selectionEnd) + samples }); } extendSelection({ sessionSampleRate: 48000, milliseconds: 10 });
Note: You'll need to set the Pro Tools Session Sample rate for this to work correctly.
I hope that helps. :-)
- RRobert Mallory @Robert_Mallory
Very cool, thanks!
Kitch Membery @Kitch2024-01-03 20:07:33.416Z
If you are using the latest version of Pro Tools you could instead use the following script that gets the session sample rate for you via the Pro Tools SDK.
function calculateSamples(milliseconds) { const samplesPerSecond = Number(sf.app.proTools.getSessionSampleRate().sampleRate.match(/\d+/g)[0]); const seconds = milliseconds / 1000; const samples = seconds * samplesPerSecond; return samples; } function extendSelection({ milliseconds }) { const samples = calculateSamples(milliseconds); sf.ui.proTools.appActivateMainWindow(); const selection = sf.ui.proTools.selectionGetInSamples(); const { selectionStart, selectionEnd } = selection; sf.ui.proTools.selectionSetInSamples({ selectionStart: Number(selectionStart) - samples, selectionEnd: Number(selectionEnd) + samples }); } extendSelection({ milliseconds: 10 });