BASS.NET API for the Un4seen BASS Audio LibraryBASSAttribute EnumerationBASS.NET API for the Un4seen BASS Audio Library

Namespace: Un4seen.Bass
Assembly: Bass.Net (in Bass.Net.dll) Version: 2.4.12.0
Syntax

public enum BASSAttribute
Members

  Member nameValueDescription
BASS_ATTRIB_FREQ1 The sample rate of a channel.

freq: The sample rate... 0 = original rate (when the channel was created).

This attribute applies to playback of the channel, and does not affect the channel's sample data, so has no real effect on decoding channels. It is still adjustable though, so that it can be used by the BassMix add-on, and anything else that wants to use it.

It is not possible to change the sample rate of a channel if the "with FX flag" DX8 effect implementation enabled on it, unless DirectX 9 or above is installed.

Increasing the sample rate of a stream or MOD music increases its CPU usage, and reduces the length of its playback buffer in terms of time. If you intend to raise the sample rate above the original rate, then you may also need to increase the buffer length via the BASS_CONFIG_BUFFER config option to avoid break-ups in the sound.

Platform-specific

On Windows, the sample rate will get rounded down to a whole number during playback.

BASS_ATTRIB_VOL2 The volume level of a channel.

volume: The volume level... 0 (silent) to 1 (full). This can go above 1.0 on decoding channels.

This attribute applies to playback of the channel, and does not affect the channel's sample data, so has no real effect on decoding channels. It is still adjustable though, so that it can be used by the BassMix add-on, and anything else that wants to use it.

When using BASS_ChannelSlideAttribute(Int32, BASSAttribute, Single, Int32) to slide this attribute, a negative volume value can be used to fade-out and then stop the channel.

BASS_ATTRIB_PAN3 The panning/balance position of a channel.

pan: The pan position... -1 (full left) to +1 (full right), 0 = centre.

This attribute applies to playback of the channel, and does not affect the channel's sample data, so has no real effect on decoding channels. It is still adjustable though, so that it can be used by the BassMix add-on, and anything else that wants to use it.

It is not possible to set the pan position of a 3D channel. It is also not possible to set the pan position when using speaker assignment, but if needed, it can be done via a DSP function instead (not on mono channels).

Platform-specific

On Windows, this attribute has no effect when speaker assignment is used, except on Windows Vista and newer with the BASS_CONFIG_VISTA_SPEAKERS config option enabled. Balance control could be implemented via a DSP function instead

BASS_ATTRIB_EAXMIX4 The wet (reverb) / dry (no reverb) mix ratio on a sample, stream, or MOD music channel with 3D functionality.

mix: The wet / dry ratio... 0 (full dry) to 1 (full wet), -1 = automatically calculate the mix based on the distance (the default).

Obviously, EAX functions have no effect if the output device does not support EAX. BASS_GetInfo(BASS_INFO) can be used to check that. EAX only affects 3D channels, but EAX functions do not require BASS_Apply3D to apply the changes.

Additional ERROR CODEDescription
BASS_ERROR_NOEAXThe channel does not have EAX support. EAX only applies to 3D channels that are mixed by the hardware/drivers. BASS_ChannelGetInfo(Int32, BASS_CHANNELINFO) can be used to check if a channel is being mixed by the hardware.

EAX is only supported on Windows.

BASS_ATTRIB_NOBUFFER5 Non-Windows: Disable playback buffering?

nobuffer: Disable playback buffering... 0 = no, else yes..

A playing channel is normally asked to render data to its playback buffer in advance, via automatic buffer updates or the BASS_Update(Int32) and BASS_ChannelUpdate(Int32, Int32) functions, ready for mixing with other channels to produce the final mix that is given to the output device. When this attribute is switched on (the default is off), that buffering is skipped and the channel will only be asked to produce data as it is needed during the generation of the final mix. This allows the lowest latency to be achieved, but also imposes tighter timing requirements on the channel to produce its data and apply any DSP/FX (and run mixtime syncs) that are set on it; if too long is taken, there will be a break in the output, affecting all channels that are playing on the same device.

