SPAOP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Installation

Table of Contents

This page provides hints for building and installing SPAOP, the StreamMulticaster and the required libraries. Please note that those libraries have their own installation documentations and the information here is just a collection of hints on how to get it right.

A quick guide

Before going into the details, here is a brief overview of the steps needed to get running versions of SPAOP and the StreamMulticaster:

  1. Clone the SPAOP repository
  2. Fetch the submodules
  3. Obtain and build Liblo
  4. Build the Introjucer
  5. Obtain the Plugin SDKs you need
  6. Build SPAOP from its .jucer file
  7. Build the StreamMulticaster from one of its IDE projects

Submodules

The SPAOP repository contains two submodules: one for a fork of the JUCE library, one for the Github pages containing this documentation. To pull them in, go to the base directory of the SPAOP repository and do the following two steps:

# 1. initialize the submodules:
$ git submodule init
# 2. pull in the submodules' content:
$ git submodule update

Liblo

The Liblo library can be downloaded from http://Liblo.sourceforge.net/.

OSX

For OSX, the process to build and install is straightforward and well-documented. Just keep in mind that if you want to build for both 32 and 64 bit architectures, you'll need to build the universal binary version of Liblo.

The most convenient way is to use Homebrew: if you have Homebrew installed, just type in brew install Liblo --universal. The library and header include path settings of the OSX project files within the SPAOP repository all point to the paths where Homebrew will put them, so doing it the Homebrew way should be the easiest way by far.

Windows

For Windows, it is a bit more complicated:

Follow the building Liblo for other platforms instructions (and feel free to use the --without-threads option). At the moment (Liblo version 0.28), the premake4-script only supports Visual Studio versions up to 2010 - however, the automatic update options of Visual Studio 2013 will work fine on the 2010 project generated by it.

One more thing: at this moment, there is still something you need to fix in the Liblo-headers: in lo_osc_types.h, change line 25 (#ifdef _MSC_VER) to:

#if defined(_MSC_VER) && _MSC_VER < 1600

(If this still hasn't been fixed when you're reading this, you're invited to support my change request on the Liblo mailing list.)

JUCE

The JUCE library's official website is www.juce.com - there you will find documentation, a very active forum and download links. However, there are some reasons not to use the official version and rather chose the fork that is included as a submodule.

The JUCE fork

Reason for the fork

One of the main use cases for SPAOP is editing the automation data of source positions within the DAW host. There are a few features of both the VST3 and AU interface related to how a plugin's parameter is displayed within the host that are not supported correctly by JUCE - that is fixed in that fork (see here for a diff).

About the fork

The fork contains two main branches. The master branch is meant to be an exact copy of the official master and can get updated from there. The developMH branch contains any changes to the original JUCE and is the one to be used for building SPAOP if you want to take advantage from the fork.

Fetching the fork

The recommended way to get a local copy of the fork is to fetch it as submodule of the SPAOP repository. Go to the base directory of the SPAOP repository and enter git submodule init and git submodule update (see the Submodules chapter in Pro Git to learn more about that). After that is done, the full JUCE repository can be found within the JUCE directory of the SPAOP repository.

Using JUCE and the Introjucer

JUCE is well documented so do not expect any details here - just a few words: the JUCE way to mangage a project is to use the Introjucer. The Introjucer is an application that lets you create and manage projects for different IDEs and includes a WYSIWYG GUI editor.

It stores its projects in .jucer files. So for example, if you want to open the SPAOP project, you would open the SPAOP.jucer file in the Introjucer and launch your IDE from there.

To use the Introjucer, you will need to build it yourself. You can find ready-made projects for various IDEs under ./JUCE/extras/Introjucer/Builds/.

Plugin SDKs

You will need to get the official software development kits for the plugin platforms you want to build for.

VST and VST3

The VST3 SDK (which includes everything needed to build VST2 as well) can be downloaded from http://www.steinberg.de/en/company/developer.html. If you want to avoid readjusting some path settings within the SPAOP.jucer file, place it in the same directory where you cloned the SPAOP repository.

Audio Units

Audio Units plugin are OSX-only. Older versions of Apple's Xcode IDE include the AU SDK. For newer versions of Xcode, you will have to download it from Apple. Currently, it is not fully compatible with the latest Xcode without fixing a few things manually. All steps to get this going are documented here (if that link ever becomes unavailable try this thread in the JUCE forum).

RTAS

The RTAS-version of SPAOP has never been tested yet. If you want to give it a try, this application form should lead you to the RTAS SDK.

Building SPAOP

Once you have all that installed, you can open the file ./SPAOP/SPAOP.jucer with the Introjucer. From there you can launch the project in the IDE of your choice and build it. If you have placed the VST SDK or Liblo in locations diffferent from those recommended above, you might need to readjust these within the project's settings in the introjucer.

Have a look at the preprocessor defines page for options you can set at compile-time (most importantly, the IP and port of cWONDER are set via the defines CWONDER_DEFAULT_IP_STR and CWONDER_DEFAULT_PORT_STR).

Building the StreamMulticaster

For building the StreamMulticaster, Xcode and VS 2013 projects can be found within ./StreamMulticaster. Once again, you might need to readjust the location of the Liblo files. For the connection settings, the defines from WonderHeader.h are applied (so change them as needed).