|
|
- AmbDec Configuration Files
- ==========================
-
- AmbDec configuration files were developed by Fons Adriaensen as part of the
- AmbDec program <http://kokkinizita.linuxaudio.org/linuxaudio/index.html>.
-
- The file works by specifying a decoder matrix or matrices which transform
- ambisonic channels into speaker feeds. Single-band decoders specify a single
- matrix that transforms all frequencies, while dual-band decoders specifies two
- matrices where one transforms low frequency sounds and the other transforms
- high frequency sounds. See docs/ambisonics.txt for more general information
- about ambisonics.
-
- Starting with OpenAL Soft 1.18, version 3 of the file format is supported as a
- means of specifying custom surround sound speaker layouts. These configuration
- files are also used to enable the high-quality ambisonic decoder.
-
-
- File Format
- ===========
-
- As of this writing, there is no official documentation of the .ambdec file
- format. However, the format as OpenAL Soft sees it is as follows:
-
- The file is plain text. Comments start with a hash/pound character (#). There
- may be any amount of whitespace in between the option and parameter values.
- Strings are *not* enclosed in quotation marks.
-
- /description <desc:string>
- Specifies a text description of the configuration. Ignored by OpenAL Soft.
-
- /version <ver:int>
- Declares the format version used by the configuration file. OpenAL Soft
- currently only supports version 3.
-
- /dec/chan_mask <mask:hex>
- Specifies a hexadecimal mask value of ambisonic input channels used by this
- decoder. Counting up from the least significant bit, bit 0 maps to Ambisonic
- Channel Number (ACN) 0, bit 1 maps to ACN 1, etc. As an example, a value of 'b'
- enables bits 0, 1, and 3 (1011 in binary), which correspond to ACN 0, 1, and 3
- (first-order horizontal).
-
- /dec/freq_bands <count:int>
- Specifies the number of frequency bands used by the decoder. This must be 1 for
- single-band or 2 for dual-band.
-
- /dec/speakers <count:int>
- Specifies the number of output speakers to decode to.
-
- /dec/coeff_scale <type:string>
- Specifies the scaling used by the decoder coefficients. Currently recognized
- types are fuma, sn3d, and n3d, for Furse-Malham (FuMa), semi-normalized (SN3D),
- and fully normalized (N3D) scaling, respectively.
-
- /opt/input_scale <name:string>
- Specifies the scaling used by the ambisonic input data. As OpenAL Soft renders
- the data itself and knows the scaling, this is ignored.
-
- /opt/nfeff_comp <dir:string>
- Specifies whether near-field effect compensation is off (not applied at all),
- applied on input (faster, less accurate with varying speaker distances) or
- output (slower, more accurate with varying speaker distances). Ignored by
- OpenAL Soft.
-
- /opt/delay_comp <onoff:bool>
- Specifies whether delay compensation is applied for output. This is used to
- correct for time variations caused by different speaker distances. As OpenAL
- Soft has its own config option for this, this is ignored.
-
- /opt/level_comp <onoff:bool>
- Specifies whether gain compensation is applied for output. This is used to
- correct for volume variations caused by different speaker distances. As OpenAL
- Soft has its own config option for this, this is ignored.
-
- /opt/xover_freq <freq:float>
- Specifies the crossover frequency for dual-band decoders. Frequencies less than
- this are fed to the low-frequency matrix, and frequencies greater than this are
- fed to the high-frequency matrix. Unused for single-band decoders.
-
- /opt/xover_ratio <decibels:float>
- Specifies the volume ratio between the frequency bands. Values greater than 0
- decrease the low-frequency output by half the specified value and increase the
- high-frequency output by half the specified value, while values less than 0
- increase the low-frequency output and decrease the high-frequency output to
- similar effect. Unused for single-band decoders.
-
- /speakers/{
- Begins the output speaker definitions. A speaker is defined using the add_spkr
- command, and there must be a matching number of speaker definitions as the
- specified speaker count. The definitions are ended with a "/}".
-
- add_spkr <id:string> <dist:float> <azi:float> <elev:float> <connection:string>
- Defines an output speaker. The ID is a string identifier for the output speaker
- (see Speaker IDs below). The distance is in meters from the center-point of the
- physical speaker array. The azimuth is the horizontal angle of the speaker, in
- degrees, where 0 is directly front and positive values go left. The elevation
- is the vertical angle of the speaker, in degrees, where 0 is directly front and
- positive goes upward. The connection string is the JACK port name the speaker
- should connect to. Currently, OpenAL Soft uses the ID and distance, and ignores
- the rest.
-
- /lfmatrix/{
- Begins the low-frequency decoder matrix definition. The definition should
- include an order_gain command to specify the base gain for the ambisonic
- orders. Each matrix row is defined using the add_row command, and there must be
- a matching number of rows as the number of speakers. Additionally the row
- definitions are in the same order as the speaker definitions. The definitions
- are ended with a "/}". Only valid for dual-band decoders.
-
- /hfmatrix/{
- Begins the high-frequency decoder matrix definition. The definition should
- include an order_gain command to specify the base gain for the ambisonic
- orders. Each matrix row is defined using the add_row command, and there must be
- a matching number of rows as the number of speakers, Additionally the row
- definitions are in the same order as the speaker definitions. The definitions
- are ended with a "/}". Only valid for dual-band decoders.
-
- /matrix/{
- Begins the decoder matrix definition. The definition should include an
- order_gain command to specify the base gain for the ambisonic orders. Each
- matrix row is defined using the add_row command, and there must be a matching
- number of rows as the number of speakers. Additionally the row definitions are
- in the same order as the speaker definitions. The definitions are ended with a
- "/}". Only valid for single-band decoders.
-
- order_gain <gain:float> <gain:float> <gain:float> <gain:float>
- Specifies the base gain for the zeroth-, first-, second-, and third-order
- coefficients in the given matrix, automatically scaling the related
- coefficients. This should be specified at the beginning of the matrix
- definition.
-
- add_row <coefficient:float> ...
- Specifies a row of coefficients for the matrix. There should be one coefficient
- for each enabled bit in the channel mask, and corresponds to the matching ACN
- channel.
-
- /end
- Marks the end of the configuration file.
-
-
- Speaker IDs
- ===========
-
- The AmbDec program uses the speaker ID as a label to display in its config
- dialog, but does not otherwise use it for any particular purpose. However,
- since OpenAL Soft needs to match a speaker definition to an output channel, the
- speaker ID is used to identify what output channel it correspond to. Therefore,
- OpenAL Soft requires these channel labels to be recognized:
-
- LF = Front left
- RF = Front right
- LS = Side left
- RS = Side right
- LB = Back left
- RB = Back right
- CE = Front center
- CB = Back center
-
- Additionally, configuration files for surround51 will acknowledge back speakers
- for side channels, and surround51rear will acknowledge side speakers for back
- channels, to avoid issues with a configuration expecting 5.1 to use the side
- channels when the device is configured for back, or vice-versa.
-
- Furthermore, OpenAL Soft does not require a speaker definition for each output
- channel the configuration is used with. So for example a 5.1 configuration may
- omit a front center speaker definition, in which case the front center output
- channel will not contribute to the ambisonic decode (though OpenAL Soft will
- still use it in certain scenarios, such as the AL_EFFECT_DEDICATED_DIALOGUE
- effect).
-
-
- Creating Configuration Files
- ============================
-
- Configuration files can be created or modified by hand in a text editor. The
- AmbDec program also has a GUI for creating and editing them. However, these
- methods rely on you having the coefficients to fill in... they won't be
- generated for you.
-
- Another option is to use the Ambisonic Decoder Toolbox
- <https://bitbucket.org/ambidecodertoolbox/adt.git>. This is a collection of
- MATLAB and GNU Octave scripts that can generate AmbDec configuration files from
- an array of speaker definitions (labels and positions). If you're familiar with
- using MATLAB or GNU Octave, this may be a good option.
-
- There are plans for OpenAL Soft to include a utility to generate coefficients
- and make configuration files. However, calculating proper coefficients for
- anything other than regular or semi-regular speaker setups is somewhat of a
- black art, so may take some time.
|