3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VST3のテストについて その1

Last updated at Posted at 2020-08-27

VST3制作の過去記事一覧はこちら

はじめに

音楽制作用DAWのプラグイン仕様VST3のテストついてインターネットのヤホーで調べました。
長くなったので2回に分けました。続きの記事はこちらです。

この記事はVST3プラグインを書く人向けの内容です。

テストツール

VST3 SDKには公式テストツールとしてvalidatorが含まれています。
validatorはコマンドラインツールで、以下のように使います。

> validator <vst3_plugin_name>

また、VST3.7から含まれるVST3_Project_Generatorで生成したプロジェクトは、ビルドイベントとしてvalidatorによるチェック処理が毎回走るようになっています。

一般的なテストフレームワークとの類似点・相違点

  • toEqualのようなMatcherは用意されていない
  • テストクラスはITestインタフェースを実装する
  • setup()で前処理、run()でテスト実行、teardown()で後処理、getDescription()で説明文を返すよう実装する
  • run()でfalseを返すとテストNGとしてカウントされる
  • setup()でfalseを返すとrun()は実行されない。テストNGにならないので注意!
  • FactoryクラスのcreateTests()でparentSuite->addTest()してテストを登録する
  • Visual Studioのテストエクスプローラーに組み込めるテストアダプターは用意されていない
  • たぶんテスト用プロジェクトとリリース用プロジェクトを分けない設計思想。独自のテストを書いた場合、製品版にテストコードが含まれないようにするのは結構大変

validatorのビルトインテスト

validatorはプラグイン側に何もしなくても以下のテストを行います。

(1) 一般テスト

テスト名 テスト内容
Scan Editor Classes エディットコントローラはプロセッサと同一か別かチェック。エディットコントローラが正しいクラスIDを返さないとFail
Scan Buses オーディオバスとイベントバスの数をチェック。バス数が0やバス名がついていないとFail
Scan Parameters パラメータの数と型、Unit使用の有無をチェック。IDの重複や初期値の不正、同時に使えないフラグなどがあればFail
MIDI Mapping MIDI CCの対応状態をチェック。不正なCCナンバーにアサインされていたりするとFail
MIDI Learn MIDI Learn機能をサポートしているかどうかチェック
Scan Units パラメータ階層化(Unit)機能を使っているかチェック。IDなどの不正があればFail
Scan Programs パラメータのプリセット機能を使用しているかチェック。ID不正や無名プリセットがあるとFail
Terminate/Initialize プラグインのterminate()関数、initialize()関数を呼んで、異常ステータスが返ればFail
Check Unit Structure パラメータ階層化(Unit)の階層参照関係に不正があればFail
Valid State Transition setActive()、terminate()、initialize()を繰り返して、異常ステータスが返ればFail
Bus Consistency 最初に全バス情報を取得、その後ランダムに各バス情報を取得して最初に取得した内容と異なればFail
Bus Activation バスのアクティブ状態を変更して、異常ステータスが返ればFail
Check Audio Bus Arrangement オーディオバスの情報を取得して、異常ステータスが返ればFail
SideChain Arrangement サイドチェーンバスの有無をチェック。もしあればバス状態を変更指示して指示通りに変更されていなければFail。サイドチェーンバスかどうかはbusTypeで判断(通常のオーディオバスはkMain、サイドチェーンはkAux)
Suspend/Resume setActive(true/false)を繰り返して、異常ステータスが返ればFail
Note Expression Note Expression関係の各種情報を取得して、異常ステータスが返ればFail
Keyswitch キースイッチ関係の各種情報を取得して、異常ステータスが返ればFail
ProcessContext Requirements VST3.7から必須になった、プラグインがシステム時間、テンポ、コードなどの情報を必要とするかを返す機能のチェック。バージョン3.7以降のSDKを使っていてIProcessContextRequirementsインタフェースを実装していないとFail

(2) 32bit処理テスト

テスト名 テスト内容
Process Test エフェクターをアクティブ化してprocess()関数を呼び、異常ステータスが返ればFail。※以降のテストはこのProcessTestを継承しておりprocess()関数を呼ぶ前処理・後処理を書きやすくしている
Process function running in another thread 新規スレッドでprocess()関数を呼び、異常ステータスが返ればFail
Silence Flags サイレンスフラグの各ビットパターンでprocess()関数を呼び、異常ステータスが返ればFail
Silence Processing 出力があるのにサイレンスフラグが立っていたり、無音なのにサイレンスフラグを立てていなければ警告
Parameters Flush (no Buffer) 入出力バス数0、バッファnullptrでオートメーション関数やprocess()関数を呼び、異常ステータスが返ればFail
Parameters Flush 2 (only numChannel==0) 入出力チャンネル数0、バッファnullptrでオートメーション関数やprocess()関数を呼び、異常ステータスが返ればFail
Parameters Flush 3 (no Buffer, no parameter change) 入出力バス数0、バッファnullptrでprocess()関数を呼び、異常ステータスが返ればFail
Variable Block Size サンプリングバッファのサイズをランダムに変えてprocess()関数を呼び、異常ステータスが返ればFail。TOUGHTESTSを#defineすると不正なサイズを渡してテストする
Process Format サンプリングレートを22050~384000Hzまで変えてprocess()関数を呼び、異常ステータスが返ればFail。その後1234.5678Hzのような実数でもテストする
Parameter Bypass persistence Bypass機能の有効・無効を指示して指示通りに変更されていなければFail
Speaker Arrangement サポートしている入出力オーディオバスのチャンネル数をチェック。チャンネル数を変更指示して指示通りに変更されていなければFail
Automation ランダムにオートメーションパラメータの値を変えてチェックする

(3) 64bit処理テスト

前項の32bit処理テストと同じ内容を64bitでもおこなう。

おわりに

今回はVST3 SDKのvalidatorについて概要をまとめました。
次回は独自のテストを自作プラグインに組み込む方法を説明します。

次の記事:VST3のテストについて その2
https://qiita.com/aike@github/items/3366ccb9dd4b9f297302

VST3制作の過去記事一覧はこちら

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?