The channel's data is still placed in its playback buffer when this attribute is on, which allows BASS_ChannelGetData(Int32, IntPtr, Int32) and BASS_ChannelGetLevel(Int32) to be used, although there is likely to be less data available to them due to the buffer being less full.

This attribute can be changed mid-playback. If switched on, any already buffered data will still be played, so that there is no break in sound.

This attribute is not available on Windows, as BASS does not generate the final mix.

BASS_ATTRIB_CPU7 The CPU usage of a channel.

cpu: The CPU usage (in percentage).

This attribute gives the percentage of CPU that the channel is using, including the time taken by decoding and DSP processing, and any FX that are not using the "with FX flag" DX8 effect implementation. It does not include the time taken to add the channel's data to the final output mix during playback. The processing of some add-on stream formats may also not be entirely included, if they use additional decoding threads; see the add-on documentation for details.

Like BASS_GetCPU, this function does not strictly tell the CPU usage, but rather how timely the processing is. For example, if it takes 10ms to generate 100ms of data, that would be 10%. If the reported usage exceeds 100%, that means the channel's data is taking longer to generate than to play. The duration of the data is based on the channel's current sample rate (BASS_ATTRIB_FREQ).

A channel's CPU usage is updated whenever it generates data. That could be during a playback buffer update cycle, or a BASS_Update(Int32) call, or a BASS_ChannelUpdate(Int32, Int32) call. For a decoding channel, it would be in a BASS_ChannelGetData(Int32, IntPtr, Int32) or BASS_ChannelGetLevel(Int32) call.

This attribute is read-only, so cannot be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

BASS_ATTRIB_SRC8 The sample rate conversion quality of a channel.

quality: The sample rate conversion quality... 0 = linear interpolation, 1 = 8 point sinc interpolation, 2 = 16 point sinc interpolation, 3 = 32 point sinc interpolation. Other values are also accepted but will be interpreted as 0 or 3, depending on whether they are lower or higher.

When a channel has a different sample rate to what the output device is using, the channel's sample data will need to be converted to match the output device's rate during playback. This attribute determines how that is done. The linear interpolation option uses less CPU, but the sinc interpolation gives better sound quality (less aliasing), with the quality and CPU usage increasing with the number of points. A good compromise for lower spec systems could be to use sinc interpolation for music playback and linear interpolation for sound effects.

Whenever possible, a channel's sample rate should match the output device's rate to avoid the need for any sample rate conversion. The device's sample rate could be used in BASS_StreamCreate(Int32, Int32, BASSFlag, STREAMPROC, IntPtr) or BASS_MusicLoad(String, Int64, Int32, BASSFlag, Int32) or Un4seen.Bass.AddOn.Midi stream creation calls, for example.

The sample rate conversion occurs (when required) during playback, after the sample data has left the channel's playback buffer, so it does not affect the data delivered by BASS_ChannelGetData(Int32, IntPtr, Int32). Although this attribute has no direct effect on decoding channels, it is still available so that it can be used by the Un4seen.Bass.AddOn.Mix add-on and anything else that wants to use it.

This attribute can be set at any time, and changes take immediate effect. A channel's initial setting is determined by the BASS_CONFIG_SRC config option, or BASS_CONFIG_SRC_SAMPLE in the case of a sample channel.

Platform-specific

On Windows, sample rate conversion is handled by Windows or the output device/driver rather than BASS, so this setting has no effect on playback there.

BASS_ATTRIB_NET_RESUME9 The download buffer level required to resume stalled playback.

resume: The resumption level in percent... 0 - 100 (the default is 50%).

This attribute determines what percentage of the download buffer (BASS_CONFIG_NET_BUFFER) needs to be filled before playback of a stalled internet stream will resume. It also applies to 'buffered' user file streams created with BASS_StreamCreateFileUser(BASSStreamSystem, BASSFlag, BASS_FILEPROCS, IntPtr).

BASS_ATTRIB_SCANINFO10 The scanned info of a channel.

scaninfo: The scanned info.

size: The size of the scanned info.

