SuperCollider CLASSES (extension)


Vector Base Amplitude Panning Speaker Array
Inherits from: Object


VBAPSpeakerArray represents an array of speakers configured for use with VBAP. It provides functions for calculating optimised pairs and triplets based on speaker location.

VBAP was created by Ville Pulkki. For more information on VBAP see

This version of VBAP for SC was ported from the ver. 0.99 PD code by Scott Wilson, as part of the BEASTMulch project. Development was partially funded by the Arts and Humanities Research Council:

Class Methods

*new (dim, directions)

Create a new VBAPSpeakerArray.



Number of dimensions in the array, either 2 (ring or partial ring), or 3 (partial or full dome or sphere).


An Array containing speaker locations in degrees. If dim is 2 this will be an array of azimuth angles, if dim is 3 this will be an array of arrays of [azimuth, elevation] angle pairs.

Angles are given in degrees, with azimuth +/- 180 degrees from the median plane (i.e. straight ahead), and elevation +/- 90 degrees from the azimuth plane.

The order of the speakers corresponds to the order of the outputs when using a VBAP UGen.


2D and 3D examples, [ -30, 30, 0, -110, 110 ]); // 5.1 array, [[-22.5, 14.97], [22.5, 14.97], [-67.5, 14.97], [67.5, 14.97], [-112.5, 14.97], [112.5, 14.97], [-157.5, 14.97], [157.5, 14.97], [-45, 0], [45, 0], [-90, 0], [90, 0], [-135, 0], [135, 0], [0, 0], [180, 0]]); // zig zag partial dome


*maxNumSpeakers = value

Set/get the maximum number of speakers in an array. Default is 55. (This limitation will be removed in a later version.)

Inherited class methods

Instance Methods


Returns an Integer corresponding to the receiver's number of dimensions.


Returns an Integer indicating the number of speakers in this array.


Returns an Array containing instances of VBAPSpeaker.


Sort the speaker array into loudspeaker pairs or triplets and return this data in a form appropriate for loading into a buffer. Once loaded this data can be used by a VBAP UGen.


a =, [0, 45, 90, 135, 180, -135, -90, -45]); // 8 channel ring
b = Buffer.loadCollection(s, a.getSetsAndMatrices);

-loadToBuffer (server)

A shortcut for calling getSetsAndMatrices and loading into a Buffer. Returns a Buffer object.


a =, [0, 45, 90, 135, 180, -135, -90, -45]); // 8 channel ring
b = a.loadToBuffer;

Inherited instance methods

Undocumented instance methods


-any_ls_inside_triplet (a, b, c)

-calc_2D_inv_tmatrix (azi1, azi2, inv_mat)




-initFromDirections (directions)

-lines_intersect (i, j, k, l)


-unq_cross_prod (v1, v2)

-vec_angle (v1, v2)

-vec_length (v1)

-vec_prod (v1, v2)

-vol_p_side_lgth (i, j, k)


See VBAP for further examples.