Waveform には、プログラム可能なショートカットだけでなく、本格的なマクロ・プログラミング環境が用意されています。複数のアクションを新しい形で組み合わせたキーボードショートカットを作成し、ワークフローを効率化できます。標準のキーボードショートカットでは要件を満たせない場合、独自のマクロを作成してキーボードショートカットに割り当てられます。
マクロは「キーボードマクロ」と考えがちですが、必ずしもキーボードショートカットに割り当てる必要はありません。メニューセクションの Run Script ボタンからいつでも実行できます。たまにしか使わないマクロはショートカットを覚えておく必要がないため、この方法が便利です。
スクリプトエディターを開くには、Settings タブに移動し、Keyboard Shortcuts ページを選択します。Keyboard Shortcuts ページの右下にある Show Script Editor を有効にすると、スクリプトエディターが開きます。

スクリプトエディター(The Script Editor)
スクリプトエディターとキーボードショートカット一覧を区切る線をドラッグすると、スクリプトエディターの高さを変更できます。スクリプトエディターは、マクロスクリプトを入力・編集するための基本的なテキストエディターです。
新しいマクロを作成するには、スクリプトエディターの Add a new macro をクリックします。これにより、キーボードショートカット一覧の Macros セクションの一番下に「Untitled Macro」という名前の新しいマクロが追加されます。

新しいマクロの追加(Adding a New Macro)
新しいマクロを作成すると、名前は初期状態で「Untitled Macro」となり、選択された状態になります。そのまま入力を始めて、適切な名前を付けてください。
マクロの本体には、アクションのリストを入力してスクリプトを作成します。最も簡単な方法は、右クリックメニューを使ってマクロを組み立てることです(詳しくは後述します)。アクションはセミコロンで区切ります。
組み込みのキーボードショートカットは削除できませんが、自分で作成したカスタムマクロは削除できます。削除するには、キーボードショートカット一覧で削除したいマクロを選択し、スクリプトエディターの Delete macro をクリックします。
最も単純なマクロは、1 つのアクションで構成されます。スクリプトエディターを右クリックし、3 つのアクション群をたどって、利用可能な任意のアクションを選べます。使いたいアクションを見つけて選択すると、対応するコードがスクリプトに挿入されます。

スクリプトエディターの右クリックメニューからアクションを選択(Selecting Actions from the Script Editor Right-click Menu)
マクロを実行する方法はいくつかあります。

Run Script > User Macros でマクロを実行(Running Macros using Run Script > User Macros)

スクリプトツリーエディター(The Script Tree Editor)
単純なアクションのリストを順番に作成するだけでなく、JavaScript の力を使ってマクロプログラミングをさらに高度なレベルへ引き上げられます。スクリプトエディターでは、JavaScript の構文を使ってループや条件を記述できます。スクリプトの各要素にはカラーコーディング(色分け)も適用されます。

JavaScript マクロの例(Javascript Macro Example)

マクロアクションの「ドット」記法(Macro Actions 'dot' Notation Syntax)
スクリプトエディターでアクションの上に 1〜2 秒カーソルを合わせると、そのアクションがどのようなパラメーターを取るかを説明するツールチップが表示されます。アクションが値を返す場合は、その構文も表示されます。これらのツールチップは、マクロをプログラミングする際の重要な情報を提供します。Waveform の開発者は、各アクションの動作について有益なヒントを与えるためにこの仕組みを用意しています。

アクションにカーソルを合わせるとツールチップが表示される(Hover Over an Action for a Tooltip)
上の例では、zoom アクションが 2 つの倍精度数値パラメーターを取ることがツールチップに示されています。1 つ目は x-proportion(垂直方向のズーム量)、2 つ目は y-proportion(水平方向のズーム量)です。
Waveform には、既定では本当の意味での Return-to-Zero(RTZ、ゼロ位置への復帰)キーボードショートカットがありません。組み込みのコマンドは In-mark に到達するとまずそこで停止するため、本当に先頭(ゼロ)まで戻すには 2 回押す必要があります。しかし、この動作を 2 回実行して常にカーソルを Edit の先頭に戻すマクロを作成できます。