This attribute is the information that is scanned from a file when the BASS_STREAM_PRESCAN flag is used in a BASS_StreamCreateFile(String, Int64, Int64, BASSFlag) call or when the BASS_POS_SCAN flag is used with BASS_ChannelSetPosition(Int32, Int64, BASSMode). It is supported on MP3/MP2/MP1 files and chained OGG files. It may be supported by add-ons too; see the documentation.

The structure of the scanned info may change in future versions, so if the data is stored, be prepared for BASS_ChannelSetAttributeEx to fail when trying to apply it; the file can be scanned again if that happens.

BASS_ATTRIB_NORAMP11 Disable Playback ramping?

noramp: Disable playback ramping... 0 = no, else yes.

By default, a channel will be ramped-in when starting playback and ramped-out when stopping playback, to avoid sudden level changes that could result in a click sound each time. That ramping can be disabled by enabling this option. Volume (BASS_ATTRIB_VOL) and panning (BASS_ATTRIB_PAN) changes are always ramped regardless of this option setting.

Ramping only applies during normal playback and does not affect decoding channels; it will not be present in the data delivered by BASS_ChannelGetData(Int32, IntPtr, Int32). Ramping-in is skipped when a channel's sample data begins at a low level. Ramping-out only applies when a channel is stopped or paused via BASS_ChannelStop(Int32) or BASS_ChannelPause(Int32), not when the output device is stopped or paused via BASS_Stop or BASS_Pause, nor when the end is reached.

This attribute is not available on Windows, as BASS does not generate the final mix.

BASS_ATTRIB_BITRATE12 Gets the average bitrate (bkps).

bitrate: The bitrate in kilobits per second (bkps).

This attribute gives the average bitrate of the file's audio data. If the file also contains video, that is excluded from the bitrate calculation. This attribute is read-only, so cannot be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

BASS_ATTRIB_MUSIC_AMPLIFY256 The amplification level of a MOD music.

amp: Amplification level... 0 (min) to 100 (max). This will be rounded down to a whole number.

As the amplification level get's higher, the sample data's range increases, and therefore, the resolution increases. But if the level is set too high, then clipping can occur, which can result in distortion of the sound.

You can check the current level of a MOD music at any time by using BASS_ChannelGetLevel(Int32). By doing so, you can decide if a MOD music's amplification level needs adjusting.

The default amplification level is 50.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

BASS_ATTRIB_MUSIC_PANSEP257 The pan separation level of a MOD music.

pansep: Pan separation... 0 (min) to 100 (max), 50 = linear. This will be rounded down to a whole number.

By default BASS uses a linear panning "curve". If you want to use the panning of FT2, use a pan separation setting of around 35. To use the Amiga panning (ie. full left and right) set it to 100.

BASS_ATTRIB_MUSIC_PSCALER258 The position scaler of a MOD music.

scale: The scaler... 1 (min) to 256 (max). This will be rounded down to a whole number.

When calling BASS_ChannelGetPosition(Int32, BASSMode), the row (HIWORD) will be scaled by this value. By using a higher scaler, you can get a more precise position indication.

The default scaler is 1.

Examples

Get the position of a MOD music accurate to within a 10th of a row:
VB
' set the scaler
Bass.BASS_ChannelSetAttribute(music, BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER, 10F)
Dim pos As Integer = Bass.BASS_MusicGetOrderPosition(music)
' the order
Dim order As Integer = Utils.LowWord32(pos)
' the row
Dim row As Integer = HighWord32(pos) / 10
' the 10th of a row
Dim row10th As Integer = HighWord32(pos) Mod 10
// set the scaler
Bass.BASS_ChannelSetAttribute(music, BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER, 10f);
int pos = Bass.BASS_MusicGetOrderPosition(music);
// the order
int order = Utils.LowWord32(pos);
// the row
int row = HighWord32(pos) / 10;
// the 10th of a row
int row10th = HighWord32(pos) % 10;

BASS_ATTRIB_MUSIC_BPM259 The BPM of a MOD music.

bpm: The BPM... 1 (min) to 255 (max). This will be rounded down to a whole number.

This attribute is a direct mapping of the MOD's BPM, so the value can be changed via effects in the MOD itself.

Note that by changing this attribute, you are changing the playback length.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

