BASSmix 2.4
Copyright (c) 2005-2026 Un4seen Developments Ltd. All rights reserved.


BASSmix is an extension to the BASS audio library, providing the ability to mix
together multiple BASS channels, with resampling and matrix mixing features. It
also provides the ability to go the other way and split a BASS channel into
multiple channels.


Requirements
============
BASS (version 2.4.11 or above) is required.


Using BASSmix
=============
The usage information in the BASS.TXT file (from the BASS package) is also
applicable to BASSmix and other add-ons.

As well as the examples included in this package, several of the examples
included in the BASSWASAPI package also use BASSmix.

TIP: The BASSMIX.CHM file should be put in the same directory as the BASS.CHM
     file, so that the BASSmix documentation can be accessed from within the
     BASS documentation.


Included files
==============
Win32 version
-------------
BASSMIX.TXT     This file
BASSMIX.DLL     32-bit BASSmix module
BASSMIX.CHM     BASSmix documentation
X64\
  BASSMIX.DLL     64-bit BASSmix module
C\
  BASSMIX.H       BASSmix C/C++ header file
  BASSMIX.LIB     32-bit BASSmix import library
  BASSMIX.SLN     Visual Studio solution for examples
  MAKEFILE        Makefile for examples
  MAKEFILE.IN     Makefile helper macros
  X64\
    BASSMIX.LIB     64-bit BASSmix import library
  MULTI\          Multiple device example
    ...
  SPEAKERS\       Multi-speaker example
    ...
  BIN\            Precompiled examples
    MULTI.EXE
    SPEAKERS.EXE
DELPHI\
  BASSMIX.PAS     BASSmix Delphi/Pascal unit
  SPEAKERS\       Multi-speaker example
    ...
VB\
  BASSMIX.BAS     BASSmix Visual Basic module
  MULTI\          Multiple device example
    ...
  SPEAKERS\       Multi-speaker example
    ...

NOTE: You may need to "Unblock" the BASSMIX.CHM file in its "Properties" to
      view it. The documentation can also be viewed online at the BASS website.

NOTE: To run the example EXEs, first you will need to copy BASSMIX.DLL and
      BASS.DLL into the same directory as them.

NOTE: To build the examples, you will need to copy the BASS API into the same
      directory as the BASSmix API.

NOTE: The Delphi and VB examples may not always be up to date with the C
      examples, so the latter should be preferred as references if possible.

macOS version
-------------
BASSMIX.TXT     This file
LIBBASSMIX.DYLIB  BASSmix module
BASSMIX.CHM     BASSmix documentation
C\
  BASSMIX.H       BASSmix C/C++/Objective-C header file
  BASSMIX.XCODEPROJ  Xcode project for examples
  MULTI\          Multiple device example
    ...
  SPEAKERS\       Multi-speaker example
    ...
DELPHI\
  BASSMIX.PAS     BASSmix Delphi/Pascal unit

NOTE: To build the examples, you will need to copy the BASS API into the same
      directory as the BASSmix API.

Linux version
-------------
BASSMIX.TXT     This file
BASSMIX.CHM     BASSmix documentation
LIBS\           BASSmix modules
  ...
C\
  BASSMIX.H       BASSmix C/C++ header file
  MAKEFILE        Makefile for examples
  MAKEFILE.IN     Makefile helper macros
  MULTI\          Multiple device example
    ...
  SPEAKERS\       Multi-speaker example
    ...
DELPHI\
  BASSMIX.PAS     BASSmix Delphi/Pascal unit

NOTE: To build the examples, you will need to copy the BASS API into the same
      directory as the BASSmix API.

Android version
---------------
BASSMIX.TXT     This file
BASSMIX.CHM     BASSmix documentation
LIBS\           BASSmix modules
  ...
C\
  BASSMIX.H       BASSmix C/C++ header file
JAVA\COM\UN4SEEN\BASS\
  BASSMIX.JAVA    BASSmix Java class

