BASS.NET API for the Un4seen BASS Audio Library

BassWaDsp Class

BASS.NET API for the Un4seen BASS Audio Library
BASS.NET API wrapper for BASS_WADSP.DLL

Requires: bass_wadsp.dll - Winamp DSP plugin support Add-On - shipped with the BASS.NET API.

Inheritance Hierarchy

SystemObject
  Un4seen.Bass.AddOn.WaDspBassWaDsp

Namespace:  Un4seen.Bass.AddOn.WaDsp
Assembly:  Bass.Net (in Bass.Net.dll) Version: 2.4.17.5
Syntax

public sealed class BassWaDsp

The BassWaDsp type exposes the following members.

Methods

  NameDescription
Public methodStatic memberBASS_WADSP_ChannelRemoveDSP
Removes a Winamp DSP from the Bass DSP chain which had been set up with BASS_WADSP_ChannelSetDSP(Int32, Int32, Int32) before.
Public methodStatic memberCode exampleBASS_WADSP_ChannelSetDSP
Assigns a loaded Winamp DSP to a standard BASS channel as a new DSP.

This method is pretty close to the BASS_ChannelSetDSP(Int32, DSPPROC, IntPtr, Int32) method (which is in fact internally used) but instead of setting up a user DSP method the Winamp DSP will be set up.

Public methodStatic memberBASS_WADSP_Config
Invokes the config dialog of a loaded and started Winamp DSP.
Public methodStatic memberBASS_WADSP_Free
Frees all resources of BASS_WADSP - call this method at the end of your application.
Public methodStatic memberBASS_WADSP_FreeDSP
Frees and unloads a Winamp DSP library from memory which has been loaded with BASS_WADSP_Load(String, Int32, Int32, Int32, Int32, WINAMPWINPROC) before.
Public methodStatic memberBASS_WADSP_GetFakeWinampWnd
Gets the window handle of the fake Winamp window which has been created internally when a Winamp DSP was loaded with BASS_WADSP_Load(String, Int32, Int32, Int32, Int32, WINAMPWINPROC).
Public methodStatic memberBASS_WADSP_GetModule
Returns the currently selected plugin module of a Winamp DSP.
Public methodStatic memberBASS_WADSP_GetModuleCount
Returns the number of modules contained in the loaded Winamp DSP.
Public methodStatic memberCode exampleBASS_WADSP_GetModuleName
Returns the name of a certain module of a loaded Winamp DSP.
Public methodStatic memberBASS_WADSP_GetModuleNames
Returns an array of strings containing all module names of a Winamp DSP.
Public methodStatic memberBASS_WADSP_GetName
Returns the name of the loaded Winamp DSP plugin.
Public methodStatic memberCode exampleBASS_WADSP_GetVersion
Retrieves the version number of the BASS_WADSP.DLL that is loaded.
Public methodStatic memberCode exampleBASS_WADSP_GetVersion(Int32)
Retrieves the version of the BASS_WADSP.DLL that is loaded.
Public methodStatic memberBASS_WADSP_Init
Initializes BASS_WADSP, call this right after you have called BASS_Init(Int32, Int32, BASSInit, IntPtr, IntPtr).
Public methodStatic memberCode exampleBASS_WADSP_Load
Loads a Winamp DSP library.
Public methodStatic memberBASS_WADSP_ModifySamplesDSP(Int32, Byte, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks).
Public methodStatic memberBASS_WADSP_ModifySamplesDSP(Int32, Int16, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks).
Public methodStatic memberBASS_WADSP_ModifySamplesDSP(Int32, Int32, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks).
Public methodStatic memberCode exampleBASS_WADSP_ModifySamplesDSP(Int32, IntPtr, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks).
Public methodStatic memberBASS_WADSP_ModifySamplesDSP(Int32, Single, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks).
Public methodStatic memberBASS_WADSP_ModifySamplesSTREAM(Int32, Byte, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks or in a user defined STREAMPROC).
Public methodStatic memberBASS_WADSP_ModifySamplesSTREAM(Int32, Int16, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks or in a user defined STREAMPROC).
Public methodStatic memberBASS_WADSP_ModifySamplesSTREAM(Int32, Int32, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks or in a user defined STREAMPROC).
Public methodStatic memberBASS_WADSP_ModifySamplesSTREAM(Int32, IntPtr, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks or in a user defined STREAMPROC).
Public methodStatic memberBASS_WADSP_ModifySamplesSTREAM(Int32, Single, Int32)
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks or in a user defined STREAMPROC).
Public methodStatic memberBASS_WADSP_PluginInfoFree
Free the temporary plugin info resources.
Public methodStatic memberBASS_WADSP_PluginInfoGetModuleCount
Returns the number of modules contained in the Winamp DSP which has been loaded into the temporary plugin info workspace.
Public methodStatic memberCode exampleBASS_WADSP_PluginInfoGetModuleName
Returns the name of a certain module of a Winamp DSP which has been loaded into the temporary plugin info workspace.
Public methodStatic memberBASS_WADSP_PluginInfoGetModuleNames
Returns an array of strings containing all module names of a Winamp DSP which has been loaded into the temporary plugin info workspace.
Public methodStatic memberBASS_WADSP_PluginInfoGetName
Returns the name of the Winamp DSP plugin which has been loaded into the temporary plugin info workspace.
Public methodStatic memberBASS_WADSP_PluginInfoLoad
Loads a Winamp DSP library into the temporary plugin info workspace.
Public methodStatic memberCode exampleBASS_WADSP_SetChannel
Assigns a channel to a Winamp DSP.

