VST/AUでのログ出力準備
ビルドと同時にAudio Plugin Hostを起動することでログを確認する。
ダブルクリックで追加可能なプラグイン一覧が表示されるので確認したいプラグインを選択して追加する。
Editor関係は追加されたプラグインをダブルクリックしてUIが表示されたタイミングからログが確認できる。
一覧に無い場合は⌘(ctrl)+P > 左下Options... > scan for new or update ○◯ plug-ins
を実行すると一覧に表示されるようになる
Xcode(mac)
Edit Scheme > Run > Execute
でAudio Plugin Host
を選択
Visual Studio(windows)
以下はVisualStudio上でログを確認するための手順ですが作業量が多いので後述のFileLoggerを使用するのが無難かもしれません。
管理者権限でVisual Studioを起動させる
デスクトップ等にショートカットを作成し、右クリック > 管理者として実行
で管理者権限で起動できる。
projucerから出力した際に対応できるように常に管理者権限で開くには以下のリンクのように
VisualStudioのファイルの場所に移動し、
devenv.exe
を右クリック > 互換性のトラブルシューティング > 問題のトラブルシューティング > 「プログラムにアクセスするには追加のアクセス許可が必要になる」
にチェックすることで可能になる。
AudioPluginHostをビルド後に自動で起動させる
ソリューションエクスプローラーにて「プロジェクト名_VST3」を選択して右クリック > スタートアッププロジェクトに設定
ソリューションエクスプローラで「プロジェクト名_VST3」を右クリック>プロパティ等でプロパティページ を開き
・左上の構成で「すべての構成」を選択
・構成プロパティ/デバッグ > コマンドにAudioPluginHost.exeのパスを指定
ProjucerでVisual Studio20xxのDebug/Releaseを選択、
Post-build Command
にstart AudioPluginHost.exeのフルパス
と記述
ただし、この方法だとVST以外(SharedCode等)のビルド時にもAudioPluginHostが起動してしまうので
起動させたくないプロジェクト(SharedCode等)のプロパティ > ビルドイベント > ビルド後のイベント > コマンドライン
を何も記述されていない状態にしておく
プラグインをVST3ディレクトリにコピー
VST3のデフォルトパスであるC:¥Program Files¥Common Files¥VST3
にビルド後に自動で追加されるようにする。
プロパティ > 構成プロパティ/ビルドイベント > ビルド後のイベント にて
コマンドラインにxcopy "$(TargetPath)" "$(CommonProgramW6432)¥VST3¥" /Y
と記述
C:¥Program Files¥Common Files¥VST3
フォルダがなければ作成しておく。
ProjucerでVisual Studio20xxのDebug/Releaseを選択、
・EnablePluginCopyStep
をEnable
に指定
・VST3BinaryLocation
に$(CommonProgramW6432)\VST3
と記述
プロセスのアタッチ
ビルド & AudioPluginHostの起動後、デバッグ > プロセスにアタッチ > 使用可能なプロセス
からAudioPluginHostを選択しアタッチすることでログが確認できるようになる。
※毎回この作業をするのが面倒なので自動的にアタッチする方法をご存知の方はご指摘いただけると助かります。。
ログ出力
DBG()
シンプルなログ出力
int hoge = 1;
DBG("hoge: " << hoge); // hoge: 1
FileLogger
FileLoggerを使用してログをテキストファイルに出力することができる。
FileLoggerはDBGの実体に使われているLoggerの継承クラスであり、個別にインスタンスを作るよりDBGの出力先を変更する使い方が良さそう。
->windowsのDBG()はLoggerが使われていないためLogger::getCurrentLogger()->WriteToLog()を使うようにしてファイル書き出ししたい場合はFileLoggerをcurrentLoggerに設定するのが良さそう。
// ユーザー/Library/Logs/JUCE/test_日付.txtにログ出力される。ログ冒頭にstart logging.と記述される。
FileLogger* fileLogger = FileLogger::createDateStampedLogger("JUCE", "test_", ".txt", "start logging.");
// ユーザー/Library/Logs/JUCE/test.txtにログ出力される。ログ冒頭にstart logging.と記述される。
fileLogger = FileLogger::createDefaultAppLogger("JUCE", "test.txt", "start logging.");
// [Mac] プラグインパッケージ/Contents/log.txtにログ出力される。ログ冒頭にstart logging.と記述される。
fileLogger = new FileLogger(File::getSpecialLocation(File::currentApplicationFile)
.getChildFile("Contents")
.getChildFile("log.txt"),
"start logging.");
// [Windows] C:¥Program Files¥Common Files¥VST3¥log.txtにログ出力される。ログ冒頭にstart logging.と記述される。
fileLogger = new FileLogger(File::getCurrentWorkingDirectory().getChildFile("log.txt"), "start logging.");
// インスタンスを使用してログ出力
fileLogger->logMessage("test");
// FileLoggerを使用してログの出力先をテキストファイルに変更
Logger::setCurrentLogger(fileLogger);
Logger::getCurrentLogger()->WriteToLog("hoge");