真の Return-to-Zero マクロの例(True Return-to-Zero Macro Example)
たとえば、この RTZ マクロを Home キーに割り当てることができます。
よく使う可能性があるもう 1 つの機能が Merge Clips(クリップの結合)です。通常は、トラック上で結合したい複数のクリップを選択し、プロパティから Render Clips > Merge the Selected Clips を選択して使用します。頻繁に行う場合は、これを 1 つのキーボードショートカット(たとえば Cmd + G / Ctrl + G)で実行できます。

クリップ結合マクロの割り当て(Merge Clips Macro Assigned)
マクロは実際には単純なテキストにすぎません。スクリプトエディターに対して、テキストをそのままコピー&ペーストするだけで簡単に出し入れできます。さらに Waveform には、マクロスクリプトを .Waveformscript 拡張子の XML ファイルとしてインポート/エクスポートする専用ボタンも用意されています。

スクリプトの入力/書き出しボタン(Script Input and Export Buttons)
Waveform のエンジニアが、はじめの一歩に役立つマクロスクリプトのコードサンプルをいくつか提供しています。
// Rename Clips From Track
var tracks = Waveform.getSelectedEditElements ('track');
for (var i = 0; i < tracks.length; ++i)
{
var track = tracks[i];
var trackName = Waveform.getName (track);
var clips = Waveform.getClipsFromTracks (track);
for (var c = 0; c < clips.length; ++c)
{
var clipName = trackName + " " + (c + 1);
Waveform.setName (clips[c], clipName);
}
}
// Reset Tracks Solo/Mute
var tracks = Waveform.getEditElements ('track');
Waveform.setSolo (tracks, false);
Waveform.setSoloIsolate (tracks, false);
Waveform.setMute (tracks, false);
//Next Active Automation Parameter
var track = Waveform.getTrackFromSelectedObject();
Waveform.changeActiveAutomationParameter (track, 1);
// Insert Plugin with Preset
var track = Waveform.getTrackFromSelectedObject();
var plugin = Waveform.insertPlugin (track, "Massive", 0, "AudioUnit");
var preset = Waveform.getPresetFromLibrary ("Massive All Souls");
Waveform.setPluginPreset (plugin, preset);
// Jump to tab 2
var index = Waveform.getWindowTabIndex();
var delta = 2 - index;
Waveform.changeWindowTabIndex (delta);
// Rename Selected Tracks
var tracks = Waveform.getSelectedEditElements ('track');
Waveform.setName (tracks[0], 'Kick');
Waveform.setName (tracks[1], 'Snare');
Waveform.setName (tracks[2], 'Hats');
// etc.
// Save Selected Plugins as Preset
var plugins = Waveform.getSelectedEditElements ('plugin');
Waveform.saveObjectsAsPreset (plugins);
/* Park the In-Marker & Out-Markers
Parks the In-marker and Out-marker at Zero then Restores Cursor Position. I wrote this macro to help a KVR forum member find a quick way to hide the In-marker and Out-marker.
*/
var SavePosition = Waveform.getPosition ('cursor');
Waveform.moveTransportToStart();
Waveform.moveTransportToStart();
Waveform.markIn();
Waveform.markOut();
Waveform.setPosition ('cursor', SavePosition);
/* Search Plugins
Opens the Browser to the Search tab, enables the Plugin searching while disabling searching for Presets and Loops.
*/
Waveform.showSidePanel ('search'); // Opens Browser to the Search tab
Waveform.enableSearchLibrary ('plugin', true);
Waveform.enableSearchLibrary ('preset', false);
Waveform.enableSearchLibrary ('loop', false);
Waveform.setSearchPanelText (''); // loads blank text so you can start typing the search term right away
// Rename selected clips to 'Drums'
var clips = Waveform.getSelectedEditElements ('clip');
for (var i = 0; i < clips.length; ++i)
Waveform.setName (clips[i], 'Drums');
// Rename selected tracks to 'Drums'
var tracks = Waveform.getSelectedEditElements ('track');
for (var i = 0; i < tracks.length; ++i)
Waveform.setName (tracks[i], 'Drums');
ここで紹介したのは、かなり単純な例です。Waveform ユーザーは、Waveform のマクロプログラミングが持つ強力な機能を、まだ探求し始めたばかりです。
参照元情報:Waveform User Manual
https://tracktion.github.io/waveform_manual/macros/