You only need this method, if you do NOT use the default BASS_WADSP_ChannelSetDSP(Int32, Int32, Int32) method, but use your own DSP callback (see DSPPROC).

Public methodStatic memberBASS_WADSP_SetFileName
Set the file name for a loaded Winamp DSP plugin.
Public methodStatic memberBASS_WADSP_SetSongTitle
Set the song title for a loaded Winamp DSP plugin.
Public methodStatic memberBASS_WADSP_Start
Starts a Winamp DSP.
Public methodStatic memberBASS_WADSP_Stop
Stops a Winamp DSP.
Public methodStatic memberFreeMe
Unloads this library. This must be called when you have previously called LoadMe.
Public methodStatic memberLoadMe
Loads this library into memory. The library will be search in the current application directory.
Public methodStatic memberLoadMe(String)
Loads this library into memory. The library will be loaded from the given path.
Top
Fields

  NameDescription
Public fieldStatic memberBASSWADSPVERSION
Current BASS_WADSP version (without minor revision).
Top
Remarks

BassWaDsp is an BASS.NET API extention to the BASS audio library, providing a set of functions for calling Winamp DSP plugins.

All Winamp DSPs are supported out of the box which do return as much data as provided - meaning not modifying the samplerate, tempo, pitch etc.!

If you want to use Winamp plugins which do not return the same amount of bytes as provided, you need to add a lot functionality by yourself, e.g. implementing an intermediate ring-buffer between BASS and BASS_WADSP and/or sending ModifiedSamples only in a fixed packet size of 1152 samples etc. This might be a lot of work, but is actually possible. However, there is no guarantee, that all Winmap DSPs might really work - just try them out.

Here is a list of Winamp DSP plugins, which should work fine:

C#
- OctiMax  (dsp_omxw.dll)
- Enhancer (dsp_enh.dll)
- RockSteady (DSP_RockSteady.dll)
- Nullsoft Signal Processing Studio (dsp_sps.dll)
- SHOUTcast Source DSP (dsp_sc.dll - needs lamedll.dll in your startup directory)
- SAM Encoders (dsp_encoders.dll)
- Sound Solution (dsp_ss.dll - needs the ssN.dat files in your startup directory)
- VST PlugIn Wrapper (dsp_vst.dll)
- EQ by Nevi (dsp_eqfir.dll)
- DFX Audio Enhander (dsp_dfx.dll)

These plugins for example will only work, if you implement an intermediate ring-buffer between BASS and BASS_WADSP by yourself:

C#
- Reverb3 (dsp_reverb3.dll - working with fixed Packets of 1152 samples only)
- TomSteady (dsp_tom.dll - working with fixed Packets of 1152 samples only)
- PaceMaker (dsp_pacemaker.dll)

Any window that remains in foreground should optimally pass unusedkeystrokes to the parent (winamp's) window, so that the user can still control it. As for storing configuration, configuration data should be stored in [startup path]\plugin.ini.

To use the BASS_WADSP add-on you need to perform the following steps:

1.Call BASS_WADSP_Init(IntPtr) at the beginning of your application after you have initialized Bass with BASS_Init(Int32, Int32, BASSInit, IntPtr, IntPtr).
2.Call BASS_WADSP_Load(String, Int32, Int32, Int32, Int32, WINAMPWINPROC) - to load a Winamp DSP plugin.
3.Call BASS_WADSP_Start(Int32, Int32, Int32) - to start the loaded Winamp DSP plugin.
4.Create a Bass stream...e.g. with BASS_StreamCreateFile(String, Int64, Int64, BASSFlag).
5.Call BASS_WADSP_ChannelSetDSP(Int32, Int32, Int32) - to set the Winamp DSP to the created stream. This assigns a normal Bass DSP (like you would do with BASS_ChannelSetDSP(Int32, DSPPROC, IntPtr, Int32)) but now uses the Winamp DSP internally.

You might even assign multiple Winamp DSPs to the same stream. In this case the DSPs are just executed in the order to their priority - like in Bass.

6.Play the channel like normal...and at the end call BASS_WADSP_ChannelRemoveDSP(Int32) (if BASS_STREAM_AUTOFREE was specified at stream creation or if you call BASS_StreamFree(Int32) this will be done automatically and removing the DSP(s) is not even needed).
7.You might repeat with 4.
8.When a Winamp DSP is not needed anymore, call BASS_WADSP_Stop(Int32) - to stop the Winamp DSP plugin and call BASS_WADSP_Start(Int32, Int32, Int32) to start it again.

If you don't want the DSP anymore at all, you might also need to call BASS_WADSP_ChannelRemoveDSP(Int32) in addition, if you have assigned multiple DSPs to the stream in parallel.

9.Call BASS_WADSP_FreeDSP(Int32) - to unload a Winamp DSP plugin and free all resources (this also stops the DSP and removes it out of memory).
10.At the end of your application make sure to call BASS_WADSP_Free - to free all resources.

See Also

Reference