BASS_ATTRIB_MUSIC_SPEED260 The speed of a MOD music.

speed: The speed... 0 (min) to 255 (max). This will be rounded down to a whole number.

This attribute is a direct mapping of the MOD's speed, so the value can be changed via effects in the MOD itself.

The "speed" is the number of ticks per row. Setting it to 0, stops and ends the music. Note that by changing this attribute, you are changing the playback length.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

BASS_ATTRIB_MUSIC_VOL_GLOBAL261 The global volume level of a MOD music.

volume: The global volume level... 0 (min) to 64 (max, 128 for IT format). This will be rounded down to a whole number.

This attribute is a direct mapping of the MOD's global volume, so the value can be changed via effects in the MOD itself. The "speed" is the number of ticks per row. Setting it to 0, stops and ends the music. Note that by changing this attribute, you are changing the playback length.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

BASS_ATTRIB_MUSIC_ACTIVE262 The number of active channels in a MOD music.

active: The number of channels.

This attribute gives the number of channels (including virtual) that are currently active in the decoder, which may not match what is being heard during playback due to buffering. To reduce the time difference, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

This attribute is read-only, so cannot be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

BASS_ATTRIB_MUSIC_VOL_CHAN512 The volume level of a channel in a MOD music + channel#.

channel: The channel to set the volume of... 0 = 1st channel.

volume: The volume level... 0 (silent) to 1 (full).

The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The BASS_CONFIG_CURVE_VOL config option setting has no effect on this. The volume level of all channels is initially 1 (full).

This attribute can also be used to count the number of channels in a MOD Music.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

Examples

Count the number of channels in a MOD music:
VB
Dim channels As Integer = 0
Dim dummy As Single
While Bass.BASS_ChannelGetAttribute(music, CType(CInt(BASS_ATTRIB_MUSIC_VOL_CHAN) + channels, BASSAttribute), dummy)
  channels += 1
End While
int channels = 0;
float dummy;
while (Bass.BASS_ChannelGetAttribute(music, (BASSAttribute)((int)BASS_ATTRIB_MUSIC_VOL_CHAN + channels), ref dummy))
{
  channels++; 
}

BASS_ATTRIB_MUSIC_VOL_INST768 The volume level of an instrument in a MOD music + inst#.

inst: The instrument to set the volume of... 0 = 1st instrument.

volume: The volume level... 0 (silent) to 1 (full).

The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The BASS_CONFIG_CURVE_VOL config option setting has no effect on this. The volume level of all instruments is initially 1 (full). For MOD formats that do not use instruments, read "sample" for "instrument".

This attribute can also be used to count the number of instruments in a MOD music.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

Examples

Count the number of instruments in a MOD music:
VB
Dim instruments As Integer = 0
Dim dummy As Single
While Bass.BASS_ChannelGetAttribute(music, CType(CInt(BASSAttribute.BASS_ATTRIB_MUSIC_VOL_INST) + instruments, BASSAttribute), dummy)
  instruments += 1
End While
int instruments = 0;
float dummy;
while (Bass.BASS_ChannelGetAttribute(music, (BASSAttribute)((int)BASSAttribute.BASS_ATTRIB_MUSIC_VOL_INST + instruments), ref dummy))
{
  instruments++; 
}

BASS_ATTRIB_TEMPO65536 BASS_FX Tempo: The Tempo in percents (-95%..0..+5000%).
BASS_ATTRIB_TEMPO_PITCH65537 BASS_FX Tempo: The Pitch in semitones (-60..0..+60).
BASS_ATTRIB_TEMPO_FREQ65538 BASS_FX Tempo: The Samplerate in Hz, but calculates by the same % as BASS_ATTRIB_TEMPO.
BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER65552 BASS_FX Tempo Option: Use FIR low-pass (anti-alias) filter (gain speed, lose quality)? =1 (default), =0.

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

On iOS, Android, WinCE and Linux ARM platforms this is by default disabled for lower CPU usage.

BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH65553 BASS_FX Tempo Option: FIR low-pass (anti-alias) filter length in taps (8 .. 128 taps, default = 32, should be %4).

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO65554 BASS_FX Tempo Option: Use quicker tempo change algorithm (gain speed, lose quality)? =1, =0 (default).

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS65555 BASS_FX Tempo Option: Tempo Sequence in milliseconds (default = 82).

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS65556 BASS_FX Tempo Option: SeekWindow in milliseconds (default = 14).

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS65557 BASS_FX Tempo Option: Tempo Overlap in milliseconds (default = 12).

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

BASS_ATTRIB_TEMPO_OPTION_PREVENT_CLICK65558 BASS_FX Tempo Option: Prevents clicks with tempo changes (default = FALSE).

See BASS_FX_TempoCreate(Int32, BASSFlag) for details.

BASS_ATTRIB_REVERSE_DIR69632 BASS_FX Reverse: The Playback direction (-1=BASS_FX_RVS_REVERSE or 1=BASS_FX_RVS_FORWARD).
BASS_ATTRIB_MIDI_PPQN73728 BASSMIDI: Gets the Pulses Per Quarter Note (or ticks per beat) value of the MIDI file.

ppqn: The PPQN value.

This attribute is the number of ticks per beat as defined by the MIDI file; it will be 0 for MIDI streams created via BASS_MIDI_StreamCreate(Int32, BASSFlag, Int32), It is also read-only, so can't be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

Examples

Get the currnet position of a MIDI stream in beats:
VB
Dim ppqn As Single 
Bass.BASS_ChannelGetAttribute(midi, BASSAttribute.BASS_ATTRIB_MIDI_PPQN, ppqn) 
Dim tick As Long = Bass.BASS_ChannelGetPosition(midi, BASSMode.BASS_POS_MIDI_TICK) 
Dim beat As Single = tick / ppqn
float ppqn;
Bass.BASS_ChannelGetAttribute(midi, BASSAttribute.BASS_ATTRIB_MIDI_PPQN, ref ppqn);
long tick = Bass.BASS_ChannelGetPosition(midi, BASSMode.BASS_POS_MIDI_TICK);
float beat = tick / ppqn;

BASS_ATTRIB_MIDI_CPU73729 BASSMIDI: The maximum percentage of CPU time that a MIDI stream can use.

limit: The CPU usage limit... 0 to 100, 0 = unlimited.

It is not strictly the CPU usage that is measured, but rather how timely the stream is able to render data. For example, a limit of 50% would mean that the rendering would need to be at least 2x real-time speed. When the limit is exceeded, BASSMIDI will begin killing voices, starting with the most quiet.

When the CPU usage is limited, the stream's samples are loaded asynchronously so that any loading delays (eg. due to slow disk) do not hold up the stream for too long. If a sample cannot be loaded in time, then it will be silenced until it is available and the stream will continue playing other samples as normal in the meantime. This does not affect sample loading via BASS_MIDI_StreamLoadSamples(Int32), which always operates synchronously.

By default, a MIDI stream will have no CPU limit.

BASS_ATTRIB_MIDI_CHANS73730 BASSMIDI: The number of MIDI channels in a MIDI stream.

channels: The number of MIDI channels... 1 (min) - 128 (max). For a MIDI file stream, the minimum is 16.

New channels are melodic by default. Any notes playing on a removed channel are immediately stopped.

BASS_ATTRIB_MIDI_VOICES73731 BASSMIDI: The maximum number of samples to play at a time (polyphony) in a MIDI stream.

voices: The number of voices... 1 (min) - 1000 (max).

If there are currently more voices active than the new limit, then some voices will be killed to meet the limit. The number of voices currently active is available via the BASS_ATTRIB_MIDI_VOICES_ACTIVE attribute.

A MIDI stream will initially have a default number of voices as determined by the BASS_CONFIG_MIDI_VOICES config option.

BASS_ATTRIB_MIDI_VOICES_ACTIVE73732 BASSMIDI: The number of samples currently playing in a MIDI stream.

voices: The number of voices.

This attribute is read-only, so cannot be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

BASS_ATTRIB_MIDI_TRACK_VOL73984 BASSMIDI: The volume level of a track in a MIDI file stream + track#.

track#: The track to set the volume of... 0 = first track.

volume: The volume level (0.0=silent, 1.0=normal/default).

