From c11524c596dcdea684634ca71785f50d2e7da404 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Fri, 7 Nov 2025 15:30:15 -0800 Subject: [PATCH] More implementation of Pro Tools --- intern/pro_tools.py | 70 +++++++++++++++++++++++++++++++++---- operator_protools_export.py | 1 + 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/intern/pro_tools.py b/intern/pro_tools.py index 573a03d..e7ddb35 100644 --- a/intern/pro_tools.py +++ b/intern/pro_tools.py @@ -2,21 +2,79 @@ import bpy import ptsl from ptsl import PTSL_pb2 as pt + +def mixdown_speaker(speaker: bpy.types.Object, scene: bpy.types.Scene) -> str: + return "" + + +def create_clip(audio_file_path: str, client: ptsl.Client) -> str: + return "" + + +def spot_clip(speaker: bpy.types.Object, clip_id: str, track_id: str, + client: ptsl.Client): + pass + +def create_track(speaker: bpy.types.Object, client: ptsl.Client): + assert speaker.data + + result = client.run_command(pt.CId_CreateNewTracks, + {'numuer_of_tracks': 1, + 'track_name': speaker.data.name, + 'track_format': "TFormat_Mono", + 'track_type': "TType_Audio", + 'track_timebase': "TTimebase_Samples", + 'pagination_request': { + 'limit': 1, + 'offset': 0, + }, + 'insertion_point_position': "TIPoint_Unknown", + 'insertion_point_track_name': "" + }) + + print(result) + assert result + assert 'created_track_ids' in result.keys() + assert len(result['created_track_ids']) == 1 + + return result['created_track_ids'][0] + + +def insert_audio(speaker: bpy.types.Object, scene: bpy.types.Scene, + track_id: str, client: ptsl.Client): + + rendered_audio_file = mixdown_speaker(speaker, scene) + clip_id = create_clip(rendered_audio_file, client) + spot_clip(speaker, clip_id, track_id, client) + + + +def apply_pan_automation(speaker: bpy.types.Object, scene: bpy.types.Scene, + track_id: str, client: ptsl.Client): + + pass + + def send_to_pro_tools(speakers: list[bpy.types.Object], room_size: float) -> bool: try: + print("About to create client.") client = ptsl.Client(company_name="Squad 51", application_name="Send to Pro Tools Blender Extension") + scene = bpy.context.scene + for speaker in speakers: - assert speaker.data - result = client.run_command(pt.CId_CreateNewTracks, { - {'number_of_tracks': 1, - 'track_name': speaker.data.name} - }) + new_track_id = create_track(speaker, client) + insert_audio(speaker, scene, new_track_id, client) + apply_pan_automation(speaker, scene, new_track_id, client) client.close() return True - except: + except ptsl.CommandError as e: + print("Command Error: {}".format(e)) return False + + except AssertionError as e: + raise e diff --git a/operator_protools_export.py b/operator_protools_export.py index c411dcf..3f74688 100644 --- a/operator_protools_export.py +++ b/operator_protools_export.py @@ -30,6 +30,7 @@ class SendToProTools(bpy.types.Operator): return wm.invoke_props_dialog(self, confirm_text="Send to Pro Tools") def execute(self, context) -> set: + print("Execute called...") if pro_tools.send_to_pro_tools( filter_speakers(context.selected_objects), self.room_size):