BASS.NET API for the Un4seen BASS Audio LibraryENCODENOTIFYPROC DelegateBASS.NET API for the Un4seen BASS Audio Library
User defined callback function to receive notifications on an encoder's status.

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

public delegate void ENCODENOTIFYPROC(
	int handle,
	BASSEncodeNotify status,
	IntPtr user


Type: SystemInt32
The encoder that the notification is from (as returned by BASS_Encode_SetNotify(Int32, ENCODENOTIFYPROC, IntPtr)).
Type: Un4seen.Bass.AddOn.EncBASSEncodeNotify
The encoder's status, one of the following (see BASSEncodeNotify):


BASS_ENCODE_NOTIFY_CAST : Cast server connection died.

BASS_ENCODE_NOTIFY_CAST_TIMEOUT : Cast data sending timeout. The connection is not dead at this point, it may just be a temporary problem.

BASS_ENCODE_NOTIFY_QUEUE_FULL : The queue length has reached its limit (or out of memory) and data has been dropped. The total amount of dropped data is available from BASS_Encode_GetCount(Int32, BASSEncodeCount).

BASS_ENCODE_NOTIFY_FREE : The encoder has been freed.

Type: SystemIntPtr
The user instance data given when BASS_Encode_SetNotify(Int32, ENCODENOTIFYPROC, IntPtr) was called.

When setting a notification callback on a channel, it only applies to the encoders that are currently set on the channel. Subsequent encoders will not automatically have the notification callback set on them, this function will have to be called again to set them up.

An encoder can only have one notification callback set. Subsequent calls of this function can be used to change the callback function, or disable notifications (proc = ).

If the encoder is already dead when setting up a notification callback, the callback will be triggered immediately.

It is safe to call BASS_Encode_Stop(Int32) to free an encoder from within a notification callback.


Using the callback with a recording caster:
Private _myEndoderNotify As ENCODENOTIFYPROC
Private _encoder As Integer = 0
Private _recChan As Integer = 0
Private _autoreconnect As Boolean = True
_recChan = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, 20, Nothing, IntPtr.Zero)
Private Sub Start()
  ' start an encoder
  _encoder = BassEnc.BASS_Encode_Start(_recChan, "lame -r -x -s 44100 -b 128 -", 
                     BASSEncode.BASS_ENCODE_NOHEAD, Nothing, IntPtr.Zero)
  _myEndoderNotify = New ENCODENOTIFYPROC(AddressOf EncoderNotify)
  ' start a caster
  BassEnc.BASS_Encode_CastInit(_encoder, "", "password", 
          Bass.BASS_ENCODE_TYPE_MP3, "name", "url", "genre", Nothing, Nothing, 128, True)
  ' notify on dead encoder/connection 
  BassEnc.BASS_Encode_SetNotify(_encoder, _myEndoderNotify, IntPtr.Zero)
End Sub

Private Sub Stop()
  If _encoder <> 0 Then
    BassEnc.BASS_Encode_SetNotify(_encoder, Nothing, IntPtr.Zero)
    _encoder = 0
  End If
End Sub

Private Sub EncoderNotify(handle As Integer, status As BASSEncodeNotify, user As IntPtr)
  ' encoder/connection lost
  If _autoreconnect Then
    ' do auto-reconnect...
    Thread.Sleep(1000) ' wait a sec
  End If
End Sub
private ENCODENOTIFYPROC _myEndoderNotify;
private int _encoder = 0;
private int _recChan = 0;
private bool _autoreconnect = true;
_recChan = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, 20, null, IntPtr.Zero);
private void Start()
  // start an encoder
  _encoder = BassEnc.BASS_Encode_Start(_recChan, "lame -r -x -s 44100 -b 128 -", 
                     BASSEncode.BASS_ENCODE_NOHEAD, null, IntPtr.Zero);
  _myEndoderNotify = new ENCODENOTIFYPROC(EncoderNotify);
  // start a caster
  BassEnc.BASS_Encode_CastInit(_encoder, "", "password", 
          BassEnc.BASS_ENCODE_TYPE_MP3, "name", "url", "genre", null, null, 128, true);
  // notify on dead encoder/connection 
  BassEnc.BASS_Encode_SetNotify(_encoder, _myEndoderNotify, IntPtr.Zero);

private void Stop()
  if (_encoder != 0)
    BassEnc.BASS_Encode_SetNotify(_encoder, null, IntPtr.Zero);
    _encoder = 0;

private void EncoderNotify(int handle, BASSEncodeNotify status, IntPtr user)
  // encoder/connection lost
  if (_autoreconnect)
    // do auto-reconnect...
    Thread.Sleep(1000); // wait a sec
See Also