Raspberry Pi でJUCEをビルドする

Raspberry Pi (Raspbian)でJUCEのプロジェクトをビルドしたので、レシピを紹介します。

同梱のVSTプラグイン/ ホストのサンプルプロジェクトをビルドしました。
PCと遜色なく快適に動きますし、MIDI入出力、音声入出力が可能なので、省電力なVSTシンセサイザ/エフェクトとして使用することができます。

レシピ

ROLI社のFabianがJUCE Forumにレシピをポストしてくれました。
ターミナルから以下のコマンドを実行するとビルドします。
※cdコマンドのディレクトリは各自の環境に合わせて入力してください。

$ sudo apt-get install clang freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev webkit2gtk-4.0
$ cd JUCE/extras/Projucer/Builds/LinuxMakefile
$ make CXX=clang++ -j4

1.準備

先ずはJUCEをダウンロードしましょう。公式ダウンロードサイト、Windows/macOS/Linuxから選択することができますが、Linux向けを選択すれば良いです。
※Linux用のProjucerが同梱されていますがx86をターゲットにしているため、CPUアーキテクチャが異なるRaspberry Pi (ARM)上では動作しません。Raspberry Pi用のProjucerは上記レシピでビルドすることができます。

2. $ apt-get install clang freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev webkit2gtk-4.0

JUCEライブラリのビルドに必要な依存パッケージをインストールします。ついでにLLVM-Clangコンパイラをインストールしています。なお、GCCでもコンパイルできることを確認しています。
※GCCでビルドしようとすると、こちらのバグに当たってしまうことを確認しています。GCCでビルドする際は”make”コマンドのオプションに “TARGET_ARCH=-march=armv7-a” を追加すると正常にビルドが実行されます。

 3.$ cd JUCE/extras/Projucer/Builds/LinuxMakefile

LinuxMakefileが置かれたディレクトリに移動します。
※ディレクトリは各自の環境に合わせて入力してください。
※サンプルプロジェクトの一部に”LinuxMakefile”用プロジェクトが同梱されています。

4. $ make CXX=clang++ -j4

LinuxMakefileからビルドを実行します。ビルドモードは”Debug”がデフォルトです。各種オプションについては以下の通りです
CXX=clang++
⇒ LinuxMakefileオプションです。C++コンパイラにclang++を使用します
・ -j4
⇒ makeコマンドのオプションです。同時に実行できるジョブの数(並行処理の数)を指定します。必須ではありませんが、Raspberry Piのコア数を有効利用できます。

5.補足:Releaseビルド時のコマンド
$ make CXX=clang++ -j4 CONFIG=Release

・CONFIG=Release⇒ LinuxMakefileオプションです。
“Release”モードでビルドします。

筆者にて動作確認した機種

・Raspberry Pi 2 Model B
・Raspberry Pi 3 Model B

JUCE 5 がリリースされました

2017年4月27日、ROLI Ltd.,よりJUCE ver.5 (Huckleberry JUCE)がリリースされました。[引用] 公式サイト

リリースから2週間程経ったこともあり、JUCE ver.4 (Grapefruit JUCE)から大きく変わった点について、一部紹介したいと思います。

  1. ライセンス形態の大幅改定
  2. VST/AUプラグインのスタンドアロンアプリ出力
  3. Bluetooth LEのサポート
  4. [Projucer] JUCE 4 からの変更点
  5. [Projucer] ライブコーディングエンジンについて
  6. スプラッシュスクリーンについて

1. ライセンス形態の大幅改定

JUCE 5ではライセンス形態が大幅に改定されました。詳しくは公式の案内とエンドユーザーライセンスを見ていただければと思います(公式サイト)。そのなかでも、今回新設されたPersonalライセンスについてざっくりと紹介します。

  • JUCE Personal
    • 利用条件
      • 起動時のスプラッシュスクリーン表示が必須
      • 年間の収入または資本金額が$50k未満であること
    • 特徴
      • 無償でクローズドソースソフトウェアに使用できるようになった
      • ライブコーディングエンジンが無償版にも解放された

Personalライセンスは、クローズドソースソフトウェアを配布したい開発者の要望に応えるように設定されたようです。以前から無償利用できるFreeライセンスは存在していましたが、GPLライセンスが適用されるという条件に同意する必要があったため、オープンソースにしたくない場合は有償ライセンスを購入する必要がありました。
ただし、利用条件として、①起動時のスプラッシュスクリーンを表示すること。②年間の収入または資本金額が$50k未満であること。という条件を満たす必要があります。とは言え、極小規模な個人開発者にとっては利用しやすくなったと思います。
なお、利用条件を満たせない場合はどうなるかというと、JUCE 5 End User License Agreement の 1.8.に記載されている通り、有償ライセンスを購入する若しくはGPLライセンスが適用される点には注意しておいた方がいいでしょう。

