JUCE Frameworkを使ってVST/AudioUnitプラグインを作る Mac編 -HelloWorldの巻-


# JUCE frameworkについて

JUCE(Jules' Utility Class Extensions) framework はC++言語で様々なマルチメディア系アプリケーションを作るのを支援するフレームワークです。[公式サイト](http://www.juce.com/)
付属のエディタ『Projucer』から複数のIDE(VisualStudio, Xcode, Makefile)向けのプロジェクトファイルを自動で出力してくれるので、**ワンソースでクロスプラットフォーム**なアプリケーションの作成を実現できます。
一機能としてVSTプラグインやAudioUnitプラグイン（以下AU）を作成することができます。

本記事はその機能を使って、VST/AUプラグインを作る工程を紹介します。
※VST = Steinberg's Virtual Studio Technology



# 準備
## JUCE Frameworkの入手
+ Get JUCE (2016/05/07現在)
  - 公式サイトの[ダウンロードページ](http://www.juce.com/get-juce)でメールアドレスを入力して。"submit"してください。  

+ プラットフォーム選択
  - Mac, Windows, Linux用のダウンロードリンクが表示されるので、
  自分の環境に合わせてダウンロードしましょう。
  今回はMac編なので、『Download JUCE for Mac』を選択します。
  - 『juce-grapefruit-osx.zip』のダウンロードが完了したら、解凍します。
  適当なディレクトリに置いて頂いて構いません。
<img width="450" alt="スクリーンショット 2016-01-24 1.16.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/908ece44-2736-a13b-0924-0f7699b3bde3.png">

## VST SDKの入手
+ Get VST SDK
  - Steinberg社の[開発者向けページ](http://www.steinberg.net/en/company/developers.html)
  中の『VST 3.6.5 Audio Plug-Ins SDK』と書かれたダウンロードリンクから入手します。
  - 『vstsdk365_XX_XX_XXXX_build_XX.zip』のダウンロードが完了したら、
  zipを解凍して『VST3 SDK』フォルダを適当なディレクトリに置いてください。  
これからの説明を簡単にするため、今回は以下のディレクトリに置きます。  
  ディレクトリ：~/SDKs/VST3 SDK


---

# HelloWorld
## Projucerでの作業
+ Projucer起動
  - 先ほど解凍した『juce-grapefruit-osx』フォルダの中にある『Projucer.app』を起動すると、新規プロジェクト作成画面が表示されます。  
  ※表示されない場合は、『File』→『New Project』を選択すると新規ウインドウで表示されます。
<img width="800" alt="スクリーンショット 2016-01-24 1.45.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/cbb867f9-e6cc-16f9-5abc-6d8e9cbd1dc8.png">

+ VST SDKのパス設定
  - 『Tools』→『Global Preferences』を選択するとこの画面が出てきます。  
  『VST SDK』と『VST3 SDK』のパス設定を、先ほど配置した『VST3 SDK』ディレクトリに設定してください。  
<img width="450" alt="スクリーンショット 2016-01-24 1.45.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/dbe343bd-f365-2b6d-00cf-f46513297201.png">


+ 新規プロジェクト作成
  - スタート画面に並んだアイコンのうち[Audio Plug-in]と書かれた下段左から2番目のアイコンをクリックしてください。  
  - 『Project Name』プロジェクト名の設定 クラス名の一部に自動的に使用されます。  
  - 『Target Platforms』ビルドターゲット・IDEの選択
  <img width="800" alt="スクリーンショット 2016-01-24 2.10.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/3b6eeaf9-6c2b-af8a-6cb7-83148a5f9dca.png">

+ Configタブ - プロジェクトの設定
  - 出力したいビルド形式にチェックしてください
     - 『Build VST』 VST(2.4)形式で出力
     - 『Build VST3』VST3形式で出力
     - 『Build AudioUnit』AU形式で出力
  - 『Bundle Identifier』com."Plugin Name"."Plugin Manufacturer" としておくとよい
  - 『Plugin Name』ホストアプリケーションに読み込まれた際にプラグイン名として表示
  - 『Plugin Manufacturer』ホストアプリケーションに読み込まれた際にベンダー名として使用される
  <img width="800" alt="スクリーンショット 2016-01-24 2.10.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/45f57a7a-7bed-d804-d7e6-1738f9077df9.png">
  - Xcode用設定項目
     - デプロイ設定が自動生成されます
  <img width="800" alt="スクリーンショット 2016-01-24 1.58.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/28b09b1c-417b-9100-dc9a-240bbb82999d.png">
   
+ Filesタブ - 自動生成ファイルについて
  - PluginProcessor.cpp/.h
     - DLLのエントリポイントやホストアプリケーションとの入出力を担当します。
     - オーディオバッファのポインタを取得します。
  - PluginEditor.cpp/.h
     - GUIを実装します。
<img width="1012" alt="スクリーンショット 2016-01-24 1.59.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/3e223258-71a1-bd29-ecc4-4090a1544722.png">

+ 音声処理部のプログラミング
  - こちらの記事をご参照ください ⇒ [JUCEでHello Sine!](https://qiita.com/COx2/items/12a48c4a30c49732dcc5#juce%E3%81%A7hello-sine)


+ GUIのプログラミング
  - こちらの記事をご参照ください ⇒ [ProjucerのGUIエディタを紹介してみる](https://qiita.com/COx2/items/95d2c89962cf9ddef841)

+ Xcodeの起動
  - Configタブの"Open in IDE"をクリックして"Xcode"を選択。

---
## Xcodeでの作業
+ Deplyment Targetの設定
  - 対象環境としたいOSXのバージョンより前のものを選択してください。
  - Deplyment Targetより前のOSX上では、ホストアプリケーションに認識されないケースを確認しています。
<img width="650" alt="スクリーンショット 2016-01-24 2.11.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/4e450c06-1752-445e-7a31-97928ae27eae.png">

+ Architecturesの設定
  - 32bitプラグイン/64bitプラグインとして出力する選択はここで行います。
<img width="650" alt="スクリーンショット 2016-01-24 2.11.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/3cc3ae9c-e108-bd14-0e98-08cfae42f403.png">

+ ビルド
  - 『Product』→『Build』  
  
+ デプロイ先ディレクトリの確認
  - AudioUnit："~/Library/Audio/Plug-Ins/Components/XXX.component"
<img width="800" alt="スクリーンショット 2016-01-24 2.15.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/8711c2b2-f326-dd87-5e61-4d8c9585795b.png">

  - VST："~/Library/Audio/Plug-Ins/VST/XXX.vst"
  <img width="800" alt="スクリーンショット 2016-01-24 2.15.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/3dc958a3-5a29-351a-ef4f-d4f463a36c02.png">

  - VST3："~/Library/Audio/Plug-Ins/VST/XXX.vst3"
  <img width="800" alt="スクリーンショット 2016-01-24 2.15.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/24dc28c7-4f27-7996-a4e1-837339acd733.png">

---

## DAW（ホストアプリケーション）で確認
+ DAW起動
![スクリーンショット 2016-01-24 2.16.06.png](https://qiita-image-store.s3.amazonaws.com/0/93566/38375b69-62ba-fc7f-3fb0-66237249f4dd.png)

  - エフェクトプラグイン選択画面
<img width="300" alt="スクリーンショット 2016-01-24 2.16.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/f5f90723-a94f-abc3-6406-14ca855c607a.png">  

+ Audio Unit
<img width="380" alt="スクリーンショット 2016-01-24 2.16.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/24b78966-1d3f-59d8-a26a-8f4ef43501d7.png">

+ VST
<img width="380" alt="スクリーンショット 2016-01-24 2.16.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/93566/cf7ddc80-b1d6-1a2a-182d-9c318d61fb52.png">