BASS.NET API for the Un4seen BASS Audio LibraryBassBASS_Init Method (Int32, Int32, BASSInit, IntPtr, Guid)BASS.NET API for the Un4seen BASS Audio Library
Initializes an output device.

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

public static bool BASS_Init(
	int device,
	int freq,
	BASSInit flags,
	IntPtr win,
	Guid clsid


Type: SystemInt32
The device to use... -1 = default device, 0 = no sound, 1 = first real output device. BASS_GetDeviceInfo(Int32, BASS_DEVICEINFO) or BASS_GetDeviceCount can be used to get the total number of devices.
Type: SystemInt32
Output sample rate.
Type: Un4seen.BassBASSInit
Any combination of these flags (see BASSInit):
BASS_DEVICE_8BITSUse 8-bit resolution, else 16-bit.
BASS_DEVICE_MONOUse mono, else stereo.
BASS_DEVICE_3DEnable 3D functionality. If this flag is not specified, then the BASS_SAMPLE_3D flag is ignored when loading/creating a sample/stream/music.
BASS_DEVICE_LATENCYCalculates the latency of the device, that is the delay between requesting a sound to play and it acually being heard. A recommended minimum buffer length is also calculated. Both values are retrievable in the BASS_INFO structure (latency and minbuf members). These calculations can increase the time taken by this function by 1-3 seconds.
BASS_DEVICE_SPEAKERSForce the enabling of speaker assignment. With some devices/drivers, the number of speakers BASS detects may be 2, when the device in fact supports more than 2 speakers. This flag forces the enabling of assignment to all 8 possible speakers. This flag has no effect with non-WDM drivers.
BASS_DEVICE_CPSPEAKERUse the Windows control panel setting to detect the number of speakers. Soundcards generally have their own control panel to set the speaker config, so the Windows control panel setting may not be accurate unless it matches that. This flag has no effect on Vista, as the speakers are already accurately detected.
BASS_DEVICE_NOSPEAKERIgnore speaker arrangement. This flag tells BASS not to make any special consideration for speaker arrangements when using the SPEAKER flags, eg. swapping the CENLFE and REAR speaker channels in 5/7.1 speaker output. This flag should be used with plain multi-channel (rather than 5/7.1) devices.
BASS_DEVICE_DMIXLinux only: Initialize the device using the ALSA "dmix" plugin, else initialize the device for exclusive access.
BASS_DEVICE_FREQSet the device's output rate to freq, otherwise leave it as it is.
Type: SystemIntPtr
The application's main window... Zero = the desktop window (use this for console applications).
Type: SystemGuid
Class identifier of the object to create, that will be used to initialize DirectSound... = use default

Return Value

Type: Boolean
If the device was successfully initialized, is returned, else is returned. Use BASS_ErrorGetCode to get the error code.

This function must be successfully called before using any sample, stream or MOD music functions. The recording functions may be used without having called this function.

Playback is not possible with the "no sound" device, but it does allow the use of "decoding channels", eg. to decode files.

When specifying a class identifier (clsid), after successful initialization, you can use BASS_GetDSoundObject(Int32) to retrieve the DirectSound object, and through that access any special interfaces that the object may provide.

Simultaneously using multiple devices is supported in the BASS API via a context switching system - instead of there being an extra "device" parameter in the function calls, the device to be used is set prior to calling the functions. BASS_SetDevice(Int32) is used to switch the current device. When successful, BASS_Init automatically sets the current thread's device to the one that was just initialized.

When using the default device (device = -1), BASS_GetDevice can be used to find out which device it was mapped to. On Windows, it'll always be the first device.

ERROR CODEDescription
BASS_ERROR_DEVICEThe device number specified is invalid.
BASS_ERROR_ALREADYThe device has already been initialized. You must call BASS_Free before you can initialize it again.
BASS_ERROR_DRIVERThere is no available device driver... the device may already be in use.
BASS_ERROR_FORMATThe specified format is not supported by the device. Try changing the freq and flags parameters.
BASS_ERROR_MEMThere is insufficient memory.
BASS_ERROR_NO3DThe device has no 3D support.
BASS_ERROR_UNKNOWNSome other mystery problem!


On Linux, a 'Default' device is hardcoded to device number 1, which uses the default output set in the ALSA config; that could map directly to one of the other devices or it could use ALSA plugins. If the BASS_CONFIG_DEV_DEFAULT config option has been enbled, a "Default" device is also available on Windows, who's output will follow default device changes on Windows 7. In both cases, the "Default" device will also be the default device (device = -1).

The sample format specified in the freq and flags parameters has no effect on the device output on iOS or OSX, and not on Windows unless VxD drivers are used (on Windows 98/95); with WDM drivers (on Windows XP/2000/Me/98SE), the output format is automatically set depending on the format of what is played and what the device supports, while on Vista and above, the output format is determined by the user's choice in the Sound control panel. On Linux the output device will use the specified format if possible, but will otherwise use a format as close to it as possible. If the BASS_DEVICE_FREQ flag is specified on iOS or OSX, then the device's output rate will be set to the freq parameter (if possible). The BASS_DEVICE_FREQ flag has no effect on other platforms. BASS_GetInfo(BASS_INFO) can be used to check what the output format actually is.

The win and clsid parameters are only used on Windows and are ignored on other platforms. That applies to the BASS_DEVICE_CPSPEAKERS and BASS_DEVICE_SPEAKERS flags too, as the number of available speakers is always accurately detected on the other platforms. The BASS_DEVICE_LATENCY flag is also ignored on Linux/OSX/Android/Windows CE, as latency information is available without it. The latency is also available without it on iOS, but not immediately following this function call unless the flag is used.

The BASS_DEVICE_DMIX flag is only available on Linux, and allows multiple applications to share the device (if they all use 'dmix'). It may also be possible for multiple applications to use exclusive access if the device is capable of hardware mixing. If exclusive access initialization fails, the BASS_DEVICE_DMIX flag will automatically be tried; if that happens, it can be detected via BASS_GetInfo(BASS_INFO) and the initflags.

On Linux and Windows CE, the length of the device's buffer can be set via the BASS_CONFIG_DEV_BUFFER config option.


Initialize BASS with the current form window handle:
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
Initialize BASS/DirectSound with A3D
Dim clsidA3d As Guid =  New Guid(0xd8f1eee0, 0xf634, 0x11cf, 0x87, 0x0, 0x0, 0xa0, 0x24, 0x5d, 0x91, 0x8b) 
Bass.BASS_Init(-1, 44100, 0, Me.Handle, clsidA3d)
Guid clsidA3d = new Guid(0xd8f1eee0, 0xf634, 0x11cf, 0x87, 0x0, 0x0, 0xa0, 0x24, 0x5d, 0x91, 0x8b);
Bass.BASS_Init(-1, 44100, 0, this.Handle, clsidA3d);
See Also