BASS.NET API for the Un4seen BASS Audio Library

BassAsioHandler Constructor

BASS.NET API for the Un4seen BASS Audio Library
Default constructor - leaving all defaults and not assigning any ASIO channel.

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

public BassAsioHandler()
Remarks

Use this constructor, if you for example want to leverage the AsioToBassFullDuplexCallback(Boolean, Int32, IntPtr, Int32, IntPtr), AsioInputCallback(Boolean, Int32, IntPtr, Int32, IntPtr) or AsioToAsioFullDuplexCallback(Boolean, Int32, IntPtr, Int32, IntPtr) callback methods. In this case make sure to also set the OutputChannel property, since this member will be used in the mentioned default callback procedures. Also make sure, that the ASIO channel use will use matches the samplerate and the format of the OutputChannel!
Examples

Manual use of the BassAsioHandler:
private ASIOPROC _myAsioProc;
private BassAsioHandler _asio;
...
// not playing anything via BASS, so don't need an update thread
Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 0);
// setup BASS - "no sound" device but 48000 (default for ASIO)
Bass.BASS_Init(0, 48000, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
...
int stream = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                  BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
if (stream != 0)
{
  _asio = new BassAsioHandler();
  _asio.OutputChannel = stream;

  // now setup ASIO manually
  _myAsioProc = new ASIOPROC(_asio.BassToAsioOutputCallback);
  // get the stream channel info
  BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
  // enable 1st output channel...(0=first)
  BassAsio.BASS_ASIO_ChannelEnable(false, 0, _myAsioProc, stream);
  // and join the next channels to it
  for (int a=1; a<info.chans; a++)
    BassAsio.BASS_ASIO_ChannelJoin(false, a, 0);
  // since we joined the channels, the next commands will apply to all channles joined
  // so setting the values to the first channels changes them all automatically
  // set the source format (float, as the decoding channel is)
  BassAsio.BASS_ASIO_ChannelSetFormat(false, 0, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT);
  // set the source rate
  BassAsio.BASS_ASIO_ChannelSetRate(false, 0, (double)info.freq);
  // try to set the device rate too (saves resampling)
  BassAsio.BASS_ASIO_SetRate( (double)info.freq );
  // and start playing it...start output using default buffer/latency
  _asio.Start(0);
}
See Also

Reference