BASS.NET API for the Un4seen BASS Audio LibraryBassWaDspBASS_WADSP_ModifySamplesDSP Method (Int32, IntPtr, Int32)BASS.NET API for the Un4seen BASS Audio Library
Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined DSPPROC callbacks).

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

[DllImportAttribute("bass_wadsp.dll", CharSet = CharSet.Auto)]
public static int BASS_WADSP_ModifySamplesDSP(
	int plugin,
	IntPtr buffer,
	int length
)

Parameters

plugin
Type: SystemInt32
The plugin handle (returned by BASS_WADSP_Load(String, Int32, Int32, Int32, Int32, WINAMPWINPROC)).
buffer
Type: SystemIntPtr
The IntPtr to the memory block containing the sample data to modify.
length
Type: SystemInt32
The number of bytes contained in the buffer.

Return Value

Type: Int32
The number of bytes modified, which should always be the number of bytes specified when calling this method. Or 0, if an error occured.
Remarks

This method can and should only be used with those Winamp DSPs which return exactly as much samples as provided - meaning not modifying the samplerate, tempo, pitch etc.!

This method can be used with 8-bit, 16-bit or float channels. Since all Winamp DSPs will internally only work with 16-bit channels an automatic internal conversion from 8-bit resp. float to 16-bit and back will take place.

Examples

VB
Private _streamA As Integer = 0
Private _dspPluginA As Integer = 0
Private _myDSPAddr As DSPPROC
...
_dspPluginA = BassWaDsp.BASS_WADSP_Load("dsp_test.dll", 5, 5, 100, 100, Nothing)
BassWaDsp.BASS_WADSP_Start(_dspPluginA, 0, 0)
...
_streamA = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                BASSFlag.BASS_DEFAULT Or BASSFlag.BASS_STREAM_AUTOFREE)
' play the stream
If _streamA <> 0 Then
  _myDSPAddr = New DSPPROC(AddressOf MyWinampDSP)
  Bass.BASS_ChannelSetDSP(_streamA, _myDSPAddr, New IntPtr(_dspPluginA), - 500)
  BassWaDsp.BASS_WADSP_SetChannel(_dspPluginA, _streamA)
  Bass.BASS_ChannelPlay(_streamA, False)
End If
...
Private Sub MyWinampDSP(handle As Integer, channel As Integer, 
                        buffer As IntPtr, length As Integer, user As IntPtr)
  If length = 0 OrElse buffer = IntPtr.Zero Then
    Return
  End If
  BassWaDsp.BASS_WADSP_ModifySamplesDSP(user.ToInt32(), buffer, length)
End Sub
private int _streamA = 0;
private int _dspPluginA = 0;
private DSPPROC _myDSPAddr;
...
_dspPluginA = BassWaDsp.BASS_WADSP_Load("dsp_test.dll", 5, 5, 100, 100, null);
BassWaDsp.BASS_WADSP_Start(_dspPluginA, 0, 0);
...
_streamA = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                BASSFlag.BASS_DEFAULT | BASSFlag.BASS_STREAM_AUTOFREE);
// play the stream
if (_streamA != 0 )
{
  _myDSPAddr = new DSPPROC(MyWinampDSP);
  Bass.BASS_ChannelSetDSP(_streamA, _myDSPAddr, new IntPtr(_dspPluginA), -500);
  BassWaDsp.BASS_WADSP_SetChannel(_dspPluginA, _streamA);
  Bass.BASS_ChannelPlay(_streamA, false);
}
...
private void MyWinampDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
{
  if (length == 0 || buffer == IntPtr.Zero)
    return;
  BassWaDsp.BASS_WADSP_ModifySamplesDSP(user.ToInt32(), buffer, length);
}
See Also

Reference