1,8. Remember, unless you upgrade to JUCE Indie or JUCE Pro, if you exceed the Revenue Limit for JUCE Personal, then your JUCE Personal licence is governed by the GNU License which is an open-source licence and requires, among other things, that you make your source code available and license modified files and larger derived works (including all linked code) under the same terms of the GNU License. Please review the terms of the GNU License carefully.

ライセンスタイプ JUCE Personal JUCE Indie JUCE Pro Education
スプラッシュ
スクリーン
 “made with JUCE”
表示必須
変更可
非表示可
変更可
非表示可
“made with JUCE”
表示必須
年間の収入または資本金額の限度  $50k  $200k  No limit  No limit
 最低契約期間   12ヵ月  12ヵ月  
サブスクリプションライセンス料金 無料 $35/月 $65/月 無料
永続ライセンス料金   $700 $1,300  

 


2.  VST/AUプラグインのスタンドアロンアプリ出力

VST, VST3, AudioUnit, Audio Unit v3, AAX のフォーマットで作成したオーディオプラグインを、スタンドアロンアプリケーションとして出力できるフォーマットが追加されました。
Projucerのプロジェクト設定画面に『Build Standalone Plug-In』という項目が追加されていますので、そちらをチェックして保存をすると、IDE用のプロジェクトファイルにスタンドアロンアプリ用のものが生成されます。簡単ですね。

試しに、JUCE JAPAN vol.2 で制作したパラメトリックイコライザをスタンドアロンアプリ形式でビルドしてみました。
左上の『Options』メニューをクリックすることでオーディオインターフェース、MIDIインターフェースを設定するウインドウが開きます。

私も以前、VSTプラグインをスタンドアロンアプリ化させるために簡易VSTホストのオブジェクトにVSTプラグインをロードするというラッパー的な手法で実装したことはありました。
ですがこれからは、出力フォーマットオプションにチェックを入れるだけでできてしまうんですね。感動です。

 


3. Bluetooth LEのサポート

JUCE 5では、Bluetooth を介したMIDIデバイスとの接続を管理する”BluetoothMidiDevicePairingDialogue”クラスが追加されました。
(公式クラスリファレンス)
公式リファレンスによると、このクラスはBluetooth MIDIペアリングダイアログを開き、近くにあるBluetooth MIDIデバイスを表示して接続することができるようです。このダイアログでは、MIDI以外のBluetoothデバイスは無視されるとのこと。
Bluetooth MIDIデバイスがペアになった後でのみ、JUCEのMidiInputおよびMidiOutputクラスからMIDIポートを使用できます。なお、現在はモバイルプラットフォーム(iOS/Android)でのみ使用できます。

実際にテストできるサンプルが “JUCE/examples/MidiTest” に収録されています。
アプリケーションをビルドして起動すると以下の画面が表示されます。

 

画面中央にある”MIDI Bluetooth devices…”をクリック/タップすると、デバイスとの接続ダイアログが開きます。

 

 

 

 

 

 

 

 

 

 

Bluetooth LE MIDIデバイスとの接続を試みることができます。残念ながら、私の環境ではうまくいきませんでしたが…。

 

 

 

 

 

 

 

 

 

余談ですが、ROLI Ltd., が開発・販売しているモジュラー・ミュージック・スタジオ 『BLOCKS』があります。BLOCKSは、BluetoothによってiPhone/iPadと接続して音源アプリ『NOISE』を利用してサウンドシステムを構成します。
NOISEはJUCEフレームワークで実装されていることから、Bluetooth LEをサポートするようになった経緯もある程度想像できるでしょう。
※”JUCE/examples/BLOCKS” にBLOCKSと連携するためのアプリケーションを開発するためのサンプルコードが収録されていますので、BLOCKSがお手元にある方はぜひ試してみてください。

 


4. [Projucer] JUCE 4 からの変更点

JUCE 5 のリリースに合わせて、ProjucerのGUIが大幅に変更されています。個人的にJUCE 4 から目立つ変化点としては以下の通りです。

  • フラットデザイン化、カラースキンが3種類(Dark/Grey/Light)
  • 【Files】【Modules】【Exporters】ツリーを一括表示
  • 【Config】タブのアイコン化
  • 【Exporter】メニューの一部アイコン化

また、JUCE 5 では新たにVisual Studio 2017のソリューションファイルの出力をサポートしています。代わりに、これまで対応していたVisual Studio 2005~2012のサポートは終了し、出力プラットフォームのリストからは削除されています。

 


5. [Projucer] ライブコーディングエンジンについて

JUCE 4 では商用ライセンスを購入することで使用可能だったライブコーディングエンジンが、JUCE 5 では無償のPersonal版でも使用することができるようになりました。

ライブコーディング機能を有効にすると、Projucerでプロジェクト設定やソースコードに変更を加えた際に即時にビルドが実行されます。ただし、Windows環境ではインクルードでエラーを吐いたり、IDE側で設定が反映されるものについては予め設定しておくなど、多少使い勝手に癖があるので、個人的にまだまだ検証してから実際の開発に利用していきたいですね。


6. スプラッシュスクリーンについて

Personal版では無償利用できる条件として、アプリケーションの起動時、具体的にはGUIを表示すると同時に数秒間 “made with JUCE” と書かれたスプラッシュスクリーンを表示する必要があります。画面右下の表示がそれです。

このスプラッシュスクリーンは約5秒ほど表示した後フェードアウトするように画面から消えていきます。

なお、スプラッシュスクリーンにはJUCE公式サイトへのハイパーリンクが設定されています。
クリックするとブラウザが起動し、JUCE公式サイトが表示されます。

 

スプラッシュスクリーンに関する設定は、Projucerのプロジェクト設定にて行うことができます。Personalライセンスで使用している場合は、表示・非表示の設定を行うことはできません。他にはスプラッシュスクリーンの色を2種類から選択することができます。

glslEditor for VST サンプルコード

MIDI CC入力のサンプルコード

MIDI CC入力を受信していることを確認する実装例です。

varying vec4 destinationColour;
varying vec2 textureCoordOut;

#extension GL_OES_standard_derivatives : enable

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;
uniform float midiCC[128];
uniform float wave[256];
uniform float spectrum[256];

#define pi 3.1415

void main()
{
    vec2 position = (gl_FragCoord.xy / resolution.xy);
 
    float power = midiCC[position.x * 128];

    float r = position.y * 1.0;
    float g = 1-position.y * 1.0;
    float b = 0.;

    if(position.y < power * 0.01)
    {
        gl_FragColor = vec4(r, g, b, 1.0);
    }
    else
    { 
        gl_FragColor = vec4(0, 0, 0, 0.0);
    }
}

A GLSL editor running on VST / AU plug-in has been released

※2017/03/06 Update: Add the distribution of Windows installer version.

 

Download (free)

VST for Windows (64bit&32bit):
・Installer(64bit)

インストーラー版 for Windows(64bit)

・Installer(32bit)

インストーラー版 for Windows(32bit)

・ZIP(64bit&32bit)

ZIP版 for Windows(64bit&32bit)

 

VST/AU for macOS (64bit&32bit):

for macOS (64bit&32bit)

 

What is this?

It is an editor that describes a shader language called GLSL (OpenGL Shading Language) and a VST / AU plugin that displays a window to execute OpenGL drawing. Using the plug-in form, we have implemented the following distinctive functions.

  • Supports audio input from DAW (VST host)
  • Supports MIDI CC input from DAW (VST host)
  • Full screen display with multi display is also possible

By using these functions, you can control the shader in conjunction with DAW’s voice and MIDI automation. It may be used for VJ applications.
The shader that can be edited with this plug-in is “fragment shader” only.

What is GLSL?

For details, refer to the Wikipedia article.
I think that it would be nice if you could catch the article of “WebGL Honkyama” for more detailed information and fun illustrations.

Usage / compatibility with GLSL Sandbox

The GLSL editor of this plugin is designed to be compatible with GLSL Sandbox. By typing the same code as the GLSL Sandbox gallery into the editor you can draw in the same way.
Attention: Please properly operate / use shader code based on the existence of copyright. Especially, do not steal others’s code, or misrepresent others’ code as yourself.

Usage / uniform variables

Some uniform variables are specific to the GLSL Sandbox and others are provided by this plugin.

▼ GLSL Sandbox Specific

uniform float time:
 Get current time. Real-time animation can be realized by using this.
 * Ver 1.0 gives the frame counter every 0.2.

uniform vec2 mouse:
 While mouse dragging in the rendering window, you can get mouse coordinates. Both the X and Y directions range from 0 to 1.

uniform vec2 resolution:
 You can get the resolution of the current rendering window.

uniform vec2 surfacePosition:
 You can get the coordinates of the current surface (like billboard).

▼ This plug-in original implements

uniform float midiCC[128]:
 You can obtain MIDI CC events from the DAW (VST host). Get MIDI CC events as an array. "MidiCC [0]" means the value of "CC 0".
 The range of values ​​stored in each array is roughly 0 to 127, depending on the DAW.
 * For MIDI CC specifications, refer to the article of Wikipedia.

uniform float wave[256]:
 You can acquire voice waveform from DAW's mixer. Acquires 256 speech waveforms as an array. "Wave [0]" means the value of the "first sample" of the waveform.
 The range of values ​​stored in each array is roughly 0 to 1, depending on the DAW.

uniform float spectrum[256]:
 It is possible to obtain the value obtained by converting the speech waveform on the mixer of the DAW into the frequency spectrum. Acquire the frequency spectrum of 256 resolution as an array. "Spectrum [0]" means the value of the "lowest frequency" counted from the lower frequency in the frequency spectrum.
 The range of values ​​stored in each array is roughly 0 to 1, depending on the DAW.

License / source code

This software is distributed under “GPL v3” license.
The source code repository (GitHub) can be accessed from the following link.
GitHub

 

VST/AUプラグインで動くGLSLエディタを公開しました

※2017/03/06更新:Windows用インストーラー版の配布を追加しました。

 

ダウンロード(無料)

Windows版VST (64bit&32bit):
・インストーラー版(64bit)

インストーラー版 for Windows(64bit)

・インストーラー版(32bit)

インストーラー版 for Windows(32bit)

・ZIP版(64bit&32bit)

ZIP版 for Windows(64bit&32bit)

 

macOS版VST/AU (64bit&32bit):

macOS版VST/AU (64bit&32bit)

 

これは何?

GLSL (OpenGL Shading Language)というシェーダ専用言語を記述するエディタと、OpenGLの描画を実行するウインドウを表示するVST/AUプラグインです。プラグイン形式ということを活かし、以下の特徴的な機能を実装しています。

  • DAW(VSTホスト)からの音声入力に対応
  • MIDI CCの入力に対応
  • マルチディスプレイでフルスクリーン表示も可能

これらの機能を利用することで、DAWの音声やMIDIオートメーションと連動してシェーダをコントロールすることができます。VJ用途に使えるかも。
本プラグインで編集できるシェーダは「フラグメントシェーダ」のみになります。

GLSLって?

詳しくはWikipediaの記事を参照ください。
もっと詳しい情報や楽しい実例は『WebGL 総本山』さんの記事を漁っていただけるとよろしいかと思います。

使い方 / GLSL Sandboxとの互換性

このプラグインのGLSLエディタは、GLSL Sandboxと互換性があるように設計しています。GLSL Sandboxのギャラリーと同じコードをエディタに打ち込むことで、同じように描画することができます。
注意:シェーダのコードにも著作権が存在することを踏まえた適切な運用・利用をお願いします。特に、他人のコードを盗用したり、他人のコードを自分のものと偽って公開するなどはやめておきましょう。

使い方 / uniform変数

uniform変数などはGLSL Sandbox固有のものと、本プラグイン独自に用意したものがあります。

▼GLSL Sandbox固有

uniform float time:
 現在時刻を取得します。これを利用することでリアルタイムアニメーションを実現できます。
 ※ver 1.0では0.2毎のフレームカウンタを渡しています。

uniform vec2 mouse:
 レンダリングウインドウ内でマウスドラッグをする間、マウス座標を取得できます。X,Y方向ともに範囲は0~1です。

uniform vec2 resolution:
 現在のレンダリングウインドウの解像度を取得できます。

uniform vec2 surfacePosition:
 現在のサーフェス(板ポリ)の座標を取得できます。

▼本プラグイン独自実装

uniform float midiCC[128]:
 DAW(VSTホスト)からMIDI CCイベントを取得することができます。MIDI CCイベントを配列で取得します。"midiCC[0]"は"CC 0"の値を意味します。
 各配列に格納される値の範囲は、DAWにもよりますが概ね0~127です。
 ※MIDI CCの仕様については、Wikipediaの記事を参考に。

uniform float wave[256]:
 DAWのミキサーから音声波形を取得することができます。256点分の音声波形を配列で取得します。"wave[0]"は波形の"最初のサンプル"の値を意味します。
 各配列に格納される値の範囲は、DAWにもよりますが概ね0~1です。

uniform float spectrum[256]:
 DAWのミキサー上の音声波形を周波数スペクトルに変換した値を取得することができます。256分解能の周波数スペクトルを配列で取得します。"spectrum[0]"は周波数スペクトルのうち、低い方から数えて"最も低い周波数"の値を意味します。
 各配列に格納される値の範囲は、DAWにもよりますが概ね0~1です。

ライセンス/ソースコード

本ソフトウェアは『GPL v3』ライセンスの下で配布しています。
ソースコードリポジトリ(GitHub)へは以下リンクからアクセスすることができます。
GitHub

 

Word Pressを使い始めました

気軽に日々の活動を書き留めて置けるよう、Word Pressに移行する準備を始めました。

Makerムーブメントに触発されてMIDIコントローラーを自作したのが既に3年以上前になってました。

直近ではVST(Virtual Studio Technology)プラグインのプログラミングを中心にポチポチやっているので、その活動記録や共有出来たらなぁと思います。

まずは現時点でのノウハウを纏めようと思うので、今週末からの連休でババッと書こう。