iOS version
-----------
BASSMIX.TXT     This file
BASSMIX.XCFRAMEWORK  BASSmix framework
BASSMIX.CHM     BASSmix documentation
BASSMIX.H       BASSmix C/C++/Objective-C header file


Latest Version
==============
The latest versions of BASSmix & BASS can be found at the BASS website:

	www.un4seen.com


Licence
=======
BASSmix is free to use with BASS.

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, BASSMIX IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND/OR FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS SHALL NOT BE HELD
LIABLE FOR ANY DAMAGE THAT MAY RESULT FROM THE USE OF BASSMIX. YOU USE
BASSMIX ENTIRELY AT YOUR OWN RISK.

Usage of BASSmix indicates that you agree to the above conditions.

All trademarks and other registered names contained in the BASSmix
package are the property of their respective owners.


History
=======
These are the major (and not so major) changes in each release, along with the
functions/options that are introduced/affected by them. There are other little
tweaks and fixes made along the way too.

2.4.13 - 9/9/2026
-----------------
* Simpler channel mapping setting
	BASS_Mixer_ChannelSetMap
	SPEAKERS example updated
* Matrix resetting to defaults
	BASS_Mixer_ChannelSetMatrix
* Matrix changes are ramped by default
	BASS_Mixer_ChannelSetMatrix
	BASS_Mixer_ChannelSetMap
	BASS_Mixer_ChannelFlags
* Option to disable ramping of volume/pan/matrix changes
	BASS_MIXER_CHAN_NORAMP (BASS_ChannelFlags flag)
* Ramping-out when pausing
	BASS_MIXER_CHAN_RAMPOUT (BASS_Mixer_StreamAddChannel/Ex flag)
	BASS_MIXER_CHAN_PAUSE (BASS_ChannelFlags flag)
* Stalled sources are ramped-in when resuming by default
	BASS_MIXER_CHAN_NORAMPIN (BASS_Mixer_StreamAddChannel/Ex flag)
* Syncs for any stalled mixer sources
	BASS_SYNC_MIXER_STALL (BASS_ChannelSetSync type)
	BASS_SYNC_MIXER_RESUME (BASS_ChannelSetSync type)
* Accounting for custom output latency on non-mixtime syncs
	BASS_Mixer_ChannelSetSync
* Callback system for providing custom output latency
	BASS_Mixer_StreamSetLatency
	MIXERLATENCYPROC
* DSP-based splitting/cloning with support for non-decoding channels
	BASS_SPLIT_DSP (BASS_Split_StreamCreate flag)
	BASS_CONFIG_SPLIT_PRIORITY (BASS_SetConfig option)
	BASS_ATTRIB_SPLIT_PRIORITY (BASS_ChannelSetAttribute option)
* Splitter buffers that overflow only drop the excess old data instead of whole buffer
	BASS_CONFIG_SPLIT_BUFFER (BASS_SetConfig option)
* Splitter auto-resetting when seeking
	BASS_SPLIT_AUTORESET (BASS_Split_StreamCreate flag)
* Splitters only use their source's loop settings
	BASS_SAMPLE_LOOP (BASS_ChannelFlags flag)
	BASS_POS_LOOP (BASS_ChannelSetPosition mode)
* Thread-specific config options
	BASS_CONFIG_THREAD (BASS_SetConfig flag)
	BASS_CONFIG_MIXER_BUFFER (BASS_SetConfig option)
	BASS_CONFIG_MIXER_POSEX (BASS_SetConfig option)
	BASS_CONFIG_SPLIT_BUFFER (BASS_SetConfig option)
* A few small default downmixing matrix tweaks
	BASS_MIXER_CHAN_DOWNMIX (BASS_Mixer_StreamAddChannel/Ex flag)
* New source auto-freeing flag (same value as BASS_STREAM_AUTOFREE for back-compatibility)
	BASS_MIXER_CHAN_AUTOFREE (BASS_Mixer_StreamAddChannel/Ex flag)