The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The BASS_CONFIG_CURVE_VOL config option setting has no effect on this.

During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.

This attribute can also be used to count the number of tracks in a MIDI file stream. MIDI streams created via BASS_MIDI_StreamCreate(Int32, BASSFlag, Int32) do not have any tracks.

Examples

Count the number of tracks in a MIDI stream:
VB
Dim tracks As Integer = 0
Dim dummy As Single
While Bass.BASS_ChannelGetAttribute(midi, CType(CInt(BASSAttribute.BASS_ATTRIB_MIDI_TRACK_VOL) + tracks, BASSAttribute), dummy)
  tracks += 1
End While
int tracks = 0;
float dummy;
while (Bass.BASS_ChannelGetAttribute(midi, (BASSAttribute)((int)BASSAttribute.BASS_ATTRIB_MIDI_TRACK_VOL + tracks), ref dummy))
{
  tracks++; 
}

BASS_ATTRIB_OPUS_ORIGFREQ77824 BASSOPUS: The sample rate of an Opus stream's source material.

freq: The sample rate.

Opus streams always have a sample rate of 48000 Hz, and an Opus encoder will resample the source material to that if necessary. This attribute presents the original sample rate, which may be stored in the Opus file header. This attribute is read-only, so cannot be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

BASS_ATTRIB_DSD_GAIN81920 BASSdsd: The gain applied when converting to PCM.

gain: The gain in decibels.

This attribute is only applicable when converting to PCM, and is unavailable when producing DSD-over-PCM or raw DSD data. The default setting is determined by the BASS_CONFIG_DSD_GAIN config option.

BASS_ATTRIB_DSD_RATE81921 BASSdsd: The DSD sample rate.

rate: The DSD sample rate.

This attribute is read-only, so cannot be modified via BASS_ChannelSetAttribute(Int32, BASSAttribute, Single).

BASS_ATTRIB_MIXER_LATENCY86016 BASSmix: Custom output latency.

latency: The latency in seconds.

When a mixer is played by BASS, the BASS_Mixer_ChannelGetData(Int32, IntPtr, Int32), BASS_Mixer_ChannelGetLevel(Int32) and BASS_Mixer_ChannelGetPosition(Int32, BASSMode) functions will get the output latency and account for that so that they reflect what is currently being heard, but that cannot be done when a different output system is used, eg. ASIO or WASAPI. In that case, this attribute can be used to tell the mixer what the output latency is, so that those functions can still account for it. The mixer needs to have the BASS_STREAM_DECODE and BASS_MIXER_POSEX flags set to use this attribute.

The default setting is 0 (no accounting for latency). Changes take immediate effect.

BASS_ATTRIB_SPLIT_ASYNCBUFFER86032 BASSmix: The amount of data (in seconds) to asynchronously buffer ahead.

It can be set to any value at any time, including setting it to 0 to disable the buffering, but it will be limited by the splitter buffer length (as determined by BASS_CONFIG_SPLIT_BUFFER). The setting affects all splitters on the same source. When there are multiple splitters, the async buffering is based on the most advanced of them, eg. a 100ms async buffer means 100ms ahead of the most advanced splitter. That means the async buffer length should be under the splitter buffer length to leave some room for the splitters to be apart. For example, if you have 2 mixers feeding off a source at 100ms intervals, then the async buffer should be at least 100ms under the splitter buffer length.

When a splitter needs more data than has been buffered asynchronously, then it will request the remainder from the source directly, like when asynchronous buffering is disabled. So there's no need to set the asynchronous buffer extra large for a safety margin; it only really needs to be large enough to cover the period between splitter requests.

BASS_ATTRIB_SPLIT_ASYNCPERIOD86033 BASSmix: Limits the amount of data (in seconds) that is asynchronously buffered at once

The default is 0, which means fill the async buffer all at once. For example, if the async buffer is 100ms and the async period is 20ms, then the buffer will be filled in 5 steps rather than all at once. Note it won't pause 20ms between the steps in that case, so it won't really make the buffering slower, ie. the buffer will get filled at approximately the same speed regardless of the period setting.

See Also

Reference