Advertisement
Guest User

Simple AE tempo-to-markers script

a guest
Jan 29th, 2025
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 5.72 KB | Source Code | 0 0
  1. // @target aftereffects
  2.  
  3. (function createUI() {
  4.     var dialog = new Window("palette", "Tempo Marker Generator", undefined);
  5.     dialog.orientation = "column";
  6.     dialog.alignChildren = ["left", "top"];
  7.     dialog.spacing = 10;
  8.     dialog.margins = 16;
  9.  
  10.     var bpmGroup = dialog.add("group");
  11.     bpmGroup.orientation = "row";
  12.     bpmGroup.spacing = 10;
  13.     bpmGroup.add("statictext", undefined, "BPM:");
  14.     var bpmInput = bpmGroup.add("edittext", undefined, "120");
  15.     bpmInput.characters = 5;
  16.  
  17.     var durationGroup = dialog.add("group");
  18.     durationGroup.orientation = "row";
  19.     durationGroup.spacing = 10;
  20.     durationGroup.add("statictext", undefined, "Duration (sec):");
  21.     var durationInput = durationGroup.add("edittext", undefined, "10");
  22.     durationInput.characters = 5;
  23.  
  24.     var buttonGroup = dialog.add("group");
  25.     buttonGroup.orientation = "row";
  26.     buttonGroup.spacing = 10;
  27.  
  28.     var applyButton = buttonGroup.add("button", undefined, "Apply");
  29.     var cancelButton = buttonGroup.add("button", undefined, "Cancel");
  30.  
  31.     applyButton.onClick = function() {
  32.         app.beginUndoGroup("Add Tempo Markers");
  33.        
  34.         try {
  35.             var comp = app.project.activeItem;
  36.             if (!comp || !(comp instanceof CompItem)) {
  37.                 alert("Please select a composition.");
  38.                 return;
  39.             }
  40.  
  41.             var selectedLayers = comp.selectedLayers;
  42.             if (selectedLayers.length === 0) {
  43.                 alert("Please select a layer.");
  44.                 return;
  45.             }
  46.  
  47.             var bpm = parseFloat(bpmInput.text);
  48.             var duration = parseFloat(durationInput.text);
  49.  
  50.             if (isNaN(bpm) || isNaN(duration)) {
  51.                 alert("Please enter valid numbers.");
  52.                 return;
  53.             }
  54.  
  55.             var secondsPerBeat = 60 / bpm;
  56.  
  57.             for (var i = 0; i < selectedLayers.length; i++) {
  58.                 var layer = selectedLayers[i];
  59.                 if (!layer.property("ADBE Marker")) {
  60.                     alert("Cannot add markers to this type of layer.");
  61.                     continue;
  62.                 }
  63.  
  64.                 var startTime = layer.inPoint;
  65.                 var endTime = startTime + duration;
  66.                 var markerProp = layer.property("ADBE Marker");
  67.                 var beatCount = 1;
  68.                
  69.                 for (var time = startTime; time <= endTime; time += secondsPerBeat) {
  70.                     var marker = new MarkerValue("Beat " + beatCount);
  71.                     markerProp.setValueAtTime(time, marker);
  72.                     beatCount++;
  73.                 }
  74.             }
  75.         } catch (e) {
  76.             alert("Error: " + e.toString());
  77.         }
  78.  
  79.         app.endUndoGroup();
  80.     };
  81.  
  82.     cancelButton.onClick = function() {
  83.         dialog.close();
  84.     };
  85.  
  86.     dialog.show();
  87. })();
  88.  
  89.  
  90. // @target aftereffects
  91.  
  92.  
  93. (function createUI() {
  94.     var dialog = new Window("palette", "Tempo Marker Generator", undefined);
  95.     dialog.orientation = "column";
  96.     dialog.alignChildren = ["left", "top"];
  97.     dialog.spacing = 10;
  98.     dialog.margins = 16;
  99.  
  100.  
  101.     var bpmGroup = dialog.add("group");
  102.     bpmGroup.orientation = "row";
  103.     bpmGroup.spacing = 10;
  104.     bpmGroup.add("statictext", undefined, "BPM:");
  105.     var bpmInput = bpmGroup.add("edittext", undefined, "120");
  106.     bpmInput.characters = 5;
  107.  
  108.  
  109.     var durationGroup = dialog.add("group");
  110.     durationGroup.orientation = "row";
  111.     durationGroup.spacing = 10;
  112.     durationGroup.add("statictext", undefined, "Duration (sec):");
  113.     var durationInput = durationGroup.add("edittext", undefined, "10");
  114.     durationInput.characters = 5;
  115.  
  116.  
  117.     var buttonGroup = dialog.add("group");
  118.     buttonGroup.orientation = "row";
  119.     buttonGroup.spacing = 10;
  120.  
  121.  
  122.     var applyButton = buttonGroup.add("button", undefined, "Apply");
  123.     var cancelButton = buttonGroup.add("button", undefined, "Cancel");
  124.  
  125.  
  126.     applyButton.onClick = function() {
  127.         app.beginUndoGroup("Add Tempo Markers");
  128.        
  129.         try {
  130.             var comp = app.project.activeItem;
  131.             if (!comp || !(comp instanceof CompItem)) {
  132.                 alert("Please select a composition.");
  133.                 return;
  134.             }
  135.  
  136.  
  137.             var selectedLayers = comp.selectedLayers;
  138.             if (selectedLayers.length === 0) {
  139.                 alert("Please select a layer.");
  140.                 return;
  141.             }
  142.  
  143.  
  144.             var bpm = parseFloat(bpmInput.text);
  145.             var duration = parseFloat(durationInput.text);
  146.  
  147.  
  148.             if (isNaN(bpm) || isNaN(duration)) {
  149.                 alert("Please enter valid numbers.");
  150.                 return;
  151.             }
  152.  
  153.  
  154.             var secondsPerBeat = 60 / bpm;
  155.  
  156.  
  157.             for (var i = 0; i < selectedLayers.length; i++) {
  158.                 var layer = selectedLayers[i];
  159.                 if (!layer.property("ADBE Marker")) {
  160.                     alert("Cannot add markers to this type of layer.");
  161.                     continue;
  162.                 }
  163.  
  164.  
  165.                 var startTime = layer.inPoint;
  166.                 var endTime = startTime + duration;
  167.                 var markerProp = layer.property("ADBE Marker");
  168.                 var beatCount = 1;
  169.                
  170.                 for (var time = startTime; time <= endTime; time += secondsPerBeat) {
  171.                     var marker = new MarkerValue("Beat " + beatCount);
  172.                     markerProp.setValueAtTime(time, marker);
  173.                     beatCount++;
  174.                 }
  175.             }
  176.         } catch (e) {
  177.             alert("Error: " + e.toString());
  178.         }
  179.  
  180.  
  181.         app.endUndoGroup();
  182.     };
  183.  
  184.  
  185.     cancelButton.onClick = function() {
  186.         dialog.close();
  187.     };
  188.  
  189.  
  190.     dialog.show();
  191. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement