SOUL programming languageのβ版が公開されたのでサンプルを触ってみる(Windows編)

Pocket
reddit にシェア

昨年開催されたADC 2018のKeynoteにて公開されたオーディオプロセッシングに特化したDSL言語『SOUL programming language』ですが、2019/11/12付でβ版が公開された様です。

https://github.com/soul-lang/SOUL

リポジトリ自体は2018年時点から作成されており、徐々に言語仕様が明らかにされていき、Webブラウザで動くPlaygroundも公開されてはいたのですが、今回のβ版公開を機に、SOUL開発環境(コンパイラ等)のソースコードとデスクトップOS用のSOUL開発環境のバイナリが提供されるようになりました。

併せて、SOUL言語で記述された実装コード(拡張子: soul)とパッチを定義するコードを(拡張子: soulpatch)実際にロードしてアプリケーションに組み込む方法についてのサンプルプロジェクト(要JUCE)も提供されるようになりました。

本記事では、そのサンプルプロジェクトをWindows上で実際にビルドして動作確認するまでの手順について紹介します。

 

必要なもの

・Windows 64bit
 ※提供されているSOUL_PatchLoader.dllがx64版のため
・Visual Studio 2019
 ※サンプルプロジェクトのExportersが2019想定のため
 ※Visual Studio 2017でもビルドが通ることは確認しています。
・JUCE
 ※対応バージョンは確認していないので、取り合えず最新版で

 

リポジトリをクローンする

Githubにあるリポジトリからクローンします。

$ git clone https://github.com/soul-lang/SOUL

リポジトリにはサブモジュールを含んでいるので、サブモジュールを更新して取得します。

$ cd SOUL
$ git submodule update --init --recursive

 

サンプルプロジェクトを開く

“SOULPatchHostDemo.jucer”をProjucerで開きます。

■プロジェクトファイルの場所

SOUL
└ examples
  └ SOULPatchHostDemo
        └ SOULPatchHostDemo.jucer

 

IDE用のプロジェクトファイルを生成する

Projucer上でプロジェクトを保存する処理(Ctrl+P)を行うことで、Buildsフォルダが生成され、そのフォルダ内に各IDE用のプロジェクトファイルが生成されます。

 

Visual Studioでビルドする

Visual Studio用のソリューションファイル(拡張子: sln)を開いてビルドを実行します。
ビルドしたものを実行すると、次のようなウインドウとともにメッセージが表示されると思います。
このメッセージは、アプリケーションからSOUL_PatchLoader.dllを参照できなかった時に表示される警告です。

 

DLLファイルをコピー・ペーストする

リポジトリに同梱された”SOUL_PatchLoader.dll”を、”SOULPatchHostDemo.exe”が参照できる場所にコピー・ペーストします。
ここでは、”SOULPatchHostDemo.exe”と同じフォルダ内に”SOUL_PatchLoader.dll”をペーストするという方法で解決します。

■”SOUL_PatchLoader.dll”の場所

SOUL
└ binaries
  └ soul_patch_library
      └ windows
          └ x64
             └ SOUL_PatchLoader.dll

DLLファイルの参照が解決すると、次のようなウインドウとともにメッセージが表示されると思います。

 

パッチ定義ファイルをドラッグ&ドロップ

SOUL言語のパッチ定義ファイル(拡張子: soulpatch)を”SOULPatchHostDemo”のウインドウにドラッグ&ドロップします。
パッチが正常にロードされれば、パッチに記述されたコードに従ってオーディオ・レンダリングが開始されます。

■パッチ定義ファイルの場所(一例)

SOUL
└ examples
  └ patch
     └ ClassicRingtone
         └ ClassicRingtone.soulpatch

※ClassicRingtoneの他にもサンプルパッチが同梱されています。
                  

トラブルシューティング:パッチがプレビューされない場合

“SOULPatchHostDemo”の実装の影響で、ある特定のオーディオデバイス環境において、パッチがロードできないという現象が発生します。(筆者環境でも遭遇しました)
実際には、SOULパッチ定義ファイル自体は読めているものの、アプリケーション起動時にセットされるデフォルトのオーディオデバイス設定がオーディオドライバ的に好ましくない組み合わせだった場合、オーディオデバイスが無効化されてしまうという現象が発生する影響で、オーディオプロセッサーにSOULパッチがセットされないということによるものです。
この現象については、デフォルトのオーディオデバイス設定を使用するのではなく、ユーザーが任意でオーディオデバイス設定を行えるようにすることで対策することができます。

次のコードスニペットを”PatchLoaderComponent.h”ソースファイルに追加することで、exeの起動時にユーザーが任意でオーディオデバイス設定を行う処理を挟むことができます。
オーディオデバイス設定が正常に行われていれば(デバイス設定ウインドウからテストトーンを流すことができます)、SOULパッチが正常にセットされ、オーディオ・レンダリングのモニタリングが行えるようになるはずです。

“PatchLoaderComponent.h”に追加するコード

// オーディオデバイス設定ウインドウを開く
void showDeviceSetting()
{
juce::AudioDeviceSelectorComponent selector(deviceManager,
0, 256,
0, 256,
true, true,
true, false);
selector.setSize(400, 600);

juce::DialogWindow::LaunchOptions dialog;
dialog.content.setNonOwned(&selector);
dialog.dialogTitle = "Audio/MIDI Device Settings";
dialog.componentToCentreAround = this;
dialog.dialogBackgroundColour = getLookAndFeel().findColour(juce::ResizableWindow::backgroundColourId);
dialog.escapeKeyTriggersCloseButton = true;
dialog.useNativeTitleBar = false;
dialog.resizable = false;
dialog.useBottomRightCornerResizer = false;
dialog.runModal();
}


void initialise()
{
  static constexpr int numInputChannels = 2;
  static constexpr int numOutputChannels = 2;

deviceManager.initialiseWithDefaultDevices (numInputChannels, numOutputChannels);

// オーディオデバイス設定ウインドウを開く
  showDeviceSetting();
  ...
}