* Fix for envelope end syncs and source removal when setting envelope position at/beyond the end
	BASS_SYNC_MIXER_ENVELOPE (BASS_Mixer_ChannelSetSync type)
	BASS_MIXER_ENV_REMOVE (BASS_Mixer_ChannelSetEnvelope flag)
	BASS_Mixer_ChannelSetEnvelopePos
* 128 point rate conversion limit removed on Android/iOS
	BASS_ATTRIB_SRC (BASS_ChannelSetAttribute option)
* Old deprecated flags removed from headers
	BASS_MIXER_BUFFER
	BASS_MIXER_LIMIT
	BASS_MIXER_MATRIX
	BASS_MIXER_PAUSE
	BASS_MIXER_DOWNMIX
	BASS_MIXER_NORAMPIN

2.4.12 - 9/8/2022
-----------------
* Mixer master volume control
	BASS_ATTRIB_MIXER_VOL (BASS_ChannelSetAttribute option)
* Queued mixers for playing sources one at a time
	BASS_MIXER_QUEUE (BASS_Mixer_StreamCreate flag)
	BASS_SYNC_MIXER_QUEUE (BASS_ChannelSetSync type)
* Option to ignore speaker arrangement
	BASS_MIXER_NOSPEAKER (BASS_Mixer_StreamCreate flag)
* Matrix initialization for remapping differing multi-channel sources and mixers
	BASS_MIXER_CHAN_MATRIX (BASS_Mixer_StreamAddChannel/Ex flag)
* Downmixing support for multi-channel mixers
	BASS_MIXER_CHAN_DOWNMIX (BASS_Mixer_StreamAddChannel/Ex flag)
* Downmixing can be toggled together with SPEAKER flags
	BASS_MIXER_CHAN_DOWNMIX (BASS_Mixer_ChannelFlags flag)
* Ramping-in skipped when a source's data begins at a low level
	BASS_Mixer_StreamAddChannel
	BASS_Mixer_StreamAddChannelEx
* Mixer length retrieval
	BASS_ChannelGetLength
* SSE is required on x86 platforms

2.4.11 - 23/9/2021
------------------
* Multi-threaded mixing
	BASS_ATTRIB_MIXER_THREADS (BASS_ChannelSetAttribute option)
* Submixers use parent mixer's latency in source position/data/level retrieval
	BASS_Mixer_ChannelGetPosition
	BASS_Mixer_ChannelGetData
	BASS_Mixer_ChannelGetLevel
	BASS_Mixer_ChannelGetLevelEx
* Mixer source status retrieval
	BASS_Mixer_ChannelIsActive
* Mixer source start delay retrieval
	BASS_POS_MIXER_DELAY (BASS_Mixer_ChannelGetPosition mode)
* Lower CPU usage for matrix mixing when each input goes to a single output in sequence
	BASS_MIXER_MATRIX (BASS_Mixer_StreamAddChannel/Ex flag)
	BASS_Mixer_ChannelSetMatrix
	BASS_Mixer_ChannelSetMatrixEx
* macOS examples rewritten in Objective-C/Cocoa

2.4.10 - 20/3/2020
------------------
* Mixer source flags renamed to distinguish from mixer flags
	BASS_MIXER_BUFFER -> BASS_MIXER_CHAN_BUFFER
	BASS_MIXER_LIMIT -> BASS_MIXER_CHAN_LIMIT
	BASS_MIXER_MATRIX -> BASS_MIXER_CHAN_MATRIX
	BASS_MIXER_PAUSE -> BASS_MIXER_CHAN_PAUSE
	BASS_MIXER_DOWNMIX -> BASS_MIXER_CHAN_DOWNMIX
	BASS_MIXER_NORAMPIN -> BASS_MIXER_CHAN_NORAMPIN
