Adobe Audition Script - DTMプログラミング言語探訪

[DTMプログラミング言語探訪](https://qiita.com/aike@github/items/77b3eccc6861de09513a)

# Adobe Audition Script

## 概要

波形編集ソフトを使う作業は定型的な操作が多いため、多くのソフトは手順を自動化するためのバッチ機能を搭載しています。また、そのうちいくつかのソフトはテキスト言語でバッチ処理を書くスクリプト機能を持っています。
Adobe Auditionもバッチ処理を持っています。またスクリプト機能も搭載されていますが最新のドキュメントには載っていません。そのあたりの状況も含めて説明します。

## 用途

- 定型的手順の自動化
- 複数ファイルの一括処理

## バッチ処理

本題ではありませんが、スクリプトを使わないバッチ処理の手順も比較のために説明しておきます。

### バッチジョブ作成

Auditionではバッチジョブはテンプレートと呼ばれています。英語版ではFavoritesという名前なので海外の情報にあたるときは注意が必要です。
テンプレートは以下の手順で作成します。

テンプレート記録ボタンを押します。
記録したい波形編集をおこないます。
テンプレート記録ボタンを再度押すとテンプレート名を入力するダイアログが出るので入力してOKボタンを押します。
![ad1_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/125cbe68-900e-2293-94b1-53ce72f1728e.png)


### バッチジョブ実行

現在編集中のオーディオに対してバッチジョブを適用する場合は、テンプレート実行ボタンを押します。


複数ファイルに対してバッチジョブを適用する場合は、バッチ処理パネルを開いて対象ファイルをドラッグ＆ドロップ、またはフォルダアイコンから選択します。
「実行」ボタンを押すとバッチジョブが適用されます。
![ad2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/b220aa89-050d-3ceb-0dd6-353f810c67a9.png)
Auditionのバッチジョブは順次実行するわけではなく複数プロセスで同時に実行するのでPC性能によっては非常に高速に実行されます。


## 言語仕様

Adobe製品の多くはExtendScript Toolkit(ESTK)と呼ばれるスクリプティング環境からJavaScript言語で制御できます。AuditionもESTKで作成したプログラムから自動で波形編集処理をすることができます。

- JavaScript
- アプリケーションAPI
- ファイルシステムAPI
- GUI API

以下のページからダウンロードできる「JavaScript Tools Guide」がアプリ共通のJavaScript機能のドキュメントです。
https://www.adobe.com/devnet/scripting/estk.html

アプリケーション個別のAPIはESTKの「ヘルプ」メニュー → 「オブジェクトモデルビューア」で参照します。


### 注

Auditionのスクリプティング機能は、公式には削除された機能という扱いのようです。[アップデート履歴](https://helpx.adobe.com/jp/audition/kb/cpsid_90450.html)によると、Audition CS5.5で高度なスクリプトサポートは削除され、代わりにテンプレート機能で同等のタスクを実行できるとあります。
今のところ最新版のAuditionでも使えていますが、いつ使えなくなってもおかしくない状況です。


## プログラム例

### テンプレートを一括適用

複数のファイルにテンプレートを適用するスクリプトです。
入力ファイルのフォルダと出力先のフォルダをスクリプトに指定しています。対象フォルダにある.wavファイルをすべて処理します。

```javascript:NormalizeTrim.jsx
var in_folder_name = 'd:\\work\\samples\\';
var out_folder_name = 'd:\\work\\processed\\';
var template = 'my_template';

var in_folder = Folder(in_folder_name);
var files = in_folder.getFiles('*.wav');

for (var i = 0; i < files.length; i++) {
    $.writeln(files[i].fsName);
    var param = new DocumentOpenParameter(files[i].fsName);
    app.openDocument(param);
    var doc = app.activeDocument;
    doc.applyFavorite(template);
    doc.saveAs(out_folder_name + files[i].name);
    $.sleep(100);
    doc.closeDocument();    
}
```
セーブ直後にファイルを閉じようとするとアプリが落ちたので、$.sleep()で100msecのウエイトを入れています。

オブジェクトモデルビューアで見るとわかるのですが、AuditionはPhotoshopなどと異なり、呼べるメソッドが非常に少ないです。そのため、個別のエフェクト機能を操作するのではなく、上記のようにテンプレートを作成しておいてテンプレートを呼ぶかたちになります。
![ad3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/6f75c70e-7e31-b0db-0b0a-398f8c3aea8e.png)
しかしながら、「エフェクト」メニュー → 「診断」 → 「無音を削除」のように、テンプレートに記録できない機能もあり、そういった機能を使用する手順が自動化できないのは大変残念です。


## スクリプトの使用方法

### ESTKインストール

以前は製品にESTKも付属していたようですが、最新のAdobe CCでは別途ダウンロードする必要があります。

Creative Cloud Desktopアプリを開いて、「ファイル」メニュー → 「環境設定」を選択。
左側の「アプリ」を選択して「古いアプリを表示」を有効にします。

![ad4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/24139b5d-4be1-d7f7-e2e6-3dfb70310ac2.png)

「古いアプリを表示」を有効にすることで「すべてのアプリ」一覧にExtendscript Toolkit CCが出てきます。これをインストールしてください。
![ad5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/db38b5a0-37ed-7328-cc9f-f59ce271fd42.png)

### ESTKのVisual Studio Code拡張

macOS Catalina以降などESTKがインストールできない環境もあるとのことで、ESTKはVisual Studio Codeの拡張機能が用意されており、今後はこちらの方がメインになるのかもしれません。

![ad6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/058a994e-d165-d61e-91dc-6ad5711cdae0.png)


### スクリプト作成

ESTKを起動します。
左上のドロップダウンメニューからAdobe Auditionを選択します。
![ad7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/416b53bb-34d3-c6b2-28dd-ceaf5e778454.png)

「ヘルプ」メニュー「オブジェクトモデルビューア」はアプリケーションのAPIを確認するのに必須です。
![ad9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/14565b6d-8e98-5810-27b2-66380e9e8b0a.png)

### 実行

ツールバーに並んでいるアイコンの左端の三角ボタンでスクリプトを実行します。
もしAuditionが起動していなかったら、起動するかどうかダイアログが表示されます。
![ad10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/f732bc89-5cf5-195a-65ae-cc73e68ce508.png)
右側の三つのボタンはデバッガ機能で、ステップオーバー、ステップイン、ステップアウトです。これらを使うことで1行ずつ止めながらスクリプトを実行、デバッグすることができます。

## 感想

PhotoshopなどではESTKは比較的よく使われている印象ですが、標準でバンドルされなくなったり、サポートに力を入れていない印象なので将来性はあまり期待できないかもしれません。
特にAuditionの場合、ドキュメント上は削除された機能となっており、また他のAdobeアプリにくらべてもAPIが貧弱であるため積極的に利用できるものではないように思います。
今後使い続けられる保証もないので、あまり頼らない方が良いかもしれません。

ESTK自体は、JavaScriptの文法でファイルシステムにアクセスできたりデバッガもしっかりしていて興味深い言語環境ではあります。AuditionはともかくPhotoshopなどの自動化には非常にパワフルなツールという印象がしました。

[DTMプログラミング言語探訪](https://qiita.com/aike@github/items/77b3eccc6861de09513a)