* Absolute source start position option
	BASS_MIXER_CHAN_ABSOLUTE (BASS_Mixer_StreamAddChannelEx flag)
* Improved gapless joins with sources that don't end/begin close to a 0 sample
	BASS_Mixer_StreamAddChannel
	BASS_Mixer_StreamAddChannelEx
* 7th and 8th channels are included in a downmix
	BASS_MIXER_CHAN_DOWNMIX (BASS_Mixer_StreamAddChannel/Ex flag)
* Asynchronous source auto-freeing
	BASS_STREAM_AUTOFREE (BASS_Mixer_StreamAddChannel/Ex flag)
	BASS_Mixer_ChannelRemove
* Source removal at the end of an envelope
	BASS_MIXER_ENV_REMOVE (BASS_Mixer_ChannelSetEnvelope flag)
* Support for relative seeking
	BASS_POS_RELATIVE (BASS_Mixer_ChannelSetPosition flag)
* Volume & panning attribute affected level retrieval
	BASS_LEVEL_VOLPAN (BASS_Mixer_ChannelGetLevelEx flag)
* Data/level retrieval dips into played data when not enough unplayed data
	BASS_Mixer_ChannelGetData
	BASS_Mixer_ChannelGetLevel
	BASS_Mixer_ChannelGetLevelEx
* Support for splitting/cloning dummy streams
	BASS_Split_StreamCreate

2.4.9 - 30/8/2017
-----------------
* Asynchronous buffering for splitters
	BASS_ATTRIB_SPLIT_ASYNCBUFFER (BASS_ChannelSetAttribute option)
	BASS_ATTRIB_SPLIT_ASYNCPERIOD (BASS_ChannelSetAttribute option)
* Splitter position/length based on splitter (rather than source) channel count
	BASS_SPLIT_POS (BASS_Split_StreamCreate flag)
* Mixer playback buffer flushing when seeking
	BASS_POS_MIXER_RESET (BASS_Mixer_ChannelSetPosition flag)
* Retrieval of a mixer's sources
	BASS_Mixer_StreamGetChannels
* Removal of 32 channel limit for matix mixing sources
	BASS_MIXER_MATRIX (BASS_Mixer_StreamAddChannel/Ex flag)

2.4.8 - 13/3/2015
-----------------
* Accounting for custom output latency in source position/data/level retrieval
	BASS_ATTRIB_MIXER_LATENCY (BASS_ChannelSetAttribute option)
	BASS_Mixer_ChannelGetPosition
	BASS_Mixer_ChannelGetData
	BASS_Mixer_ChannelGetLevel
	BASS_Mixer_ChannelGetLevelEx
* Ramped matrix changes
	BASS_Mixer_ChannelSetMatrixEx
* Speaker assignment with matrix mixing
	BASS_SPEAKER_xxx (BASS_Mixer_StreamAddChannel/Ex and BASS_Mixer_ChannelFlags flags)
* Extended level retrieval support
	BASS_Mixer_ChannelGetLevelEx
* Absolute source buffer length option
	BASS_CONFIG_MIXER_BUFFER
* Length of resampled output rounded to nearest sample

2.4.7 - 8/5/2012
----------------
* Improved and adjustable sample rate conversion quality
	BASS_ATTRIB_SRC (BASS_ChannelSetAttribute option)
* Additional filtering option removed (superseded by BASS_ATTRIB_SRC)
	BASS_MIXER_FILTER
	BASS_CONFIG_MIXER_FILTER

2.4.6 - 26/9/2011
-----------------
* Retrieval of all splitters set on a channel
	BASS_Split_StreamGetSplits
* "Slave" splitters that only read buffered data (not directly from the source)
	BASS_SPLIT_SLAVE (BASS_Split_StreamCreate flag)
* Splitter buffer length is now unrestricted
	BASS_CONFIG_SPLIT_BUFFER
* Splitter position now available immediately following creation of the splitter
	BASS_ChannelGetPosition
* Envelope node syncs
	BASS_SYNC_MIXER_ENVELOPE_NODE (BASS_Mixer_ChannelSetSync type)
* Limiting of envelope syncs to a particular envelope type
	BASS_SYNC_MIXER_ENVELOPE (BASS_Mixer_ChannelSetSync type)
	BASS_SYNC_MIXER_ENVELOPE_NODE (BASS_Mixer_ChannelSetSync type)
* More precise mixer sample rate conversion
* Xcode examples project added for OSX

2.4.5 - 17/12/2010
------------------
* Accounting for latency when getting the position of a mixer source
	BASS_MIXER_POSEX (BASS_Mixer_StreamCreate flag)
	BASS_Mixer_ChannelGetPositionEx
* Splitter buffer positioning
	BASS_Split_StreamResetEx
* Splitter buffer level retrieval
	BASS_Split_StreamGetAvailable
* Splitter buffer length limit increased to 10 seconds
	BASS_CONFIG_SPLIT_BUFFER
* Decode-to-position seeking support for mixers and splitters
	BASS_POS_DECODETO (BASS_ChannelSetPosition flag)
* Fix for potential splitter resetting deadlock
	BASS_Split_StreamReset

2.4.4 - 4/2/2010
----------------
* Fix for a bug that could result in a mixer source ending a fraction early

2.4.3 - 14/12/2009
------------------
* Envelope sync fix
	BASS_SYNC_MIXER_ENVELOPE (BASS_Mixer_ChannelSetSync type)
* Thread-safety fix
	BASS_Mixer_ChannelRemove

2.4.2 - 4/9/2009
----------------
* Matrix mixing example
	SPEAKERS example added
* Splitter stream example
	MULTI example added

2.4.1 - 19/12/2008
------------------
* Splitting into multiple streams
	BASS_Split_StreamCreate
	BASS_Split_StreamGetSource
	BASS_Split_StreamReset
	BASS_CONFIG_SPLIT_BUFFER (BASS_SetConfig option)
* Mixer output limiting to the amount of data available from a source
	BASS_MIXER_LIMIT (BASS_Mixer_StreamAddChannel/Ex flag)

2.4 - 2/4/2008
--------------
* Attribute envelopes
	BASS_Mixer_ChannelSetEnvelope
	BASS_Mixer_ChannelGetEnvelopePos
	BASS_Mixer_ChannelSetEnvelopePos
	BASS_MIXER_NODE
	BASS_SYNC_MIXER_ENVELOPE (BASS_Mixer_ChannelSetSync type)
* Adjustable resampling filtering
	BASS_MIXER_FILTER (BASS_Mixer_StreamAddChannel/Ex flag)
	BASS_CONFIG_MIXER_FILTER (BASS_SetConfig option)
* Source level/data retrieval
	BASS_Mixer_ChannelGetData
	BASS_Mixer_ChannelGetLevel
	BASS_MIXER_BUFFER (BASS_Mixer_StreamAddChannel/Ex flag)
	BASS_CONFIG_MIXER_BUFFER (BASS_SetConfig option)
* Immediate resuming of a stalled mixer upon a new/unpaused source
	BASS_MIXER_RESUME (BASS_Mixer_StreamCreate flag)
* Support for position "modes"
	BASS_Mixer_ChannelSetPosition
	BASS_Mixer_ChannelGetPosition
* 64-bit channel start & length settings
	BASS_Mixer_StreamAddChannelEx
* Support for all source sync types
	BASS_Mixer_ChannelSetSync
* Mixer channel type added
	BASS_CTYPE_STREAM_MIXER
* Version retrieval
	BASS_Mixer_GetVersion
* Callback "user" parameters changed to pointers
	BASS_Mixer_ChannelSetSync

2.3 - 30/7/2007
---------------
* First release


Bug reports, Suggestions, Comments, Enquiries, etc
==================================================
If you have any of the aforementioned, please visit the BASS forum at the
website.